Integration testing can proceed in a number of different ways, which can be
broadly characterised as top down or
bottom up. In
top down integration testing the high level
control routines are tested first, possibly with the middle level control
structures present only as stubs. Subprogram stubs
were presented in Section 2 as incomplete subprograms which are only
present to allow the higher level control routines to be tested. Thus a menu
driven program may have the major menu options initially only present as stubs,
which merely announce that they have been successfully called, in order to
allow the high level menu driver to be tested.
Top down testing can proceed in a depth-first or a
breadth-first manner. For depth-first integration each module is
tested in increasing detail, replacing more and more levels of detail with
actual code rather than stubs. Alternatively breadth-first would proceed by
refining all the modules at the same level of control throughout the
application. In practice a combination of the two techniques would be used. At
the initial stages all the modules might be only partly functional, possibly
being implemented only to deal with non-erroneous data. These would be tested
in breadth-first manner, but over a period of time each would be replaced with
successive refinements which were closer to the full functionality. This allows
depth-first testing of a module to be performed simultaneously with
breadth-first testing of all the modules.
The other major category of integration testing is
bottom up integration testing where an individual
module is tested from a test harness. Once a set of individual modules have
been tested they are then combined into a collection of modules, known as
builds, which are then tested by a second test harness. This
process can continue until the build consists of the entire application.
In practice a combination of top-down and bottom-up testing would be used. In a
large software project being developed by a number of sub-teams, or a smaller
project where different modules were being built by individuals. The sub-teams
or individuals would conduct bottom-up testing of the modules which they were
constructing before releasing them to an integration team which would assemble
them together for top-down testing.
|