Software Testing:

A Craftsman's Approach,

5th Edition

The following is an outline including parts, chapters, sections, and major sub-sections:


PART I A Mathematical Context


1 A Perspective on Testing

1.1 Basic Definitions

1.2 Test Cases

1.3 Insights from a Venn Diagram

1.4 Identifying Test Cases

1.5 Fault Taxonomies

1.6 Levels of Testing

Exercises

References

2 Examples

2.1 Structural Elements of Pseudo-code and Java

2.2 The Triangle Problem

2.3 The NextDate Function

2.4 The Foodies-Wish-List Online Shopping Application

2.5 The Garage Door Controller

2.6 Examples in Exercises

2.6.1 The Quadrilateral Program

2.6.2 The NextWeek Function

2.6.3 The Windshield Wiper Controller

Exercises

References

3 Discrete Math for Testers

3.1 Set Theory

3.2 Functions

3.3 Relations

3.4 Propositional Logic

Exercises

Reference


4 Graph Theory for Testers

4.1 Graphs

4.2 Directed Graphs

4.3 Graphs for Testing

4.3.1 Program Graphs

4.3.2 Finite State Machines

4.3.3 Petri Nets

4.3.4 Event-Driven Petri Nets

4.3.5 Statecharts

Exercises

Reference


PART II Unit Testing


5 Boundary Value Testing

5.1 Normal Boundary Value Testing

5.2 Robust Boundary Value Testing

5.3 Worst Case Boundary Value Testing

5.4 Special Value Testing

5.5 Examples

5.6 Random Testing

5.7 Guidelines for Boundary Value Testing

Exercises

References


6 Equivalence Class Testing

6.1 Equivalence Classes

6.2 Traditional Equivalence Class Testing

6.3 Improved Equivalence Class Testing

6.4 Equivalence Class Test Cases for the Triangle Problem

6.5 Equivalence Class Test Cases for the NextDate Function

6.6 Equivalence Class Test Cases for the completeOrder Method

6.7 “Edge Testing”

6.8 Reflections on Invalid Classes

6.9 Guidelines and Observations

Exercises

References

7 Decision Table-Based Testing

7.1 Decision Tables

7.2 Decision Table Techniques

7.3 Test Cases for the Triangle Problem

7.4 Test Cases for the NextDate Function

7.5 Cause and Effect Graphing

7.6 Guidelines and Observations

Exercises

References

8 Code-Based Testing

8.1 Program Graphs

8.2 DD-Paths

8.3 Code Coverage Metrics

8.4 Basis Path Testing

8.4.1 McCabe’s Basis Path Method

8.4.2 Observations on McCabe’s Basis Path Method

8.4.3 Essential Complexity

8.5 Guidelines and Observations

Exercises

References

9 Testing Object-Oriented Software

9.1 Unit Testing Frameworks

9.1.1 Common Unit Testing Frameworks

9.1.2 JUnit Examples

9.2 Mock Objects and Automated Object Mocking

9.3 Dataflow Testing

9.4 Object-Oriented Complexity Metrics

9.5 Issues in Testing Object-Oriented Software

9.6 Slice-Based Testing

9.6.1 Example

9.6.2 Style and Technique

9.6.3 Slice Splicing

9.6.4 Program Slicing Tools

Exercises

References

10 Retrospective on Unit Testing

10.1 The Test Method Pendulum

10.2 Traversing the Pendulum

10.3 Insurance Premium Case Study

10.4 Specification-Based Testing

10.5 Guidelines

Exercises

References


PART III Beyond Unit Testing


11 Life Cycle-Based Testing

11.1 Traditional Waterfall Testing

11.2 Testing in Iterative Lifecycles

11.3 Agile Testing

11.4 Remaining Questions

11.5 Pros, cons, and Open Questions of TDD

11.6 Retrospective on MDD vs TDD

References

12 Integration Testing

12.1 Decomposition-Based Integration

12.2 Call Graph-Based Integration

12.3 Path-Based Integration

12.4 Example: Procedural integrationNextDate

12.5 Example: O-O integrationNextDate

12.6 Model-Based Integration Testing

Exercises

References

13 System Testing

13.1 Threads

13.2 Identifying Threads in Single-Processor Applications

13.3 Identifying Threads in Systems of Systems

13.4 System Level Test Cases

13.5 Coverage Metrics for System Testing

13.6 Long Versus Short Test Cases

13.6.1 Supplemental Approaches to System Testing

13.6.2 Operational Profiles

13.6.2.1 Risk-Based Testing

13.7 Non-functional System Testing

Exercises

References

14 Model-Based Testing

14.1 Testing Based on Models

14.2 Appropriate Models

14.3 Commercial Tool Support for Model-Based Testing

Exercises

References


15 Software Complexity

15.1 Unit Level Complexity

15.1.1 Cyclomatic Complexity

15.1.1.1 “Cattle Pens” and Cyclomatic Complexity

15.1.1.2 Node Outdegrees and Cyclomatic Complexity

15.1.1.3 Decisional Complexity

15.1.2 Computational Complexity

15.1.2.1 Halstead’s Metrics

15.1.2.2 Example: Day of Week with Zeller’s Congruence

15.2 Integration Level Complexity

15.3 Software Complexity Example

15.4 Object-Oriented Complexity

15.5 System Level Complexity

Exercise

References

16 Testing Systems of Systems

16.1 Characteristics of Systems of Systems

16.2 Sample Systems of Systems

16.3 Software Engineering for Systems of Systems

16.4 Communication Primitives for Systems of Systems

16.5 Effect of Systems of Systems Levels on Prompts

Exercises

References


17 Feature Interaction Testing

17.1 Feature Interaction Problem Defined

17.2 Types of Feature Interactions

17.2.1 Input Conflict

17.2.2 Output Conflict

17.2.3 Resource Conflict

17.3 A Taxonomy of Interactions

17.3.1 Static Interactions in a Single Processor

17.3.2 Static Interactions in Multiple Processors

17.3.3 Dynamic Interactions in a Single Processor

17.3.4 Dynamic Interactions in Multiple Processors

17.4 Interaction, Composition, and Determinism

Exercises

References

18 Case Study: Testing Event-Driven Systems

18.1 The Garage Door Controller Problem Statement

18.2 Modeling with Behavior Driven Development (BDD)

18.3 Modeling with Extended Finite State Machines

18.4 Modeling with Swim Lane Event-Driven Petri Nets

18.5 Deriving Test Cases from Swim Lane Event-Driven Petri Nets

18.6 Failure Mode Event Analysis (FMEA)

Exercises

References

19 A Closer Look at All Pairs Testing

19.1 The All Pairs Technique

19.2 A Closer Look at the NIST Study

19.3 Appropriate Applications for All-Pairs Testing

19.4 Recommendations for All Pairs Testing

Exercises

References


20 Software Technical Reviews

20.1 Economics of Software Reviews

20.2 Types of Reviews

20.3 Roles in a Review

20.4 Contents of an Inspection Packet

20.5 An Industrial-Strength Inspection Process

20.6 Effective Review Culture

20.7 Inspection Case Study

References


21 Epilogue: Software Testing Excellence

21.1 Craftsmanship

21.2 Best Practices of Software Testing

21.3 Our Top 10 Best Practices for Software Testing Excellence

21.4 Mapping Best Practices to Diverse Projects

21.5 An Extreme Example

References


Appendix A: Complete Technical Inspection Packet


Appendix B: Foodies Wish List Example