Section I: A MATHEMATICAL CONTEXT
A Perspective on Testing
Basic Definitions
Test Cases
Insights from a Venn Diagram
Identifying Test Cases
Fault Taxonomies
Levels of Testing
Examples
Generalized Pseudocode
The Triangle Problem
The NextDate Function
The Commission Problem
The SATM System
The Currency Converter
Saturn Windshield Wiper Controller
Garage Door Opener
Discrete Math for Testers
Set Theory
Functions
Relations
Propositional Logic
Probability Theory
Graph Theory for Testers
Graphs
Directed Graphs
Graphs for Testing
Section II: UNIT TESTING
Boundary Value Testing
Normal Boundary Value Testing
Robust Boundary Value Testing
Worst-Case Boundary Value Testing
Special Value Testing
Examples
Random Testing
Guidelines for Boundary Value Testing
Equivalence Class Testing
Equivalence Classes
Traditional Equivalence Class Testing
Improved Equivalence Class Testing
Equivalence Class Test Cases for the Triangle Problem
Equivalence Class Test Cases for the NextDate Function
Equivalence Class Test Cases for the Commission Problem
Edge Testing
Guidelines and Observations
Decision Table–Based Testing
Decision Tables
Decision Table Techniques
Test Cases for the Triangle Problem
Test Cases for the NextDate Function
Test Cases for the Commission Problem
Cause-and-Effect Graphing
Guidelines and Observations
Path Testing
Program Graphs
DD-Paths
Test Coverage Metrics
Basis Path Testing
Guidelines and Observations
Data Flow Testing
Define/Use Testing
Slice-Based Testing
Program Slicing Tools
Retrospective on Unit Testing
The Test Method Pendulum
Traversing the Pendulum
Evaluating Test Methods
Insurance Premium Case Study
Guidelines
Section III: BEYOND UNIT TESTING
Life Cycle–Based Testing
Traditional Waterfall Testing
Testing in Iterative Life Cycles
Agile Testing
Agile Model–Driven Development
Model-Based Testing
Testing Based on Models
Appropriate Models
Commercial Tool Support for Model-Based Testing
Integration Testing
Decomposition-Based Integration
Call Graph–Based Integration
Path-Based Integration
Example: integrationNextDate
Conclusions and Recommendations
System Testing
Threads
Basis Concepts for Requirements Specification
Model-Based Threads
Use Case–Based Threads
Long versus Short Use Cases
How Many Use Cases?
Coverage Metrics for System Testing
Supplemental Approaches to System Testing
Nonfunctional System Testing
Atomic System Function Testing Example
Object-Oriented Testing
Issues in Testing Object-Oriented
Software
Example: ooNextDate
Object-Oriented Unit Testing
Object-Oriented Integration Testing
Object-Oriented System Testing
Software Complexity
Unit-Level Complexity
Integration-Level Complexity
Software Complexity Example
Object-Oriented Complexity
System-Level Complexity
Model-Based Testing for Systems of
Systems
Characteristics of Systems of Systems
Sample Systems of Systems
Software Engineering for Systems of Systems
Communication Primitives for Systems of Systems
Effect of Systems of Systems Levels on Prompts
Exploratory Testing
Exploratory Testing Explored
Exploring a Familiar Example
Observations and Conclusions
Test-Driven Development
Test-Then-Code Cycles
Automated Test Execution (Testing Frameworks)
Java and JUnit Example
Remaining Questions
Pros, Cons, and Open Questions of TDD
Retrospective on MDD versus TDD
A Closer Look at All Pairs Testing
The All Pairs
Technique
A Closer Look at the NIST Study
Appropriate Applications for All Pairs Testing
Recommendations for All Pairs Testing
Evaluating Test Cases
Mutation Testing
Fuzzing
Fishing Creel Counts and Fault Insertion
Software Technical Reviews
Economics of Software
Reviews
Roles in a Review
Types of Reviews
Contents of an Inspection Packet
An Industrial-Strength Inspection Process
Effective Review Culture
Inspection Case Study
Epilogue: Software Testing Excellence
Craftsmanship
Best Practices of Software Testing
My Top 10 Best Practices for Software Testing Excellence
Mapping Best Practices to Diverse Projects
References
Appendix: Complete Technical Inspection Packet
Ask a Question About this Product More... |