You are previewing Introduction to Software Testing.
O'Reilly logo
Introduction to Software Testing

Book Description

Extensively class-tested, this textbook takes an innovative approach to software testing: it defines testing as the process of applying a few well-defined, general-purpose test criteria to a structure or model of the software. It incorporates the latest innovations in testing, including techniques to test modern types of software such as OO, web applications, and embedded software. The book contains numerous examples throughout. An instructor's solution manual, PowerPoint slides, sample syllabi, additional examples and updates, testing tools for students, and example software programs in Java are available on an extensive website.

Table of Contents

  1. Cover
  2. Title Page
  3. Contents
  4. Copyright Page
  5. List of Figures
  6. List of Tables
  7. Preface
  8. Part 1 Overview
    1. 1 Introduction
      1. 1.1 Activities of a Test Engineer
        1. 1.1.1 Testing Levels Based on Software Activity
        2. 1.1.2 Beizer’s Testing Levels Based on Test Process Maturity
        3. 1.1.3 Automation of Test Activities
      2. 1.2 Software Testing Limitations and Terminology
      3. 1.3 Coverage Criteria for Testing
        1. 1.3.1 Infeasibility and Subsumption
        2. 1.3.2 Characteristics of a Good Coverage Criterion
      4. 1.4 Older Software Testing Terminology
      5. 1.5 Bibliographic Notes
  9. Part 2 Coverage Criteria
    1. 2 Graph Coverage
      1. 2.1 Overview
      2. 2.2 Graph Coverage Criteria
        1. 2.2.1 Structural Coverage Criteria
        2. 2.2.2 Data Flow Criteria
        3. 2.2.3 Subsumption Relationships among Graph Coverage Criteria
      3. 2.3 Graph Coverage for Source Code
        1. 2.3.1 Structural Graph Coverage for Source Code
        2. 2.3.2 Data Flow Graph Coverage for Source Code
      4. 2.4 Graph Coverage for Design Elements
        1. 2.4.1 Structural Graph Coverage for Design Elements
        2. 2.4.2 Data Flow Graph Coverage for Design Elements
      5. 2.5 Graph Coverage for Specifications
        1. 2.5.1 Testing Sequencing Constraints
        2. 2.5.2 Testing State Behavior of Software
      6. 2.6 Graph Coverage for Use Cases
        1. 2.6.1 Use Case Scenarios
      7. 2.7 Representing Graphs Algebraically
        1. 2.7.1 Reducing Graphs to Path Expressions
        2. 2.7.2 Applications of Path Expressions
        3. 2.7.3 Deriving Test Inputs
      8. 2.7.4 Counting Paths in a Flow Graph and Determining Max Path Length
      9. 2.7.5 Minimum Number of Paths to Reach All Edges
      10. 2.7.6 Complementary Operations Analysis
      11. 2.8 Bibliographic Notes
    2. 3 Logic Coverage
      1. 3.1 Overview: Logic Predicates and Clauses
      2. 3.2 Logic Expression Coverage Criteria
        1. 3.2.1 Active Clause Coverage
        2. 3.2.2 Inactive Clause Coverage
        3. 3.2.3 Infeasibility and Subsumption
        4. 3.2.4 Making a Clause Determine a Predicate
        5. 3.2.5 Finding Satisfying Values
      3. 3.3 Structural Logic Coverage of Programs
        1. 3.3.1 Predicate Transformation Issues
      4. 3.4 Specification-Based Logic Coverage
      5. 3.5 Logic Coverage of Finite State Machines
      6. 3.6 Disjunctive Normal Form Criteria
      7. 3.7 Bibliographic Notes
    3. 4 Input Space Partitioning
      1. 4.1 Input Domain Modeling
        1. 4.1.1 Interface-Based Input Domain Modeling
        2. 4.1.2 Functionality-Based Input Domain Modeling
        3. 4.1.3 Identifying Characteristics
        4. 4.1.4 Choosing Blocks and Values
        5. 4.1.5 Using More than One Input Domain Model
        6. 4.1.6 Checking the Input Domain Model
      2. 4.2 Combination Strategies Criteria
      3. 4.3 Constraints among Partitions
      4. 4.4 Bibliographic Notes
    4. 5 Syntax-Based Testing
      1. 5.1 Syntax-Based Coverage Criteria
        1. 5.1.1 BNF Coverage Criteria
        2. 5.1.2 Mutation Testing
      2. 5.2 Program-Based Grammars
        1. 5.2.1 BNF Grammars for Languages
        2. 5.2.2 Program-Based Mutation
      3. 5.3 Integration and Object-Oriented Testing
        1. 5.3.1 BNF Integration Testing
        2. 5.3.2 Integration Mutation
      4. 5.4 Specification-Based Grammars
        1. 5.4.1 BNF Grammars
        2. 5.4.2 Specification-Based Mutation
      5. 5.5 Input Space Grammars
        1. 5.5.1 BNF Grammars
        2. 5.5.2 Mutation for Input Grammars
      6. 5.6 Bibliographic Notes
  10. Part 3 Applying Criteria in Practice
    1. 6 Practical Considerations
      1. 6.1 Regression Testing
      2. 6.2 Integration and Testing
        1. 6.2.1 Stubs and Drivers
        2. 6.2.2 Class Integration Test Order
      3. 6.3 Test Process
        1. 6.3.1 Requirements Analysis and Specification
        2. 6.3.2 System and Software Design
        3. 6.3.3 Intermediate Design
        4. 6.3.4 Detailed Design
        5. 6.3.5 Implementation
        6. 6.3.6 Integration
        7. 6.3.7 System Deployment
        8. 6.3.8 Operation and Maintenance
        9. 6.3.9 Summary
      4. 6.4 Test Plans
      5. 6.5 Identifying Correct Outputs
        1. 6.5.1 Direct Verification of Outputs
        2. 6.5.2 Redundant Computations
        3. 6.5.3 Consistency Checks
        4. 6.5.4 Data Redundancy
      6. 6.6 Bibliographic Notes
    2. 7 Engineering Criteria for Technologies
      1. 7.1 Testing Object-Oriented Software
        1. 7.1.1 Unique Issues with Testing OO Software
        2. 7.1.2 Types of Object-Oriented Faults
      2. 7.2 Testing Web Applications and Web Services
        1. 7.2.1 Testing Static Hyper Text Web Sites
        2. 7.2.2 Testing Dynamic Web Applications
        3. 7.2.3 Testing Web Services
      3. 7.3 Testing Graphical User Interfaces
        1. 7.3.1 Testing GUIs
      4. 7.4 Real-Time Software and Embedded Software
      5. 7.5 Bibliographic Notes
    3. 8 Building Testing Tools
      1. 8.1 Instrumentation for Graph and Logical Expression Criteria 268
        1. 8.1.1 Node and Edge Coverage
        2. 8.1.2 Data Flow Coverage
        3. 8.1.3 Logic Coverage
      2. 8.2 Building Mutation Testing Tools
        1. 8.2.1 The Interpretation Approach
        2. 8.2.2 The Separate Compilation Approach
        3. 8.2.3 The Schema-Based Approach
        4. 8.2.4 Using Java Reflection
        5. 8.2.5 Implementing a Modern Mutation System
      3. 8.3 Bibliographic Notes
    4. 9 Challenges in Testing Software
      1. 9.1 Testing for Emergent Properties: Safety and Security
        1. 9.1.1 Classes of Test Cases for Emergent Properties
      2. 9.2 Software Testability
        1. 9.2.1 Testability for Common Technologies
      3. 9.3 Test Criteria and the Future of Software Testing
        1. 9.3.1 Going Forward with Testing Research
      4. 9.4 Bibliographic Notes
  11. List of Criteria
  12. Bibliography
  13. Index