A formal guide to understanding how test data proves a program’s correctness, with practical ideas for designing effective tests.
This nonfiction work introduces a rigorous way to measure how well a set of test data can distinguish a program’s behavior from other programs with the same input-output results. It explains concepts like size-adequacy, branch coverage, and mutation analysis, and it shows how these ideas relate to making testing more reliable. The text also defines a small programming language to illustrate these ideas and presents results about when test data can or cannot be adequate.
- Learn how different notions of adequacy compare, from distinguishing programs by size to ensuring coverage of program branches.
- See how critical points and boundary values influence what tests must include.
- Understand how mutation analysis helps test sets catch differences that matter in practice.
- Explore theorems and arguments that connect test data choices to program size and structure.
Ideal for readers of theoretical computer science and software testing who want a clear framework for evaluating and improving test data.