Software Testing: A Craftsman’s Approach, Fourth Edition, 4th Edition (Hardback) book cover

Software Testing

A Craftsman’s Approach, Fourth Edition, 4th Edition

By Paul C. Jorgensen

Auerbach Publications

494 pages | 181 B/W Illus.

Purchasing Options:$ = USD
Hardback: 9781466560680
pub: 2013-10-18
SAVE ~$25.00
eBook (VitalSource) : 9781315373478
pub: 2018-12-07
from $62.50

FREE Standard Shipping!


This updated and reorganized fourth edition of Software Testing: A Craftsman's Approach applies the strong mathematics content of previous editions to a coherent treatment of Model-Based Testing for both code-based (structural) and specification-based (functional) testing. These techniques are extended from the usual unit testing discussions to full coverage of less understood levels integration and system testing. 

The Fourth Edition:

  • Emphasizes technical inspections and is supplemented by an appendix with a full package of documents required for a sample Use Case technical inspection
  • Introduces an innovative approach that merges the Event-Driven Petri Nets from the earlier editions with the "Swim Lane" concept from the Unified Modeling Language (UML) that permits model-based testing for four levels of interaction among constituents in a System of Systems
  • Introduces model-based development and provides an explanation of how to conduct testing within model-based development environments
  • Presents a new section on methods for testing software in an Agile programming environment
  • Explores test-driven development, reexamines all-pairs testing, and explains the four contexts of software testing

Thoroughly revised and updated, Software Testing: A Craftsman’s Approach, Fourth Edition is sure to become a standard reference for those who need to stay up to date with evolving technologies in software testing. Carrying on the tradition of previous editions, it will continue to serve as a valuable reference for software testers, developers, and engineers.

Table of Contents


A Perspective on Testing

Basic Definitions

Test Cases

Insights from a Venn Diagram

Identifying Test Cases

Fault Taxonomies

Levels of Testing


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



Propositional Logic

Probability Theory

Graph Theory for Testers


Directed Graphs

Graphs for Testing


Boundary Value Testing

Normal Boundary Value Testing

Robust Boundary Value Testing

Worst-Case Boundary Value Testing

Special Value Testing


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


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



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


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


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


Best Practices of Software Testing

My Top 10 Best Practices for Software Testing Excellence

Mapping Best Practices to Diverse Projects


Appendix: Complete Technical Inspection Packet

Subject Categories

BISAC Subject Codes/Headings:
COMPUTERS / Information Technology
COMPUTERS / Programming Languages / General
COMPUTERS / Software Development & Engineering / General