Software Testing and Quality Assurance: Theory and Practice
This important new work fills the pressing need for a user-friendly text that aims to provide software engineers, software quality professionals, software developers, and students with the fundamental developments in testing theory and common testing practices.
Software Testing and Quality Assurance: Theory and Practice equips readers with a solid understanding of:
- Practices that support the production of quality software
- Software testing techniques
- Life-cycle models for requirements, defects, test cases, and test results
- Process models for units, integration, system, and acceptance testing
- How to build test teams, including recruiting and retaining test engineers
- Quality Models, Capability Maturity Model, Testing Maturity Model, and Test Process Improvement Model
Expertly balancing theory with practice, and complemented with an abundance of pedagogical tools, including test questions, examples, teaching suggestions, and chapter summaries, this book is a valuable, self-contained tool for professionals and an ideal introductory text for courses in software testing, quality assurance, and software engineering.
List of Figures.
List of Tables.
CHAPTER 1: BASIC CONCEPTS AND PRELIMINARIES.
1.1 Quality Revolution.
1.2 Software Quality.
1.3 Role of Testing.
1.4 Verification and Validation.
1.5 Failure, Error, Fault, and Defect.
1.6 Notion of Software Reliability.
1.7 Objectives of Testing.
1.8 What Is a Test Case?
1.9 Expected Outcome.
1.10 Concept of Complete Testing.
1.11 Central Issue in Testing.
1.12 Testing Activities.
1.13 Test Levels.
1.14 Sources of Information for Test Case Studies.
1.15 White-Box and Black-Box Testing.
1.16 Test Planning and Design.
1.17 Monitoring and Measuring Test Execution.
1.18 Test Tools and Automation.
1.19 Test Team Organization and Management.
1.20 Outline of Book.
CHAPTER 2: THEORY OF PROGRAM TESTING.
2.1 Basic Concepts in Testing Theory.
2.2 Theory of Goodenough and Gerhart.
2.3 Theory of Weyuker and Ostrand.
2.4 Theory of Gourlay.
2.5 Adequacy of Testing.
2.6 Limitations of Testing.
CHAPTER 3: UNIT TESTING.
3.1 Concept of Unit Testing.
3.2 Static Unit Testing.
3.3 Defect Prevention.
3.4 Dynamic Unit Testing.
3.5 Mutation Testing.
3.7 Unit Testing in extreme Programming.
3.8 JUnit: Framework for Unit Testing.
3.9 Tools for Unit Testing.
CHAPTER 4: CONTROL FLOW TESTING.
4.1 Basic Idea.
4.2 Outline of Control Flow Testing.
4.3 Control Flow Graph.
4.4 Paths in a Control Flow Chart.
4.5 Path Selection Criteria.
4.6 Generating Test Input.
4.7 Examples of Test Data Selection.
4.8 Containing Infeasible Paths.
CHAPTER 5: DATA FLOW TESTING.
5.1 General Idea.
5.2 Data flow Anomaly.
5.3 Overview of Dynamic Data flow Testing.
5.4 Data Flow Graph.
5.5 Data Flow Terms.
5.6 Data Flow Testing Criteria.
5.7 Comparison of Data Flow Test Selection Criteria.
5.8 Feasible Paths and Test Selection Criteria.
5.9 Comparison of Testing Techniques.
CHAPTER 6: DOMAIN TESTING.
6.1 Domain Error.
6.2 Testing for Domain Errors.
6.3 Sources of Domain.
6.4 Types of Domain Errors.
6.5 ON and OFF Points.
6.6 Test Selection Criterion.
CHAPTER 7: SYSTEM INTEGRATION.
7.1 Concept of Integration Testing.
7.2 Different Types of Interfaces and Interface Errors.
7.3 Granularity of System Integration Testing.
7.4 System Integration Techniques.
7.5 Software and Hardware Integration.
7.6 Test Plan for System Integration.
7.7 Off-the Shelf Component Integration.
CHAPTER 8: SYSTEM TEST CATEGORIES.
8.1 Taxonomy of System Tests.
8.2 Basic Tests.
8.3 Functionality Tests.
8.4 Robustness Tests.
8.5 Interoperability Tests.
8.6 Performance Tests.
8.7 Scalability Tests.
8.8 Stress Tests.
8.9 Load and Stability Tests.
8.10 Reliability Tests.
8.11 Regression Tests.
8.12 Documentation Tests.
8.13 Regulatory Tests.
CHAPTER 9: FUNCTIONAL TESTING.
9.1 Functional Testing Concepts of Howden.
9.2 Complexity of Applying Functional Testing.
9.3 Pairwise Testing.
9.4 Equivalence Class Partitioning.
9.5 Boundary Value Analysis.
9.6 Decision Tables.
9.7 Random Testing.
9.8 Error Guessing.
9.9 Category Partition.
CHAPTER 10: TEST GENERATION FROM FSM MODELS.
10.1 State-Oriented Model.
10.2 Points of Control and Observation.
10.3 Finite-State Machine.
10.4 Test Generation from an FSM.
10.5 Transition Tour Method.
10.6 Testing with State Verification.
10.7 Unique Input-Output Sequence.
10.8 Distinguishing Sequence.
10.9 Characterizing Sequence.
10.10 Test Architecture.
10.11 Testing and Test Control Notation Version 3 (TTCN-3).
10.12 Extended FSMs.
10.13 Test Generation from EFSM Models.
10.14 Additional Coverage Criteria for System Testing.
CHAPTER 11: SYSTEM TEST DESIGN.
11.1 Test Design Factors.
11.2 Requirement Identification.
11.3 Characteristics of Testable Requirements.
11.4 Test Objective Identification.
11.6 Modeling a Test Design Process.
11.7 Modeling Test Results.
11.8 Test Design Preparedness Metrics.
11.9 Test Case Design Effectiveness.
CHAPTER 12: SYSTEM TEST PLANNING AND AUTOMATION.
12.1 Structure of a System Test Plan.
12.2 Introduction and Feature Description.
12.4 Test Approach.
12.5 Test Suite Structure.
12.6 Test Environment.
12.7 Test Execution Strategy.
12.8 Test Effort Estimation.
12.9 Scheduling and Test Milestones.
12.10 System Test Automation.
12.11 Evaluation and Selection of Test Automation Tools.
12.12 Test Selection Guidelines for Automation.
12.13 Characteristics of Automated Test Cases.
12.14 Structure of an Automated Test Case.
12.15 Test Automation Infrastructure.
CHAPTER 13: SYSTEM TEST EXECUTION.
13.1 Basic Ideas.
13.2 Modeling Defects.
13.3 Preparedness to Start System Testing.
13.4 Metrics for Tracking System Test.
13.5 Orthogonal Defect Classification.
13.6 Defect Causal Analysis.
13.7 Beta Testing.
13.8 First Customer Shipment.
13.9 System Test Report.
13.10 Product Sustaining.
13.11 Measuring Test Effectiveness.
CHAPTER 14: ACCEPTANCE TESTING.
14.1 Types of Acceptance Testing.
14.2 Acceptance Criteria.
14.3 Selection of Acceptance Criteria.
14.4 Acceptance Test Plan.
14.5 Acceptance Test Execution.
14.6 Acceptance Test Report.
14.7 Acceptance Testing in extreme Programming.
CHAPTER 15: SOFTWARE RELIABILTY.
15.1 What is Reliability?
15.2 Definitions of Software Reliability.
15.3 Factors Influencing Software Reliability.
15.4 Applications of Software Reliability.
15.5 Operational Profiles.
15.6 Reliability Models.
CHAPTER 16: TEST TEAM ORGANIZATION.
16.1 Test Groups.
16.2 Software Quality Assurance Group.
16.3 System Test Team Hierarchy.
16.4 Effective Staffing of Test Engineers.
16.5 Recruiting Test Engineers.
16.6 Retaining Test Engineers.
16.7 Team Building.
CHAPTER 17: SOFTWARE QUALITY.
17.1 Five Views of Software Quality.
17.2 McCall’s Quality Factors and Criteria.
17.3 ISO 9126 Quality Characteristics.
17.4 ISO 9000:2000 Software Quality Standard.
CHAPTER 18: MATURITY MODELS.
18.1 Basic Idea in Software Process.
18.2 Capability Maturity Models.
18.3 Test Process Improvement.
18.4 Testing Maturity Model.
PRIYADARSHI TRIPATHY, PhD, is a Senior Manager at NEC Laboratories America, Inc., in Princeton, New Jersey, where he designs, coordinates, and conducts software testing for grid-based storage appliances. Dr. Tripathy has worked in the field of software testing and quality assurance for Nortel Networks, Cisco Systems, and Airvana, Inc. He has also contributed to numerous publications in the area of software testing.
Balances theoretical ideas with practical explanations.
An excellent professional reference and outstanding teaching tool with example programs used in automating test executions, test questions, examples, teaching suggestions, chapter summaries, further reading, and a solutions manual.
This book provides a comprehensive review of topics dealing with software testing and quality assurance. The writing style is plain but efficient, while the content covers theoretical (to some extent) and practical concepts in this field. Naik (Univ. of Waterloo, Ontario, Canada) and Tripathy (NEC Laboratories America Inc.) seem to have limited exposure to current research in software testing, but they adequately cover the fundamentals. The literature review sections are useful for researchers who wish to expand their knowledge on a specific topic, with references well placed at the end of individual chapters. The rather basic exercises are not really helpful for instructors. The work would benefit by a few more supportive examples, although the ones present are well designed to illustrate the theory, where available. Software testing may be considered a relatively specialized computer science topic, existing in the few departments where a software-testing expert resides or in academic institutions offering a software engineering degree. However, it is nevertheless an important subject, with extended applications in industry, the concepts of which are covered adequately here. This volume would be useful for instructional purposes at the undergraduate level and for professionals seeking references to more specialized information. Summing Up: Recommended. Upper-division undergraduates, faculty, researchers, and practitioners. – D. Papamichail, University of Miami (Choice, 2009)