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