1. Preliminaries: Software Testing
1.1. Humans, Errors, and Testing
1.1.1 Errors, faults, and failures
1.1.3 Developer and tester as two roles
1.3. Requirements, Behavior, and Correctness
1.3.2 Specifying program behavior
1.3.3 Valid and invalid inputs
1.4. Correctness Versus Reliability
1.5.4 Assessing program correctness
1.6.4 Product metrics: generic
1.6.5 Product metrics: OO software
1.6.6 Progress monitoring and trends
1.6.7 Static and dynamic metrics
1.7. Software and Hardware Testing
1.10. Test Generation Strategies
1.11.3 Software complexity and static testing
1.12. Model-Based Testing and Model Checking
1.13.1 Classifier: C1: Source of test generation
1.13.2 Classifier: C2: Life cycle phase
1.13.3 Classifier: C3: Goal-directed testing
1.13.4 Classifier: C4: Artifact under test
1.13.5 Classifier: C5: Test process models
1.14.1 Confidence and true reliability
1.14.3 False sense of confidence
2. Preliminaries: Mathematical
2.1. Predicates and Boolean Expressions
2.2.5 Path conditions and domains
2.2.6 Domain and computation errors
2.2.7 Static code analysis tools and static testing
2.4. Dominators and Post-Dominators
2.6. Strings, Languages, and Regular Expressions
3.2. The Test Selection Problem
3.3.3 Equivalence classes for variables
3.3.4 Unidimensional partitioning versus multidimensional partitioning
3.5. Category-partition Method
3.5.1 Steps in the category-partition method
4.2.5 Coincidental correctness
4.3.1 Notation used in cause-effect graphing
4.3.2 Creating cause-effect graphs
4.3.3 Decision table from cause-effect graph
4.3.4 Heuristics to avoid combinatorial explosion
4.3.5 Test generation from a decision table
4.4. Tests Using Predicate Syntax
4.4.2 Missing or extra Boolean variable faults
4.4.4 Predicate testing criteria
4.4.5 BOR, BRO, and BRE adequate tests
4.4.6 BOR constraints for non-singular expressions
4.4.7 Cause-effect graphs and predicate testing
4.4.9 Predicate testing in practice
5. Test Generation From Finite State Models
5.1. Software Design and Testing
5.2.1 Excitation using an input sequence
5.5.1 Construction of the k-equivalence partitions
5.5.2 Deriving the characterization set
5.6.2 Maximum number of states
5.6.3 Computation of the transition cover set
5.6.6 Testing using the W-method
5.6.7 The error detection process
5.7.1 Testing using the Wp-method for m = n
5.7.2 Testing using the Wp-method for m > n
5.8.3 Core and non-core behavior
5.8.4 Generation of UIO sequences
5.8.6 Distinguishing signatures
5.9. Automata Theoretic Versus Control-Flow Based Techniques
5.9.2 Comparing automata theoretic methods
6. Test Generation from Combinatorial Designs
6.1.1 Test configuration and test set
6.1.2 Modeling the input and configuration spaces
6.2. A Combinatorial Test Design Process
6.5. Mutually Orthogonal Latin Squares
6.6. Pairwise Design: Binary Factors
6.7. Pairwise Design: Multi-Valued Factors
6.7.1 Shortcomings of using MOLS for test design
6.8.1 Mixed-level orthogonal arrays
6.9. Covering And Mixed-level Covering Arrays
6.9.1 Mixed-level covering arrays
6.11. Generating Covering Arrays
PART III: TEST ADEQUACY ASSESSMENT AND ENHANCEMENT
7. Test Adequacy Assessment Using Control Flow and Data Flow
7.1.2 Measurement of test adequacy
7.1.3 Test enhancement using measurements of adequacy
7.1.4 Infeasibility and test adequacy
7.1.5 Error detection and test enhancement
7.1.6 Single and multiple executions
7.2. Adequacy Criteria Based on Control Flow
7.2.1 Statement and block coverage
7.2.2 Conditions and decisions
7.2.5 Condition/decision coverage
7.2.6 Multiple condition coverage
7.2.7 Linear code sequence and jump (LCSAJ) coverage
7.2.8 Modified condition/decision coverage
7.2.9 MC/DC adequate tests for compound conditions
7.2.10 Definition of MC/DC coverage
7.2.12 Error detection and MC/DC adequacy
7.2.13 Short-circuit evaluation and infeasibility
7.2.15 Tracing test cases to requirements
7.3.3 Global and local definitions and uses
7.3.9 Data contexts and ordered data contexts
7.4. ADequacy Criteria Based on Data Flow
7.4.5 Using the k-dr chain coverage
7.4.6 Infeasible c- and p-uses
7.5. Control Flow Versus Data Flow
7.7. Structural and Functional Testing
7.8. Scalability of Coverage Measurement
8. Test Adequacy Assessment Using Program Mutation
8.2.1 First-order and higher order mutants
8.2.2 Syntax and semantics of mutants
8.2.3 Strong and weak mutations
8.3. Test Assessment Using Mutation
8.3.1 A procedure for test adequacy assessment
8.3.2 Alternate procedures for test adequacy assessment
8.3.3 “Distinguished” versus “killed” mutants
8.3.4 Conditions for distinguishing a mutant
8.4.2 Language dependence of mutation operators
8.5. Design of Mutation Operators
8.5.1 Goodness criteria for mutation operators
8.6. Founding Principles of Mutation Testing
8.6.1 The competent programmer hypothesis
8.8. Fault Detection Using Mutation
8.10. Mutation Operators for C
8.10.4 Effect of an execution sequence
8.10.5 Global and local identifier sets
8.10.6 Global and local reference sets
8.10.7 Mutating program constants
8.10.9 Binary operator mutations
8.10.11 Mutating program variables
8.10.12 Structure Reference Replacement
8.11. Mutation Operators for Java
8.11.1 Traditional mutation operators
8.11.3 Polymorphism and dynamic binding
8.11.5 Java specific mutation operators
8.12. Comparison of Mutation Operators
8.13. Mutation Testing within Budget
8.13.1 Prioritizing functions to be mutated
8.13.2 Selecting a subset of mutation operators
8.14. Case and Program Testing
9. Test Selection, Minimization, and Prioritization for Regression Testing
9.1. What is Regression Testing?
9.2.1 Revalidation, selection, minimization, and prioritization
9.3. Regression Test Selection: the Problem
9.4. Selecting Regression Tests
9.4.3 Selecting modification traversing tests
9.5. Test Selection Using Execution Trace
9.5.1 Obtaining the execution trace
9.5.2 Selecting regression tests
9.5.4 Handling changes in declarations
9.6. Test Selection Using Dynamic Slicing
9.6.2 Computation of dynamic slices
9.6.5 Computing the relevant slice
9.6.6 Addition and deletion of statements
9.6.7 Identifying variables for slicing
9.6.8 Reduced dynamic dependence graph
9.7. Scalability of Test Selection Algorithms
9.8.2 A procedure for test minimization
11.3.1 Class relationships: static
11.3.2 Class relationships: dynamic
11.3.4 Precise and imprecise relationships
11.4. OO versus Non-OO Programs
11.5.1 Choosing an integration strategy
11.5.2 Comparing integration strategies
11.5.3 Specific stubs and retesting
11.6. Finding a Near-optimal Test Order
11.6.4 Comparison of TD, TJJM, and the BLW methods
3.149.249.174