Software Testing
A deep dive into the phases of software testing, covering graph and logic coverage criteria, symbolic execution, and specialized techniques for object-oriented and web applications.
This course provides a rigorous foundation in the systematic verification of software systems. We transition from basic testing motivations and the SDLC into advanced mathematical approaches to testing, including structural and data-flow graph coverage. Students learn to formulate precise test requirements and execute test cases within standard IDEs using tools like JUnit. The curriculum covers a wide spectrum of advanced topics: from logic-based coverage and SMT solvers to symbolic and concolic execution. The final weeks bridge the gap between theory and practice by exploring mutation testing, object-oriented integration, and specialized strategies for web applications and regression testing.
Instructor
Prof. Meenakshi D’Souza, Software Engineering Laboratory, IIIT Bangalore
Course Schedule & Topics
The course spans 12 weeks, moving from fundamental graph algorithms to advanced automated testing and domain-specific applications.
| Week | Primary Focus | Key Topics Covered |
|---|---|---|
| 1 | Intro & Automation | SDLC, Terminologies, Processes, and Software Test Automation with JUnit. |
| 2 | Graph Coverage I | Basics of Graphs, Fundamental Algorithms, and Structural Graph Coverage Criteria. |
| 3 | Graph Coverage II | Data Flow in Graphs, Data Flow Testing examples, and Graph-based Unit Testing. |
| 4 | Integration & FSM | Design and Integration Testing, Specification Testing, and Finite State Machines (FSM). |
| 5 | Logic Coverage I | Logic basics for testing, Coverage Criteria, and applying predicates to test code. |
| 6 | Logic Coverage II | Logic Coverage Specification, FSM applications, and an introduction to SMT-Solvers. |
| 7 | Execution Techniques | Symbolic Testing, Concolic Execution, and automated test generation. |
| 8 | Functional Testing | Requirements-based testing and Input Space Partitioning (ISP) techniques. |
| 9 | Mutation Testing | CFGs, Mutation Operators for source code and integration, and Tooling. |
| 10 | Object-Oriented Testing | OO Integration concepts, OO Faults, Mutation Operators, and Coupling Criteria. |
| 11 | Web Application Testing | Introduction to Web Apps, Client-side testing, and Server-side testing strategies. |
| 12 | Quality & Regression | Regression Testing, Quality Metrics, Non-Functional Testing, and TDD. |
Materials used
-
Introduction to Software Testingby Paul Ammann and Jeff Offutt (Cambridge University Press)