Description
Efnisyfirlit
- Cover
- Half-title
- Title Page
- Copyright Page
- Contents
- List of Figures
- List of Tables
- Preface to the Second Edition
- Part 1 Foundations
- 1 Why Do We Test Software?
- 1.1 When Software Goes Bad
- 1.2 Goals of Testing Software
- 1.3 Bibliographic Notes
- 2 Model-Driven Test Design
- 2.1 Software Testing Foundations
- 2.2 Software Testing Activities
- 2.3 Testing Levels Based on Software Activity
- 2.4 Coverage Criteria
- 2.5 Model-Driven Test Design
- 2.5.1 Test Design
- 2.5.2 Test Automation
- 2.5.3 Test Execution
- 2.5.4 Test Evaluation
- 2.5.5 Test Personnel and Abstraction
- 2.6 Why MDTD Matters
- 2.7 Bibliographic Notes
- 3 Test Automation
- 3.1 Software Testability
- 3.2 Components of a Test Case
- 3.3 A Test Automation Framework
- 3.3.1 The JUnit Test Framework
- 3.3.2 Data-Driven Tests
- 3.3.3 Adding Parameters to Unit Tests
- 3.3.4 JUnit from the Command Line
- 3.4 Beyond Test Automation
- 3.5 Bibliographic Notes
- 4 Putting Testing First
- 4.1 Taming the Cost-of-Change Curve
- 4.1.1 Is the Curve Really Tamed?
- 4.2 The Test Harness as Guardian
- 4.2.1 Continuous Integration
- 4.2.2 System Tests in Agile Methods
- 4.2.3 Adding Tests to Legacy Systems
- 4.2.4 Weaknesses in Agile Methods for Testing
- 4.3 Bibliographic Notes
- 5 Criteria-Based Test Design
- 5.1 Coverage Criteria Defined
- 5.2 Infeasibility and Subsumption
- 5.3 Advantages of Using Coverage Criteria
- 5.4 Next Up
- 5.5 Bibliographic Notes
- Part 2 Coverage Criteria
- 6 Input Space Partitioning
- 6.1 Input Domain Modeling
- 6.1.1 Interface-Based Input Domain Modeling
- 6.1.2 Functionality-Based Input Domain Modeling
- 6.1.3 Designing Characteristics
- 6.1.4 Choosing Blocks and Values
- 6.1.5 Checking the Input Domain Model
- 6.2 Combination Strategies Criteria
- 6.3 Handling Constraints Among Characteristics
- 6.4 Extended Example: Deriving an IDM from JavaDoc
- 6.4.1 Tasks in Designing IDM-Based Tests
- 6.4.2 Designing IDM-Based Tests for Iterator
- 6.5 Bibliographic Notes
- 7 Graph Coverage
- 7.1 Overview
- 7.2 Graph Coverage Criteria
- 7.2.1 Structural Coverage Criteria
- 7.2.2 Touring, Sidetrips, and Detours
- 7.2.3 Data Flow Criteria
- 7.2.4 Subsumption Relationships Among Graph Coverage Criteria
- 7.3 Graph Coverage for Source Code
- 7.3.1 Structural Graph Coverage for Source Code
- 7.3.2 Data Flow Graph Coverage for Source Code
- 7.4 Graph Coverage for Design Elements
- 7.4.1 Structural Graph Coverage for Design Elements
- 7.4.2 Data Flow Graph Coverage for Design Elements
- 7.5 Graph Coverage for Specifications
- 7.5.1 Testing Sequencing Constraints
- 7.5.2 Testing State Behavior of Software
- 7.6 Graph Coverage for Use Cases
- 7.6.1 Use Case Scenarios
- 7.7 Bibliographic Notes
- 8 Logic Coverage
- 8.1 Semantic Logic Coverage Criteria (Active)
- 8.1.1 Simple Logic Expression Coverage Criteria
- 8.1.2 Active Clause Coverage
- 8.1.3 Inactive Clause Coverage
- 8.1.4 Infeasibility and Subsumption
- 8.1.5 Making a Clause Determine a Predicate
- 8.1.6 Finding Satisfying Values
- 8.2 Syntactic Logic Coverage Criteria (DNF)
- 8.2.1 Implicant Coverage
- 8.2.2 Minimal DNF
- 8.2.3 The MUMCUT Coverage Criterion
- 8.2.4 Karnaugh Maps
- 8.3 Structural Logic Coverage of Programs
- 8.3.1 Satisfying Predicate Coverage
- 8.3.2 Satisfying Clause Coverage
- 8.3.3 Satisfying Active Clause Coverage
- 8.3.4 Predicate Transformation Issues
- 8.3.5 Side Effects in Predicates
- 8.4 Specification-Based Logic Coverage
- 8.5 Logic Coverage of Finite State Machines
- 8.6 Bibliographic Notes
- 9 Syntax-Based Testing
- 9.1 Syntax-Based Coverage Criteria
- 9.1.1 Grammar-Based Coverage Criteria
- 9.1.2 Mutation Testing
- 9.2 Program-Based Grammars
- 9.2.1 BNF Grammars for Compilers
- 9.2.2 Program-Based Mutation
- 9.3 Integration and Object-Oriented Testing
- 9.3.1 BNF Integration Testing
- 9.3.2 Integration Mutation
- 9.4 Specification-Based Grammars
- 9.4.1 BNF Grammars
- 9.4.2 Specification-Based Mutation
- 9.5 Input Space Grammars
- 9.5.1 BNF Grammars
- 9.5.2 Mutating Input Grammars
- 9.6 Bibliographic Notes
- Part 3 Testing in Practice
- 10 Managing the Test Process
- 10.1 Overview
- 10.2 Requirements Analysis and Specification
- 10.3 System and Software Design
- 10.4 Intermediate Design
- 10.5 Detailed Design
- 10.6 Implementation
- 10.7 Integration
- 10.8 System Deployment
- 10.9 Operation and Maintenance
- 10.10 Implementing the Test Process
- 10.11 Bibliographic Notes
- 11 Writing Test Plans
- 11.1 Level Test Plan Example Template
- 11.2 Bibliographic Notes
- 12 Test Implementation
- 12.1 Integration Order
- 12.2 Test Doubles
- 12.2.1 Stubs and Mocks: Variations of Test Doubles
- 12.2.2 Using Test Doubles to Replace Components
- 12.3 Bibliographic Notes
- 13 Regression Testing for Evolving Software
- 13.1 Bibliographic Notes
- 14 Writing Effective Test Oracles
- 14.1 What Should Be Checked?
- 14.2 Determining Correct Values
- 14.2.1 Specification-Based Direct Verification of Outputs
- 14.2.2 Redundant Computations
- 14.2.3 Consistency Checks
- 14.2.4 Metamorphic Testing
- 14.3 Bibliographic Notes
- List of Criteria
- Bibliography
- Index