You are on page 1of 8

Help content

Software Testing Techniques, Second Edition


by Boris Beizer
The Coriolis Group
ISBN: 1850328803 Pub Date: 06/01/90

Preface To The Second Edition


Preface To The First Edition
Acknowledgments

Chapter 1—INTRODUCTION
1. THE PURPOSE OF TESTING
1.1. What We Do
1.2. Productivity and Quality in Software
1.3. Goals for Testing
1.4. Phases in a Tester’s Mental Life
1.5. Test Design
1.6. Testing Isn’t Everything
1.7. The Pesticide Paradox and the Complexity Barrier

2. SOME DICHOTOMIES

2.1. Testing Versus Debugging


2.2. Function Versus Structure
2.3. The Designer Versus the Tester
2.4. Modularity Versus. Efficiency
2.5. Small Versus Large
2.6. The Builder Versus the Buyer
3. A MODEL FOR TESTING
3.1. The Project
3.2. Overview
3.3. The Environment
3.4. The Program
3.5. Bugs
3.6. Tests
3.7. Testing and Levels
3.8. The Role of Models
4. PLAYING POOL AND CONSULTING ORACLES
4.1. Playing Pool
4.2. Oracles
4.3. Sources of Oracles
5. IS COMPLETE TESTING POSSIBLE?

Chapter 2—THE TAXONOMY OF BUGS


1. SYNOPSIS
2. THE CONSEQUENCES OF BUGS
2. 1. The Importance of Bugs
2.2. How Bugs Affect Us—Consequences
2.3. Flexible Severity Rather Than Absolutes

1
Help content
2.4. The Nightmare List and When to Stop Testing
3. A TAXONOMY FOR BUGS*
3.1. General
3.2. Requirements, Features, and Functionality Bugs
3.3. Structural Bugs
3.4. Data Bugs
3.5. Coding Bugs
3.6. Interface, Integration, and System Bugs
3.7. Test and Test Design Bugs
3.8. Testing and Design Style
4. SOME BUG STATISTICS
5. SUMMARY

Chapter 3—FLOWGRAPHS AND PATH TESTING


1. SYNOPSIS
2. PATH–TESTING BASICS
2.1. Motivation and Assumptions
2.2. Control Flowgraphs
2.3. Path Testing
2.4. Loops
2.5. More on Testing Multi–Entry/Multi–Exit Routines
2.6. Effectiveness of Path Testing
2.7. Variations
3. PREDICATES, PATH PREDICATES, AND ACHIEVABLE PATHS
3.1. General
3.2. Predicates.
3.3. Predicate Expressions
3.4. Predicate Coverage
3.5. Testing Blindness
4. PATH SENSITIZING
4.1. Review; Achievable and Unachievable Paths.
4.2. Pragmatic Observations
4.3. Heuristic Procedures for Sensitizing Paths
4.4. Examples
5. PATH INSTRUMENTATION
5.1. The Problem
5.2. General Strategy
5.3. Link Markers
5.4. Link Counters
5.5. Other Instrumentation Methods.
5.6. Implementation
6. IMPLEMENTATION AND APPLICATION OF PATH TESTING
6.1. Integration, Coverage, and Paths in Called Components
6.2. New Code
6.3. Maintenance
6.4. Rehosting
7. TESTABILITY TIPS
8. SUMMARY

Chapter 4—TRANSACTION-FLOW TESTING

2
Help content
1. SYNOPSIS
2. GENERALIZATIONS
3. TRANSACTION FLOWS
3.1. Definitions
3.2. Example
3.3. Usage
3.4. Implementation
3.5. Perspective
3.6. Complications
3.7. Transaction-Flow Structure
4. TRANSACTION-FLOW TESTING TECHNIQUES
4.1. Get the Transaction Flows
4.2. Inspections, Reviews, Walkthroughs
4.3. Path Selection
4.4. Sensitization
4.5. Instrumentation
4.6. Test Databases
4.7. Execution
5. IMPLEMENTATION COMMENTS
5.1. Transaction Based Systems
5.2. Hidden Languages.
6. TESTABILITY TIPS
7. SUMMARY

Chapter 5—DATA-FLOW TESTING


1. SYNOPSIS
2. DATA-FLOW TESTING BASICS
2.1. Motivation and Assumptions
2.2. Date Flowgraphs
2.3. The Data-Flow Model
3. DATA-FLOW TESTING STRATEGIES
3.1. General
3.2. Terminology
3.3. The Strategies
3.4. Slicing, Dicing, Data Flow, and Debugging
4. APPLICATION, TOOLS, EFFECTIVENESS
5. TESTABILITY TIPS
6. SUMMARY

Chapter 6—DOMAIN TESTING


1. SYNOPSIS
2. DOMAINS AND PATHS
2.1. The Model
2.2. A Domain Is a Set
2.3. Domains, Paths, and Predicates
2.4. Domain Closure
2.5. Domain Dimensionality
2.6. The Bug Assumptions
2.7. Restrictions
3. NICE DOMAINS AND UGLY DOMAINS

3
Help content
3.1. Where Do Domains Come From?
3.2. Specified Versus Implemented Domains
3.3. Nice Domains
3.4. Ugly Domains and How Programmers and Testers Treat Them
4. DOMAIN TESTING (WHIT78A, WHIT80A, WHIT85B, WHIT87)
4.1. Overview
4.2. Domain Bugs and How to Test for Them
4.3. Procedure
4.4. Variations, Tools, Effectiveness
5. DOMAINS AND INTERFACE TESTING
5.1. General
5.2. Domains and Range
5.3. Closure Compatibility
5.4. Span Compatibility
5.5. Interface Range/Domain Compatibility Testing
5.6. Finding the Values
6. DOMAINS AND TESTABILITY
6.1. General
6.2. Linearizing Transformations
6.3. Coordinate Transformations
6.4. A Canonical Program Form
6.5. Great Insights?
7. SUMMARY

Chapter 7—METRICS AND COMPLEXITY


1. SYNOPSIS
2. METRICS, WHAT AND WHY
2.1. Philosophy
2.2. Historical Perspective
2.3. Objectives
3. LINGUISTIC METRICS
3.1. General
3.2. Lines of Code, Statement Count, and Related Metrics
3.3. Halstead’s Metrics
3.4. Token Count
4. STRUCTURAL METRICS
4.1. General
4.2. Cyclomatic Complexity (McCabe’s Metric)
4.3. Other Structural Metrics
5. HYBRID METRICS
6. METRICS IMPLEMENTATION
6.1. The Pattern of Metrics Research
6.2. A Pattern for Successful Applications
7. TESTABILITY TIPS
8. SUMMARY

Chapter 8—PATHS, PATH PRODUCTS, AND REGULAR


EXPRESSIONS
1. SYNOPSIS
2. MOTIVATION

4
Help content
3. PATH PRODUCTS AND PATH EXPRESSIONS
3.1. Overview
3.2. Basic Concepts
3.3. Path Products
3.4. Path Sums
3.5 Distributive Laws
3.6. Absorption Rule
3.7. Loops
3.8. Identity Elements
4. A REDUCTION PROCEDURE
4.1. Overview
4.2. Cross-Term Step (Step 4)
4.3. Parallel Term (Step 6)
4.4. Loop Term (Step 7)
4.5. Comments, Identities, and Node-Removal Order
5. APPLICATIONS
5.1. General
5.2. How Many Paths in a Flowgraph?
5.3. Approximate Minimum Number of Paths
5.4. The Probability of Getting There
5.5. The Mean Processing Time of a Routine
5.6. Push/Pop, Get/Return
5.7. Limitations and Solutions
6. REGULAR EXPRESSIONS AND FLOW-ANOMALY DETECTION
6.1. The Problem
6.2. The Method
6.3. A Data-Flow Testing Example (HUAN79)
6.4. Generalizations, Limitations, and Comments
7. SUMMARY

Chapter 9—SYNTAX TESTING


1. SYNOPSIS
2. WHY, WHAT, AND HOW
2.1. Garbage
2.2. Casual and Malicious Users
2.3. Operators
2.4. The Internal World
2.5. What to Do
2.6. Applications and Hidden Languages
2.7. The Graph We Cover
2.8. Overview
3. A GRAMMAR FOR FORMATS
3.1. Objectives
3.2. BNF Notation (BACK59)
4. TEST CASE GENERATION
4.1. Generators, Recognizers, and Approach
4.2. Test Case Design
4.3. Sources of Syntax
4.4. Ambiguities and Contradictions
4.5. Where Did the Good Guys Go?

5
Help content
5. IMPLEMENTATION AND APPLICATION
5.1. Execution Automation
5.2. Design Automation
5.3. Productivity, Training, and Effectiveness
5.4. Ad-Lib Tests
6. TESTABILITY TIPS
6.1. The Tip
6.2. Compiler Overview
6.3. Typical Software
6.4. Separation of Phases
6.5. Prerequisites
7. SUMMARY

Chapter 10—LOGIC-BASED TESTING


1. SYNOPSIS
2. MOTIVATIONAL OVERVIEW
2.1. Programmers and Logic
2.2. Hardware Logic Testing
2.3. Specification Systems and Languages (BERZ85, CHIU85,
HAYE85, KEMM85, VESS86)
2.4. Knowledge-Based Systems
2.5. Overview
3. DECISION TABLES (HURL83, VESS86)
3.1. Definitions and Notation
3.2. Decision-Table Processors
3.3. Decision Tables as a Basis for Test Case Design
3.4. Expansion of Immaterial Cases
3.5. Test Case Design (GOOD75, LEWA76, TAIA87)
3.6. Decision Tables and Structure
4. PATH EXPRESSIONS AGAIN
4.1. General
4.2. Boolean Algebra
4.3. Boolean Equations
5. KV CHARTS
5.1. The Problem
5.2. Simple Forms
5.3. Three Variables
5.4. Four Variables and More
5.5. Even More Testing Strategies?
6. SPECIFICATIONS
6.1. General
6.2. Finding and Translating the Logic
6.3. Ambiguities and Contradictions
6.4. Don’t-Care and Impossible Terms
7. TESTABILITY TIPS
8. SUMMARY

Chapter 11—STATES, STATE GRAPHS, AND TRANSITION


TESTING
1. SYNOPSIS

6
Help content
2. MOTIVATIONAL OVERVIEW
3. STATE GRAPHS
3.1. States
3.2. Inputs and Transitions
3.3. Outputs
3.4. State Tables
3.5. Time Versus Sequence
3.6. Software Implementation
4. GOOD STATE GRAPHS AND BAD
4.1. General
4.2. State Bugs
4.3. Transition Bugs
4.4. Output Errors
4.5. Encoding Bugs
5. STATE TESTING
5.1. Impact of Bugs
5.2. Principles
5.3. Limitations and Extensions
5.4. What to Model
5.5. Getting the Data
5.6. Tools
6. TESTABILITY TIPS
6.1. A Balm for Programmers
6.2. How Big, How Small?
6.3. Switches, Flags, and Unachievable Paths
6.4. Essential and Inessential Finite-State Behavior
6.5. Design Guidelines
7. SUMMARY

Chapter 12—GRAPH MATRICES AND APPLICATIONS


1. SYNOPSIS
2. MOTIVATIONAL OVERVIEW
2.1. The Problem with Pictorial Graphs
2.2. Tool Building
2.3. Doing and Understanding Testing Theory
2.4. The Basic Algorithms
3. THE MATRIX OF A GRAPH
3.1. Basic Principles
3.2. A Simple Weight
3.3. Further Notation
4. RELATIONS
4.1. General
4.2. Properties of Relations
4.3. Equivalence Relations
4.4. Partial Ordering Relations
5. THE POWERS OF A MATRIX
5.1. Principles
5.2. Matrix Powers and Products
5.3. The Set of All Paths
5.4. Loops

7
Help content

5.5. Partitioning Algorithm (BEIZ71, SOHO84)


5.6. Breaking Loops And Applications
6. NODE-REDUCTION ALGORITHM
6.1. General
6.2. Some Matrix Properties
6.3. The Algorithm
6.4. Applications
6.5. Some Hints
7. BUILDING TOOLS
7.1. Matrix Representation Software
7.2. Matrix Operations
7.3. Node-Reduction Optimization
8. Summary

Chapter 13—IMPLEMENTATION
1. SYNOPSIS
2. OVERVIEW
2.1. General
2.2. Who Does What Kind of Tests
2.3. Adversarial Roles
3. STRATEGIES FOR PROGRAMMERS
3.1. Who’s Responsible?
3.2. Programming in Perspective
3.3. Self-Inspection
3.4. Test Case Design
3.5. Test Type Priority
3.6. Learn to “Cheat”
4. STRATEGIES FOR INDEPENDENT TESTERS
4.1. General
4.2. Database Gold
4.3. Reading Code and Other Design Documents
4.4. Requirements
4.5. Tests and the Threat of Tests
5. TESTS AS SOFTWARE PRODUCTS
5.1. Throwaway Tests?
5.2. Tests, Subtests, Scripts, and Suites
5.3. Test Configuration Control
6. TOOLS
6.1. General
6.2. Fundamental Tools
6.3. Test Execution Automation
6.4. Test Design Automation
6.5. Tool Usago and Training
Cited References/Bibliography
Appendix A
Glossary/Index
Copyright © The Coriolis Group, Inc.

You might also like