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