All assignments, quizzes, and tests that are submitted online will be returned online. Submissions will be by pushing to gitlab.
Final exam will be in-person.
All quizzes are take home, open book, closed internet. Each online test will be time limited and must be completed within 3 days. That is, you can pick the best time to take the test, but once you start, you have to finish within the given time limit.
(based on a previous version by Prof. Arie Gurfinkel; thanks!)
(this version is deprecated; official version at [https://outline.uwaterloo.ca/view/nrvxsk]).
This course will provide an introduction to software testing and quality assurance techniques. The students will learn a wide spectrum of techniques and tools that can be used to improve and evaluate software quality ranging from mature testing methodologies to cutting edge automated verification algorithms. Topics to be covered include: coverage criteria (graph, data-flow, and logic coverage), symbolic execution (static, dynamic, concolic), constraint solving (SMT), inductive invariants, automatic deductive verification, automatic invariant synthesis, and Software Model Checking.
| Date | Event |
|---|---|
| May 3 | A0 out |
| May 9 | A0 due |
| May 10 | A1 out |
| June 3 | A1 due |
| May 26 | Fuzz out (see your handin repo, under the fb directory) |
| June 13 | Fuzz due (was June 10) |
| June 13 | Quiz 1 out |
| June 14 | A2 out |
| July 4 | A2 due (first workday after July 1 holiday) |
| July 5 | A3 out |
| July 5 | Quiz 2 out |
| July 26 | A3 due |
| July 26 | Last class |
| August 5 | Project due |
Referred to in one of the videos from W22. SymEx.ipynb
There are two choices of project. Projects can be done in groups of 2. You must declare your project by the end of Week 8. All projects must be approved by the instructor. Talk to me. Sooner the better. Deadline for project approval is Week 10. Projects are due by the last day of class.
The exact project deliverables depend on the project chosen. All projects must include approximately a 10 page report. The length of the report depends on the amount of code involved in the project (i.e., more code means shorter report).
I enjoy contributing to free software projects. Unfortunately, I somehow haven't had time to contribute anything recently. However, here are some of the projects that I've contributed to in the past.
mmap-able caching for font information.svn://svn.sablecc.org/developers/indrek/sandbox/sablecc-indrek/.
My publications contain more technical descriptions of my research.
My research aims to develop tools and techniques to help developers produce more reliable software systems. In particular, I am developing (1) lightweight specification languages, which enable developers to state key properties of their software, and (2) static analysis techniques, which enable compilers to verify that these properties actually hold.
Technology. Static analysis determines properties of a program without actually executing the program; contrast this to dynamic analysis, which collects program properties by observing program executions. Optimizing compilers have used static analysis to eliminate unnecessary computations and thereby speed up program executions. In the software engineering domain, static analysis has been used, for instance, to find potential null pointer bugs and to verify that device drivers always respect API usage requirements.
Outline v1: pdf
Papers list: google doc
Project suggestions: google doc
Outline v3: pdf
Papers list: google doc
Project suggestions: google doc