of its descendants, and of these the most important is C++ (Stroustrup, the structure of a program, without executing it. 1986) which adds object oriented programming constructs. Complexity analysis Testing procedures A complexity analyser will provide an estimate of the complexity of a module of code based on its structure. The estimate will be Testing is a process used to give confidence that a system's beha- derived from features such as viour or its attributes are acceptable. Tests do not prove that a system is free from faults; tests may find faults but cannot show absence of 1. The number and the intricacy of the interfaces to the code. faults. 2. The number and the linking of decision points within the code. The main stages of testing, as described above, are unit testing, 3. The nature of the data structures used. integration and system testing and acceptance testing. However, all outputs of each stage of the development process can be tested. Perhaps the best known complexity measure is McCabe's cyclo- matic number (McCabe, 1976), which is the number of linearly 25.7.1 Testing by analysis independent control paths in the program. 25.7.1.1 Inspections and walk throughs Data flow analysis Inspections (Fagan, 1976) and walk throughs are similar techniques. Data flow analysers examine paths through the module of code, In each case the item to be examined, such as the specification of a looking at the way data is defined and used. They report potential system or the listing of a module of code, is made available a small errors in cases, for example, where data variables are: number of days in advance of the inspection or walk through to its reviewers. They, and there is often just one reviewer, and usually no 1. Defined and then redefined without being used. more than three, familiarise themselves with the item. At the review 2. Used without being defined. the author of the item talks through the item step by step, exploring what is happening and answering questions posed by the reviewers. Some special purpos