|Software Development & Testing Methodology||Learning Schedule|
|Pre-requisites: Software Engineering||3||0||0||3|
This course will examine fundamental software testing and program analysis techniques. In particular, the important phases of testing will be reviewed, emphasizing the significance of each phase when testing different types of software. Students will learn the state of the art in testing technology for object-oriented, component-based, concurrent, distributed, graphical-user interface, and web software. In addition, closely related concepts such as mutation testing and program analysis (e.g., program-flow and data-flow analysis) will also be studied. Emerging concepts such as test-case prioritization and their impact on testing will be examined. Stu-dents will gain hands-on testing/analysis experience via a multi-phase course project. By the end of this course, students should be familiar with the state-of-the-art in software testing. Students should also be aware of the major open research problems in testing.
The objective of this course is:
- Introducing various design approaches, models and metrics.
- Presenting various techniques and strategies of software testing and inspection and pointing out the importance of testing in achieving high-quality software.
- Understand concept of reliability, the role it plays in software engineering, and how it is modeled and measured.
- Showing how software product and process are managed and controlled for maintaining software quality assurance.
- Highlighting importance of software maintenance, restructuring, and reengineering.
- Presenting the various techniques of software cost estimation and risk assessment.
At the end of the course student will be able to:
- Use the appropriate methods and tools for estimating software cost.
- Understand the difference between different software design models and techniques and how to apply them.
- Recognize the importance of software reliability and how we can design dependable software, and what measures are used.
- Understand the principles and techniques underlying the process of inspecting and testing software and making it free of errors and tolerable.
- Recognize the importance of software standards and quality assurance.
- Apply the appropriate software evolution methods for maintaining, restructuring available software and managing soft-ware development.
Unit I: Introduction
Faults, Errors, and Failures, Basics of software testing, Testing objectives, Principles of testing, Requirements, behavior and cor-rectness, Testing and debugging, Test metrics and measurements, Verification, Validation and Testing, Types of testing, Software Quality and Reliability, Software defect tracking.
Unit II: White Box and Black Box Testing
White box testing, static testing, static analysis tools, Structural testing: Module/Code functional testing, Code coverage testing, Code complexity testing, Black Box testing, Requirements based testing, Boundary value analysis, Equivalence partitioning, state/ graph based testing, Model based testing and model checking, Differences between white box and Black box testing.
Unit III: Integration, System, and Acceptance Testing
Top down and Bottom up integration, Bi-directional integration, System integration, Scenario Testing, Defect Bash, Functional versus Non-functional testing, Design/Architecture verification, Deployment testing, Beta testing, Scalability testing, Reliability testing, Stress testing, Acceptance testing: Acceptance criteria, test cases selection and execution,
Unit IV: Test Selection & Minimization for Regression Testing
Regression testing, Regression test process, Initial Smoke or Sanity test, Selection of regression tests, Execution Trace, Dynamic Slicing, Test Minimization, Tools for regression testing, Ad hoc Testing: Pair testing, Exploratory testing, Iterative testing, Defect seeding.
Unit V: Test Management and Automation
Test Planning, Management, Execution and Reporting, Software Test Automation: Scope of automation, Design & Architecture for automation, Generic requirements for test tool framework, Test tool selection, Testing in Object Oriented Systems.
- Desikan and G. Ramesh, “Software Testing: Principles and Practices”, Pearson Education.
- Aditya P. Mathur, “Fundamentals of Software Testing”, Pearson Education.
- Naik and Tripathy, “Software Testing and Quality Assurance”, Wiley
K. K. Aggarwal and Yogesh Singh, “Software Engineering”, New Age International Publication.