Software Testing: Principles and Practices

Paperback | February 1, 2010

byNaresh Chauhan

not yet rated|write a review
Software Testing is specially developed to serve as a text book for the undergraduate and postgraduate students of Computer Science Engineering and Information Technology. The book focusses on software testing as not just being the phase of software development life cycle but a completeprocess to fulfill the demand of quality software. Written in a very lucid style with crisp and to-the-point descriptions, the book covers chapters on the various software testing methodologies, test management, software metrics, software quality assurance, test automation, object-oriented testing and debugging. It also describes all the methods fortest case design which is the prime issue for software testing. The book is interactive and includes a large number of test cases, examples, MCQs and unsolved problems for practice.

Pricing and Purchase Info


Ships within 1-3 weeks
Ships free on orders over $25

From the Publisher

Software Testing is specially developed to serve as a text book for the undergraduate and postgraduate students of Computer Science Engineering and Information Technology. The book focusses on software testing as not just being the phase of software development life cycle but a completeprocess to fulfill the demand of quality software....

Dr Naresh Chauhan is currently working as Assistant Professor in the Department of Computer Engineering at YMCA Institute of Engineering, Faridabad. A PhD from Maharshi Dayanand University, Rohtak, he has close to 15 years of teaching experience.

other books by Naresh Chauhan

Principles of Operating Systems
Principles of Operating Systems

Paperback|Jul 18 2014


Format:PaperbackDimensions:608 pages, 9.84 × 7.48 × 0.68 inPublished:February 1, 2010Publisher:Oxford University PressLanguage:English

The following ISBNs are associated with this title:

ISBN - 10:0198061846

ISBN - 13:9780198061847


Extra Content

Table of Contents

Part I Testing Methodology1. Introduction to Effective Software Testing1.1 Introduction1.2 Evolution of Software Testing1.3 Software Testing Myths1.4 Goals of Software Testing1.5 Psychology for Software Testing1.6 Software Testing Definitions1.7 Model for Software Testing1.8 Effective Software Testing vs Exhaustive Software Testing1.9 Effective Testing is hard1.10 Software Testing as a Process1.11 Schools of Software Testing1.12 Software Failure Case StudiesSummary2. Software Testing Terminology and Methodology2.1.1 Definitions2.1.2 Life Cycle of a Bug2.1.3 States of a Bug2.1.4 Why do bugs occur?2.1.5 Bug affects economics of software testing2.1.6 Bug Classification based on Criticality2.1.7 Bug Classification based on SDLC2.1.8 Testing Principles2.2 Software Testing Life Cycle (STLC)2.3 Software Testing Methodology2.3.1 Software Testing Strategy2.3.2 Test Strategy Matrix2.3.3 Development of Test Strategy2.3.4 Testing Life Cycle Model2.3.4.1 V Testing life cycle model2.3.5 Validation Activities2.3.6 Testing Tactics2.3.7 Considerations in developing testing methodologiesSummary3. Verification and Validation3.1 Verification and Validation Activities3.2 Verification3.2.1 Verification Activities3.3 Verification of Requirements3.3.1 Verification of Objectives3.3.2 How to verify Requirements and Objectives3.4 Verification of High level Design3.4.1 How to verify High level Design? Verification of Data Design3.4.1.2 Verification of Architectural Design3.5 Verification of Low level Design3.5.1 How to verify Low level Design?3.6 How to verify Code?3.6.1 Unit Verification3.7 Validation3.7.1 Validation ActivitiesSummaryPart II Testing Techniques4. Dynamic Testing : Black Box Testing Techniques4.1 Boundary Value Analysis4.1.1 Boundary value checking4.1.2 Robustness Testing method4.1.3 Worst Case Testing method4.2 Equivalence Class Testing4.2.1 Identification of Equivalence classes4.2.2 Identifying the Test cases4.3 State Table based Testing4.3.1 Finite State Machine4.3.2 State Graphs4.3.3 State Tables4.3.4 State table based testing4.4 Decision Table based Testing4.4.1 Formation of Decision Table4.4.2 Test case design using decision table4.4.3 Expanding the immaterial test cases in decision table4.5 Cause Effect Graphing based Testing4.5.1 Basic notations4.6 Error GuessingSummary5. Dynamic Testing : White Box Testing Techniques5.1 Need of White box testing5.2 Logic Coverage Criteria5.3 Basis Path Testing5.3.1 Control Flow Graph5.3.2 Flow graph notations of different programming constructs5.3.3 Path Testing Terminology5.3.4 Cyclomatic Complexity5.3.4.1 Formulae based on Cyclomatic complexity5.3.4.2 Guidelines for Basis Path Testing5.3.5 Applications of Path Testing5.4 Graph Matrices5.4.1 Graph Matrix5.4.2 Connection Matrix5.4.3 Use of connection matrix in finding cyclomatic complexity number5.4.4 Use of graph matrix for finding the set of all paths5.5 Loop Testing5.6 Data Flow Testing5.6.1 State of a Data Object5.6.2 Data Flow Anomalies5.6.3 Terminology used in Data Flow Testing5.6.4 Static Data flow testing5.6.4.1 Static analysis is not enough5.6.5 Dynamic Data flow testing5.6.6 Ordering of Data flow testing strategies5.8 Mutation Testing5.8.1 Primary Mutants5.8.2 Secondary Mutants5.8.3 Mutation Testing ProcessSummary6. Static Testing6.1 Inspections6.1.1 Inspection Team6.1.2 Inspection Process6.1.3 Benefits of Inspection Process6.1.4 Effectiveness of Inspection Process6.1.5 Cost of Inspection Process6.1.6 Variants of Inspection process6.1.7 Reading Techniques6.1.8 Checklists for Inspection Process6.2 Walkthroughs6.3 Technical ReviewsSummary7. Validation Activities7.1 Unit Validation Testing7.2 Integration Testing7.2.1 Decomposition Based Integration7.2.1.1 Types of Incremental Integration Testing7.2.1.2 Comparison between Top-Down and Bottom-Up Integration Testing7.2.1.3 Practical Approach for Integration Testing7.2.2 Call Graph Based Integration7.2.2.1 Pair-wise Integration7.2.2.2 Neighborhood Integration7.2.3 Path Based Integration7.3 Function Testing7.4 System Testing7.4.1 Categories of Systems Tests7.4.1.1 Recovery Testing7.4.1.2 Security Testing7.4.1.3 Performance Testing7.4.1.4 Load Testing7.4.1.5 Stress Testing7.4.1.6 Usability Testing7.4.1.7 Compatibility/Conversion/Configuration Testing7.4.2 Guidelines for performing the system tests7.5 Acceptance Testing7.5.1 Alpha Testing7.5.1.1 Entry to Alpha7.5.1.2 Exit to Alpha7.5.2 Beta Testing7.5.2.1 Entry to Beta7.5.2.2 Exit criteriaSummary8. Regression Testing8.1 Progressive vs Regression Testing8.2 Regression testing produces quality software8.3 Regression Testability8.4 Objectives of Regression Testing8.5 When to do regression testing?8.6 Regression Testing Types8.7 Defining Regression Test Problem8.7.1 Regression Testing is a problem?8.7.2 Regression Testing Problem8.8 Regression Testing Techniques8.8.1 Selective Retest Techniques8.8.1.1 Strategy for Test Case Selection8.8.1.2 Selection Criteria Based on Code8.8.1.3 Regression Test selection Techniques8.8.1.4 Evaluating Regression Test Selection Techniques8.8.2 Regression Test Prioritization8.9 Benefits of Regression TestingSummaryPart III Managing the Test Process9. Test Management9.1 Test Organization9.2 Structure of Testing Group9.3 Test Planning9.3.1 Test Plan Components9.3.2 Test Plan Hierarchy9.3.3 Master Test Plan9.3.4 Verification Test Plan9.3.5 Validation Test Plan9.3.5.1 Unit Test Plan9.3.5.2 Integration Test Plan9.3.5.3 Function Test Plan9.3.5.4 System Test Plan9.3.5.5 Acceptance Test Plan9.4 Detailed Test Design and Test Specifications9.4.1 Test Design Specifications9.4.2 Test Case Specifications9.4.3 Test Procedure Specifications9.4.4 Test Result Specifications9.4.4.1 Test Log9.4.4.2 Test Incident Report9.4.4.3 Test Summary ReportSummary10. Software Metrics10.1 Need of Software Measurement10.2 Definition of Software Metrics10.3 Classification of Software Metrics10.3.1 Product vs. Process Metrics10.3.2 Objective vs. Subjective Metrics10.3.3 Primitive vs. Computed Metrics10.3.4 Private vs. Public Metrics10.3.4 Private vs. Public Metrics10.5 Size Metrics10.5.1 Line of Code (LOC)10.5.2 Token Count (Halstead Product Metrics) Program Vocabulary10.5.2.2 Program Length10.5.2.3 Program Volume10.5.3 Function Point Analysis10.5.3.1 Process used for calculating Function Points10.5.3.2 Sizing Data Functions10.5.3.3 Sizing Transactional Functions10.5.3.4 Calculating Unadjusted Function Point (UFP) Calculating Adjusted Function PointSummary11. Testing Metrics for Monitoring and Controlling the Testing Process11.1 Measurement Objectives for Testing11.2 Attributes and Corresponding Metrics in Software Testing11.3 Attributes11.3.1 Progress11.3.2 Cost11.3.3 Quality11.3.4 Size11.4 Estimation models for estimating testing efforts11.4.1 Halstead metrics for estimating testing effort11.4.2 Development ratio method11.4.3 Project staff ratio method11.4.4 Test procedure method11.4.5 Task planning method11.5 Architectural Design Metric used for Testing11.6 Information Flow Metrics used for Testing11.6.1 Henry and Kafura Design Metric11.7 Cyclomatic Complexity measures for Testing11.8 Function Point Metrics for Testing11.9 Test Point Analysis11.9.1 Procedure for Calculating TPA11.9.2 Calculating Dynamic Test Points11.9.3 Calculating Static Test Points11.9.4 Calculating Primary Test Hours11.9.5 Calculating Total Test Hours11.10 Some Testing MetricsSummary12. Efficient Test Suite Management12.1 Why Test Suite grows?12.2 Minimizing the test suite and its benefits12.3 Defining the Test Suite Minimization Problem12.4 Test Suite Prioritization12.5 Types of Test case Prioritization12.6 Prioritization Techniques12.6.1 Coverage based Test Case Prioritization12.6.1.1Total Statement Coverage Prioritization12.6.1.2 Additional Statement Coverage Prioritization12.6.1.3 Total Branch Coverage Prioritization12.6.1.4 Additional Branch Coverage Prioritization12.6.1.5 Total Fault-Exposing-Potential (FEP) Prioritization12.6.2 Risk based Prioritization12.6.3 Prioritization based on Operational Profiles12.6.4 Prioritization using Relevant Slices12.6.4.1 Execution Slice12.6.4.2 Dynamic Slice12.6.4.3 Relevant Slice12.6.5 Prioritization based on Requirements12.7 Measuring Effectiveness of Prioritized Test SuiteSummaryPart IV Quality Management13. Software Quality Management13.1 Software Quality13.2 Quality Types13.3 Broadening the concept of Quality13.4 Quality Cost13.5 Benefits of Investment on Quality13.6 Quality Control13.7 Quality Assurance13.8 Quality management13.9 QM and Project management13.10 Quality factors13.11 Methods of Quality Management13.11.1 Procedural Approach to QM13.11.2 Quantitative Approach to QM13.12 Software Quality MetricsSummary14. Testing Process Maturity Models14.1 Need for Test Process Maturity14.2 Measurement and Improvement of a Test Process14.3 Test Process Maturity Models14.3.1 The Testing Improvement Model (TIM) Maturity Model14.3.1.2 Key areas of TIM14.3.1.3 The Assessment procedure of TIM14.3.2 Test Organization Model (TOM) Questionnaire14.3.2.2 Improvement Suggestions14.3.3 Test Process Improvement (TPI) Model14.3.3.1 Key Process Areas14.3.3.2 Maturity Levels14.3.3.3 Test Maturity Matrix14.3.3.4 Checkpoints14.3.3.5 Improvement Suggestions14.3.4 Test Maturity Model (TMM) TMM Components14.3.4.2 TMM Levels14.3.4.3 The Assessment ModelSummaryPart V Test Automation15. Automation and Testing Tools15.1 Need of Automation15.2 Categorization of Testing Tools15.2.1 Static and Dynamic Testing Tools15.2.2 Testing Activity Tools15.3 Selection of Testing Tools15.4 Costs incurred in Testing Tools15.5 Guidelines for Automated Testing15.6 Overview of some commercial Testing ToolsSummaryPart VI Testing for Specialized Environment16. Testing Object Oriented Software16.1 OOT and Structured Approach16.1.1 Terminology16.1.2 Object-Oriented Modelling and UML16.2 Object Oriented Testing16.2.1 Differences between Conventional testing Object oriented Testing16.2.2 Object-Oriented Testing and Maintenance Problems16.2.3 Issues in OO Testing16.2.4 Strategy and Tactics of Testing OOS16.2.5 Verification of OOS16.2.6 Validation Activities16.2.7 Testing of OO Classes16.2.7.1 Feature based Testing of Classes16.2.7.2 Role of Invariants in Class Testing16.2.7.3 State Based Testing16.2.8 Inheritance Testing16.2.8.1 Issues in Inheritance Testing16.2.8.2 Inheritance of Invariants of Base Class16.2.8.3 Incremental Testing16.2.9 Integration Testing16.2.9.1 Thread based Integration Testing16.2.9.2 Implicit Control Flow based Integration Testing16.2.10 UML based OO Testing16.2.10.1 UML diagrams in software testing16.2.10.2 System Testing based on Use casesSummary17. Testing Web based Systems17.1 Web-based System17.2 Web Technology Evolution17.2.1 First Generation/ 2-tier Web system17.2.2 Modern 3-tier and n-tier architecture17.3 Differences between Traditional Software and Web-based Software17.4 Challenges in Testing for Web-based Software17.5 Quality Aspects17.6 Web Engineering (WebE)17.6.1 Analysis and Design of Web-based systems17.6.1.1 Conceptual Modeling17.6.1.2 Navigation Modeling17.6.1.3 Presentation Modeling17.6.1.4 Web Scenarios Modeling17.6.1.5 Task Modeling17.6.1.6 Configuration Modeling17.6.2 Design Activities17.6.2.1 Interface Design17.6.2.2 Content Design17.6.2.3 Architecture Design17.6.2.4 Presentation Design17.6.2.5 Navigation design17.7 Testing of Web-Based Systems17.7.1 Interface Testing17.7.2 Usability Testing17.7.3 Content Testing17.7.4 Navigation Testing17.7.5 Configuration/Compatibility Testing17.7.6 Security Testing17.7.6.1 Security Test Plan17.7.6.2 Various Threat Types and their corresponding Test cases17.7.7 Performance Testing17.7.7.1 Performance Parameters17.7.7.2 Types of Performance TestingSummaryPart VII Tracking the Bug18. Debugging18.1 Debugging: An art or technique?18.2 Debugging Process18.3 Debugging is Difficult?18.4 Debugging Techniques18.4.1 Debugging with Memory Dump18.4.2 Debugging with Watch Points18.4.3 BackTracking18.5 Correcting the Bugs18.5.1 Debugging Guidelines18.6 Debuggers18.6.1 Types of DebuggersSummaryCase StudiesReferencesAppendicesAppendix A Answers to Multiple Choice QuestionsAppendix A SRS Verification ChecklistAppendix B HLD Verification ChecklistAppendix C LLD Verification ChecklistAppendix D General SDD Verification ChecklistAppendix E Generic Code Verification ChecklistIndex