Course title and code to be confirmed.
Course information updated as of March 2022.
The course will introduce the fundamental concepts behind various automated testing algorithms and introduce basic concepts behind verification (specifically, model checking). The focus of the course will be more on the design of test algorithms than the usage of testing tools. At the end of the course, students are expected to gain knowledge on how to test arbitrarily complex systems. The course will provide a brief recap on the testing introduced earlier e.g., coverage-based testing and unit testing. Subsequently, it will dive deep into the systematic test generation strategies. The concluding week of the course will involve discussion of some selected and impactful recent research on software testing and draw an unusual synergy between the model checking (verification) and testing. The course will involve the development of a medium scale software project prototype from scratch (w/o libraries, w/o plugins) and the software prototype will be tested via the systematic testing mechanisms learned in the course. The software prototypes will be exchanged among different groups to mimic the testing culture in industry.
- Knowledge in Java programming as it it will used for the implementation of project.
- Dependency analysis, Slicing and data flow analysis.
- Specification based testing
- Foundation of directed testing
- Mutation testing: basic mutation testing and higher order mutation testing
- Search-based Software Testing
- Advanced Symbolic Execution
- Regression testing
- Change directed search
- Change directed symbolic execution
- Fuzzing and the rationale behind its success in software security: Mutational and Generational Fuzzing
- Introduction to model checking
- Model checking algorithm (Explicit State Model checking and SAT-based Software Model Checking)
- Industry Practice
- Discussion of emerging research in software testing
- Testing Machine Learning Systems
- Testing Stateful Systems
- Model Checking vs. Testing