Page 236 -
P. 236

8.1   Development testing  219




                               Incremental integration and testing

                        System testing involves integrating different components then testing the integrated system that you have created.
                        You should always use an incremental approach to integration and testing (i.e., you should integrate a component,
                        test the system, integrate another component, test again, and so on). This means that if problems occur, it is probably
                        due to interactions with the most recently integrated component.
                        Incremental integration and testing is fundamental to agile methods such as XP, where regression tests (see Section
                        8.2) are run every time a new increment is integrated.
                                     http://www.SoftwareEngineering-9.com/Web/Testing/Integration.html

                                8.1.4 System testing

                                       System testing during development involves integrating components to create a ver-
                                       sion of the system and then testing the integrated system. System testing checks that
                                       components are compatible, interact correctly and transfer the right data at the right
                                       time across their interfaces. It obviously overlaps with component testing but there
                                       are two important differences:

                                       1.  During system testing, reusable components that have been separately devel-
                                           oped and off-the-shelf systems may be integrated with newly developed compo-
                                           nents. The complete system is then tested.
                                       2.  Components developed by different team members or groups may be integrated
                                           at this stage. System testing is a collective rather than an individual process. In
                                           some companies, system testing may involve a separate testing team with no
                                           involvement from designers and programmers.

                                         When you integrate components to create a system, you get emergent behavior.
                                       This means that some elements of system functionality only become obvious when
                                       you put the components together. This may be planned emergent behavior, which
                                       has to be tested. For example, you may integrate an authentication component with a
                                       component that updates information. You then have a system feature that restricts
                                       information  updating  to  authorized  users.  Sometimes,  however,  the  emergent
                                       behavior is unplanned and unwanted. You have to develop tests that check that the
                                       system is only doing what it is supposed to do.
                                         Therefore system testing should focus on testing the interactions between the
                                       components and objects that make up a system. You may also test reusable compo-
                                       nents or systems to check that they work as expected when they are integrated with
                                       new components. This interaction testing should discover those component bugs that
                                       are only revealed when a component is used by other components in the system.
                                       Interaction testing also helps find misunderstandings, made by component develop-
                                       ers, about other components in the system.
                                         Because of its focus on interactions, use case–based testing is an effective
                                       approach to system testing. Typically, each use case is implemented by several com-
                                       ponents or objects in the system. Testing the use case forces these interactions to
   231   232   233   234   235   236   237   238   239   240   241