Preface
1 Introduction
1.1 The Software Industry
1.1.1 Software Testing and Quality
1.1.2 Software Testing and Risk Management
1.2 Mistakes, Faults and Failures
1.2.1 Software Faults
1.2.2 Software Failures
1.2.3 Need for Testing
1.3 The Role of Specifications
1.4 Overview of Testing
1.4.1 Testing in the Development Process
1.4.2 Test Automation
1.5 The Theory of Testing
1.5.1 Exhaustive Testing Example
1.5.2 Implications
1.5.3 When To Finish Testing
1.6 Book Structure
1.6.1 Order of Testing
1.6.2 Programming Language
1.6.3 Level of Detail
1.6.4 Code Examples
1.7 Notes on Terminology
2 Principles of Software Testing
2.1 Static Verification
2.1.1 Walk-throughs
2.1.2 Code Reviews/Inspections
2.1.3 Formal Methods and Testing
2.2 Dynamic Verification
2.3 Black-Box and White-Box Testing
2.3.1 Errors of “Omission” and “Commission”
2.4 Test Approaches
2.4.1 Black-Box Testing
2.4.2 White-Box Testing
2.4.3 Fault Insertion
2.5 Test Design Process
2.5.1 Analysis
2.5.2 Generating Test Cases
2.5.3 Generating Test Data
2.5.4 Implementing Tests
2.6 Analysis of Software Specifications
2.6.1 Parameters
2.6.2 Parameter Ranges
2.6.3 Equivalence Partitions
2.6.4 Boundary Values
2.6.5 Combinations of Values
2.6.6 Sequences of Values
2.7 Analysis of Software Components
2.7.1 Control Flow Graphs
2.7.2 Decisions and Conditions
2.7.3 Paths
2.7.4 Data Flows
2.8 Analysis of Targets for Fault Insertion
2.8.1 Offutt's 5 Sufficient Mutations
2.9 TestArtefacts
3 Unit Testing
3.1 Techniques
3.2 Usage
3.3 Black-Box Techniques
3.3.1 Equivalence Partitioning (EP)
3.3.2 Boundary Value Analysis (BVA)
3.3.3 Testing Combinations of Inputs
3.3.4 Testing Sequences of Inputs/State-Based Testing
3.3.5 Testing with Random Data
3.3.6 Error Guessing/Expert Opinion
3.4 White-Box Techniques
3.4.1 Statement Coverage (SC)
3.4.2 Branch Coverage (BC)
3.4.3 Condition Coverage (CC)
3.4.4 Decision Condition Coverage (DCC)
3.4.5 Multiple Condition Coverage (MCC)
3.4.6 Modified Condition Decision Coverage (MCDC)
3.4.7 Path Coverage
3.4.8 Dataflow Coverage (DU Pairs)
3.5 Fault Insertion
3.5.1 Strong Mutation Testing
3.6 Test Ranking
4 Unit Testing Examples
4.1 Example One: fits()
4.1.1 Description
4.1.2 Specification
4.1.3 Note on Black-Box Testing
4.1.4 Equivalence Partitioning
4.1.5 Boundary Value Analysis
4.1.6 Combinational Testing
4.1.7 Random Testing
4.1.8 Testing Sequences of Inputs
4.1.9 Elimination of Duplicate Black-Box Tests
4.1.10 Important Note on White-Box Testing
4.1.11 Source Code
4.1.12 Statement Coverage
4.1.13 Branch Coverage
4.1.14 Condition Coverage
4.1.15 Decision/Condition Coverage
4.1.16 Multiple Condition Coverage
4.1.17 Modified Condition Decision Coverage
4.1.18 Path Coverage
4.1.19 Dataflow Coverage (DU Pairs)
4.1.20 Elimination of Duplicate Tests
4.1.21 Test Implementation
4.2 Example Two: premium()
4.2.1 Description
4.2.2 Specification
4.2.3 Equivalence Partitioning
4.2.4 Boundary Value Analysis
4.2.5 Combinational Testing
4.2.6 Random Testing
4.2.7 Elimination of Duplicate Black-Box Tests
4.2.8 Source Code
4.2.9 Statement Coverage
4.2.10 Branch Coverage
4.2.11 Condition Coverage
4.2.12 Decision/Condition Coverage
4.2.13 Multiple Condition Coverage
4.2.14 Modified Condition Decision Coverage
4.2.15 Path Coverage
4.2.16 Dataflow Coverage (DU Pairs)
4.2.17 Elimination of Duplicate Tests
4.2.18 Test Implementation
5 U