Foundations of software testing

This edition of

Detalles Bibliográficos
Otros Autores: Mathur, Aditya Author (author)
Formato: Libro electrónico
Idioma:Inglés
Publicado: [Place of publication not identified] Pearson 2013
Edición:2nd ed
Colección:Always learning
Materias:
Ver en Biblioteca Universitat Ramon Llull:https://discovery.url.edu/permalink/34CSUC_URL/1im36ta/alma991009629187506719
Tabla de Contenidos:
  • Cover
  • Contents
  • Preface to the Second Edition
  • Preface to the First Edition
  • Acknowledgements
  • Part I: Preliminaries
  • Chapter 1: Preliminaries: Software Testing
  • 1.1 Humans, Errors, and Testing
  • 1.1.1 Errors, faults, and failures
  • 1.1.2 Test automation
  • 1.1.3 Developer and tester as two roles
  • 1.2 Software Quality
  • 1.2.1 Quality attributes
  • 1.2.2 Reliability
  • 1.3 Requirements, Behavior, and Correctness
  • 1.3.1 Input domain
  • 1.3.2 Specifying program behavior
  • 1.3.3 Valid and invalid inputs
  • 1.4 Correctness Versus Reliability
  • 1.4.1 Correctness
  • 1.4.2 Reliability
  • 1.4.3 Operational profiles
  • 1.5 Testing and Debugging
  • 1.5.1 Preparing a test plan
  • 1.5.2 Constructing test data
  • 1.5.3 Executing the program
  • 1.5.4 Assessing program correctness
  • 1.5.5 Constructing an oracle
  • 1.6 Test Metrics
  • 1.6.1 Organizational metrics
  • 1.6.2 Project metrics
  • 1.6.3 Process metrics
  • 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.6.8 Testability
  • 1.7 Software and Hardware Testing
  • 1.8 Testing and Verification
  • 1.9 Defect Management
  • 1.10 Test Generation Strategies
  • 1.11 Static Testing
  • 1.11.1 Walkthroughs
  • 1.11.2 Inspections
  • 1.11.3 Software complexity and static testing
  • 1.12 Model-Based Testing and Model Checking
  • 1.13 Types of Testing
  • 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 The Saturation Effect
  • 1.14.1 Confidence and true reliability
  • 1.14.2 Saturation region
  • 1.14.3 False sense of confidence
  • 1.14.4 Reducing
  • 1.14.5 Impact on test process
  • 1.15 Principles of Testing.
  • 1.16 Tools
  • Summary
  • Exercises
  • Chapter 2: Preliminaries:Mathematical
  • 2.1 Predicates and Boolean Expressions
  • 2.2 Control Flow Graph
  • 2.2.1 Basic blocks
  • 2.2.2 Flow graphs
  • 2.2.3 Paths
  • 2.2.4 Basis paths
  • 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.3 Execution History
  • 2.4 Dominators and Post-Dominators
  • 2.5 Program Dependence Graph
  • 2.5.1 Data dependence
  • 2.5.2 Control dependence
  • 2.5.3 Call graph
  • 2.6 Strings, Languages, and Regular Expressions
  • 2.7 Tools
  • Summary
  • Exercises
  • Part II: Test Generation
  • Chapter 3: Domain Partitioning
  • 3.1 Introduction
  • 3.2 The Test Selection Problem
  • 3.3 Equivalence Partitioning
  • 3.3.1 Faults targeted
  • 3.3.2 Relations
  • 3.3.3 Equivalence classes for variables
  • 3.3.4 Unidimensional partitioning versus multidimensional partitioning
  • 3.3.5 A systematic procedure
  • 3.3.6 Test selection
  • 3.3.7 Impact of GUI design
  • 3.4 Boundary Value Analysis
  • 3.5 Category-Partition Method
  • 3.5.1 Steps in the category-partition method
  • Summary
  • Exercises
  • Chapter 4: Predicate Analysis
  • 4.1 Introduction
  • 4.2 Domain Testing
  • 4.2.1 Domain errors
  • 4.2.2 Border shifts
  • 4.2.3 ON-OFF points
  • 4.2.4 Undetected errors
  • 4.2.5 Coincidental correctness
  • 4.2.6 Paths to be tested
  • 4.3 Cause-Effect Graphing
  • 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.1 A fault model
  • 4.4.2 Missing or extra Boolean variable faults
  • 4.4.3 Predicate constraints
  • 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.8 Fault propagation
  • 4.4.9 Predicate testing in practice
  • 4.5 Tests Using Basis Paths
  • 4.6 Scenarios and Tests
  • Summary
  • Exercises
  • Chapter 5: Test Generation from Finite State Models
  • 5.1 Software Design and Testing
  • 5.2 Finite State Machines
  • 5.2.1 Excitation using an input sequence
  • 5.2.2 Tabular representation
  • 5.2.3 Properties of FSM
  • 5.3 Conformance Testing
  • 5.3.1 Reset inputs
  • 5.3.2 The testing problem
  • 5.4 A Fault Model
  • 5.4.1 Mutants of FSMs
  • 5.4.2 Fault coverage
  • 5.5 Characterization Set
  • 5.5.1 Construction of the k-equivalence partitions
  • 5.5.2 Deriving the characterization set
  • 5.5.3 Identification sets
  • 5.6 The W-method
  • 5.6.1 Assumptions
  • 5.6.2 Maximum number of states
  • 5.6.3 Computation of the transition cover set
  • 5.6.4 Constructing Z
  • 5.6.5 Deriving a test set
  • 5.6.6 Testing using the W-method
  • 5.6.7 The error detection process
  • 5.7 The Partial W-method
  • 5.7.1 Testing using the Wp-method for m - n
  • 5.7.2 Testing using the Wp-method for m>n
  • 5.8 The UIO-Sequence Method
  • 5.8.1 Assumptions
  • 5.8.2 UIO sequences
  • 5.8.3 Core and non-core behavior
  • 5.8.4 Generation of UIO sequences
  • 5.8.5 Explanation of gen-uio
  • 5.8.6 Distinguishing signatures
  • 5.8.7 Test generation
  • 5.8.8 Test optimization
  • 5.8.9 Fault detection
  • 5.9 Automata Theoretic Versus Control-Flow Based Techniques
  • 5.9.1 n-switch-cover
  • 5.9.2 Comparing automata theoretic methods
  • 5.10 Tools
  • Summary
  • Exercises
  • Chapter 6: Test Generation from Combinatorial Designs
  • 6.1 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.3 Fault Model
  • 6.3.1 Fault vectors.
  • 6.4 Latin Squares
  • 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 Orthogonal Arrays
  • 6.8.1 Mixed-level orthogonal arrays
  • 6.9 Covering and Mixed-Level Covering Arrays
  • 6.9.1 Mixed-level covering arrays
  • 6.10 Arrays of Strength > 2
  • 6.11 Generating Covering Arrays
  • 6.12 Tools
  • Summary
  • Exercises
  • Part III: Test Adequacy Assessment and Enhancement
  • Chapter 7: Test Adequacy Assessment Using Control Flow and Data Flow
  • 7.1 Test Adequacy: Basics
  • 7.1.1 What is test adequacy?
  • 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.3 Decision coverage
  • 7.2.4 Condition coverage
  • 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.11 Minimal MC/DC tests
  • 7.2.12 Error detection and MC/DC adequacy
  • 7.2.13 Short-circuit evaluation and infeasibility
  • 7.2.14 Basis path coverage
  • 7.2.15 Tracing test cases to requirements
  • 7.3 Concepts From Data Flow
  • 7.3.1 Definitions and uses
  • 7.3.2 C-use and p-use
  • 7.3.3 Global and local definitions and uses
  • 7.3.4 Data flow graph
  • 7.3.5 Def-clear paths
  • 7.3.6 Def-use pairs
  • 7.3.7 Def-use chains
  • 7.3.8 A little optimization
  • 7.3.9 Data contexts and ordered data contexts
  • 7.4 Adequacy Criteria Based on Data Flow
  • 7.4.1 c-use coverage.
  • 7.4.2 p-use coverage
  • 7.4.3 All-uses coverage
  • 7.4.4 k-dr chain coverage
  • 7.4.5 Using the k-dr chain coverage
  • 7.4.6 Infeasible c- and p-uses
  • 7.4.7 Context coverage
  • 7.5 Control Flow Versus Data Flow
  • 7.6 The "Subsumes" Relation
  • 7.7 Structural and Functional Testing
  • 7.8 Scalability of Coverage Measurement
  • 7.9 Tools
  • Summary
  • Exercises
  • Chapter 8: Test Adequacy Assessment using Program Mutation
  • 8.1 Introduction
  • 8.2 Mutation and Mutants
  • 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.2.4 Why mutate ?
  • 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 Mutation Operators
  • 8.4.1 Operator types
  • 8.4.2 Language dependence of mutation operators
  • 8.5 Design of Mutation Operators
  • 8.5.1 Goodness criteria for mutation operators
  • 8.5.2 Guidelines
  • 8.6 Founding Principles of Mutation Testing
  • 8.6.1 The competent programmer hypothesis
  • 8.6.2 The coupling effect
  • 8.7 Equivalent Mutants
  • 8.8 Fault Detection Using Mutation
  • 8.9 Types of Mutants
  • 8.10 Mutation Operators for C
  • 8.10.1 What is not mutated ?
  • 8.10.2 Linearization
  • 8.10.3 Execution sequence
  • 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.8 Mutating operators
  • 8.10.9 Binary operator mutations
  • 8.10.10 Mutating statements
  • 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.2 Inheritence
  • 8.11.3 Polymorphism and dynamic binding.
  • 8.11.4 Method overloading.