[Title Page] [TOC] [Prev] [Next] [End]

Abstract

Keywords

Acknowledgments

Disclaimer

Executive Summary

1 Introduction

1.1 Software testing
1.2 Software complexity measurement
1.3 Relationship between complexity and testing
1.4 Document overview and audience descriptions

2 Cyclomatic Complexity

2.1 Control flow graphs
2.2 Definition of cyclomatic complexity, v(G)
2.3 Characterization of v(G) using a basis set of control flow paths
2.4 Example of v(G) and basis paths
2.5 Limiting cyclomatic complexity to 10

3 Examples of Cyclomatic Complexity

3.1 Independence of complexity and size
3.2 Several flow graphs and their complexity

4 Simplified Complexity Calculation

4.1 Counting predicates
4.2 Counting flow graph regions
4.3 Use of automated tools

5 Structured Testing

5.1 The structured testing criterion
5.2 Intuition behind structured testing
5.3 Complexity and reliability
5.4 Structured testing example
5.5 Weak structured testing
5.6 Advantages of automation
5.7 Critical software

6 The Baseline Method

6.1 Generating a basis set of paths
6.2 The simplified baseline method
6.3 The baseline method in practice
6.4 Example of the baseline method
6.5 Completing testing with the baseline method

7 Integration Testing

7.1 Integration strategies
7.2 Combining module testing and integration testing
7.3 Generalization of module testing criteria
7.4 Module design complexity
7.5 Integration complexity
7.6 Incremental integration

8 Testing Object-Oriented Programs

8.1 Benefits and dangers of abstraction
8.2 Object-oriented module testing
8.3 Integration testing of object-oriented programs
8.4 Avoiding unnecessary testing

9 Complexity Reduction

9.1 Actual complexity and realizable complexity
9.2 Removing control dependencies
9.3 Trade-offs when reducing complexity

10 Essential Complexity

10.1 Structured programming and maintainability
10.2 Definition of essential complexity, ev(G)
10.3 Examples of essential complexity

11 Maintenance

11.1 Effects of changes on complexity
11.1.1 Effect of changes on cyclomatic complexity
11.1.2 Effect of changes on essential complexity
11.1.3 Incremental reengineering
11.2 Retesting at the path level
11.3 Data complexity
11.4 Reuse of testing information

12 Summary by Lifecycle Process

12.1 Design process
12.2 Coding process
12.3 Unit testing process
12.4 Integration testing process
12.5 Maintenance process

13 References

Appendix A Related Case Studies

A.1 Myers
A.2 Schneidewind and Hoffman
A.3 Walsh
A.4 Henry, Kafura, and Harris
A.5 Sheppard and Kruesi
A.6 Carver
A.7 Kafura and Reddy
A.8 Gibson and Senn
A.9 Ward
A.10 Caldiera and Basili
A.11 Gill and Kemerer
A.12 Schneidewind
A.13 Case study at Stratus Computer
A.14 Case study at Digital Equipment Corporation
A.15 Case study at U.S. Army Missile Command
A.16 Coleman et al
A.17 Case study at the AT&T Advanced Software Construction Center
A.18 Case study at Sterling Software
A.19 Case Study at GTE Government Systems
A.20 Case study at Elsag Bailey Process Automation
A.21 Koshgoftaar et al

Appendix B Extended Example

B.1 Testing the blackjack program
B.2 Experimental comparison of structured testing and branch coverage

CONTENTS


Abstract

Keywords

Acknowledgments

Executive Summary

1 Introduction

1.1 Software testing
1.2 Software complexity measurement
1.3 Relationship between complexity and testing
1.4 Document overview and audience descriptions

2 Cyclomatic Complexity

2.1 Control flow graphs
2.2 Definition of cyclomatic complexity, v(G)
2.3 Characterization of v(G) using a basis set of control flow paths
2.4 Example of v(G) and basis paths
2.5 Limiting cyclomatic complexity to 10

3 Examples of Cyclomatic Complexity

3.1 Independence of complexity and size
3.2 Several flow graphs and their complexity

4 Simplified Complexity Calculation

4.1 Counting predicates
4.2 Counting flow graph regions
4.3 Use of automated tools

5 Structured Testing

5.1 The structured testing criterion
5.2 Intuition behind structured testing
5.3 Complexity and reliability
5.4 Structured testing example
5.5 Weak structured testing
5.6 Advantages of automation
5.7 Critical software

6 The Baseline Method

6.1 Generating a basis set of paths
6.2 The simplified baseline method
6.3 The baseline method in practice
6.4 Example of the baseline method
6.5 Completing testing with the baseline method

7 Integration Testing

7.1 Integration strategies
7.2 Combining module testing and integration testing
7.3 Generalization of module testing criteria
7.4 Module design complexity
7.5 Integration complexity
7.6 Incremental integration

8 Testing Object-Oriented Programs

8.1 Benefits and dangers of abstraction
8.2 Object-oriented module testing
8.3 Integration testing of object-oriented programs
8.4 Avoiding unnecessary testing

9 Complexity Reduction

9.1 Actual complexity and realizable complexity
9.2 Removing control dependencies
9.3 Trade-offs when reducing complexity

10 Essential Complexity

10.1 Structured programming and maintainability
10.2 Definition of essential complexity, ev(G)
10.3 Examples of essential complexity

11 Maintenance

11.1 Effects of changes on complexity
11.1.1 Effect of changes on cyclomatic complexity
11.1.2 Effect of changes on essential complexity
11.1.3 Incremental reengineering
11.2 Retesting at the path level
11.3 Data complexity
11.4 Reuse of testing information

12 Summary by Lifecycle Process

12.1 Design process
12.2 Coding process
12.3 Unit testing process
12.4 Integration testing process
12.5 Maintenance process

13 References

Appendix A Related Case Studies

A.1 Myers
A.2 Schneidewind and Hoffman
A.3 Walsh
A.4 Henry, Kafura, and Harris
A.5 Sheppard and Kruesi
A.6 Carver
A.7 Kafura and Reddy
A.8 Gibson and Senn
A.9 Ward
A.10 Caldiera and Basili
A.11 Gill and Kemerer
A.12 Schneidewind
A.13 Case study at Stratus Computer
A.14 Case study at Digital Equipment Corporation
A.15 Case study at U.S. Army Missile Command
A.16 Coleman et al
A.17 Case study at the AT&T Advanced Software Construction Center
A.18 Case study at Sterling Software
A.19 Case Study at GTE Government Systems
A.20 Case study at Elsag Bailey Process Automation
A.21 Koshgoftaar et al

Appendix B Extended Example

B.1 Testing the blackjack program
B.2 Experimental comparison of structured testing and branch coverage

CONTENTS


Abstract

Keywords

Acknowledgments

Disclaimer

Executive Summary

1 Introduction

1.1 Software testing
1.2 Software complexity measurement
1.3 Relationship between complexity and testing
1.4 Document overview and audience descriptions

2 Cyclomatic Complexity

2.1 Control flow graphs
2.2 Definition of cyclomatic complexity, v(G)
2.3 Characterization of v(G) using a basis set of control flow paths
2.4 Example of v(G) and basis paths
2.5 Limiting cyclomatic complexity to 10

3 Examples of Cyclomatic Complexity

3.1 Independence of complexity and size
3.2 Several flow graphs and their complexity

4 Simplified Complexity Calculation

4.1 Counting predicates
4.2 Counting flow graph regions
4.3 Use of automated tools

5 Structured Testing

5.1 The structured testing criterion
5.2 Intuition behind structured testing
5.3 Complexity and reliability
5.4 Structured testing example
5.5 Weak structured testing
5.6 Advantages of automation
5.7 Critical software

6 The Baseline Method

6.1 Generating a basis set of paths
6.2 The simplified baseline method
6.3 The baseline method in practice
6.4 Example of the baseline method
6.5 Completing testing with the baseline method

7 Integration Testing

7.1 Integration strategies
7.2 Combining module testing and integration testing
7.3 Generalization of module testing criteria
7.4 Module design complexity
7.5 Integration complexity
7.6 Incremental integration

8 Testing Object-Oriented Programs

8.1 Benefits and dangers of abstraction
8.2 Object-oriented module testing
8.3 Integration testing of object-oriented programs
8.4 Avoiding unnecessary testing

9 Complexity Reduction

9.1 Actual complexity and realizable complexity
9.2 Removing control dependencies
9.3 Trade-offs when reducing complexity

10 Essential Complexity

10.1 Structured programming and maintainability
10.2 Definition of essential complexity, ev(G)
10.3 Examples of essential complexity

11 Maintenance

11.1 Effects of changes on complexity
11.1.1 Effect of changes on cyclomatic complexity
11.1.2 Effect of changes on essential complexity
11.1.3 Incremental reengineering
11.2 Retesting at the path level
11.3 Data complexity
11.4 Reuse of testing information

12 Summary by Lifecycle Process

12.1 Design process
12.2 Coding process
12.3 Unit testing process
12.4 Integration testing process
12.5 Maintenance process

13 References

Appendix A Related Case Studies

A.1 Myers
A.2 Schneidewind and Hoffman
A.3 Walsh
A.4 Henry, Kafura, and Harris
A.5 Sheppard and Kruesi
A.6 Carver
A.7 Kafura and Reddy
A.8 Gibson and Senn
A.9 Ward
A.10 Caldiera and Basili
A.11 Gill and Kemerer
A.12 Schneidewind
A.13 Case study at Stratus Computer
A.14 Case study at Digital Equipment Corporation
A.15 Case study at U.S. Army Missile Command
A.16 Coleman et al
A.17 Case study at the AT&T Advanced Software Construction Center
A.18 Case study at Sterling Software
A.19 Case Study at GTE Government Systems
A.20 Case study at Elsag Bailey Process Automation
A.21 Koshgoftaar et al

Appendix B Extended Example

B.1 Testing the blackjack program
B.2 Experimental comparison of structured testing and branch coverage


[Title Page] [TOC] [Prev] [Next] [End]