4th Edition

Software Testing
A Craftsman’s Approach, Fourth Edition




ISBN 9781466560680
Published October 18, 2013 by Auerbach Publications
494 Pages 181 B/W Illustrations

USD $130.00

Prices & shipping based on shipping country


Preview

Book Description

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

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

...
View More