“That’s a nice couch in your office, Patrick.”
When I moved into Edgerton House I realized that trying to live without furniture soon becomes deeply unsatisfactory: the floor just isn’t that great to sit on. To avoid a repeat of that experience, I quickly purchased furniture for my new place.
I found ads for a coffee table set and a couch on craigslist, which were actually posted by the same person. Better yet, this person had a van and offered to transport the furniture to my place. She was selling the coffee table set and a couch set: a one-place, a two-place, and the above three-place couch. My place is small, so I negotiated with her to purchase just the one- and three-place couches, and I recruited Todd (thanks again!) to help me move the couch into and out of the van.
Epic bike trip in Massachusetts.
I was happy to leave my old office, NE43-632, at 200 Technology Square, and move to 32-G730 in the Stata Center. My two complaints about Tech Square were: (1) lack of sunlight; and (2) white noise. I always found the white noise to be annoying, but the lack of sunlight was not always a problem. When I had first arrived at MIT in 2000, we did have natural sunlight in my office.
I am teaching the following course in Spring 2022:
Here’s some of the courses that I’ve taught in the past.
(Last updated January 2020).
I’ve been at the University of Waterloo since January 2008, now as Associate Professor of Electrical and Computer Engineering. I’ve also served as Director and Associate Director of the Software Engineering program.
The goal of my research is to help developers state and verify key properties of their software; I apply static analysis techniques to software engineering problems.
In 2007, I was a postdoc at McGill University’s School of Computer Science, working with the late Laurie Hendren, Eric Bodden, and the Sable research group. For many years before that, I was a PhD student at MIT’s Computer Science and Artificial Intelligence Laboratory, working with Martin Rinard, Viktor Kuncak, and others.
| Date | Event |
|---|---|
| Jan 9 | A0 out |
| Jan 13 | A0 due |
| Jan 16 | A1 out |
| Jan 30 | A1 due |
| Jan 23 | Fuzz out (see your handin repo, under the fb directory) |
| Feb 13 | Fuzz due |
| Feb 13 | A2 out |
| Feb 15 | Quiz 1 |
| Mar 6 | A2 due |
| Mar 6 | A3 out |
| Mar 15 | Quiz 2 |
| Apr 10 | A3 due |
| Apr 10 | Last day of lectures |
| Apr 10 | Project due |
Referred to in one of the videos from W22. SymEx.ipynb
Graduate students taking this course have a project. Undergraduate students are not required to do a project, but may choose to do so after consulting me.
All assignments, quizzes, and tests that are submitted online will be returned online. Submissions will be by pushing to gitlab.
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.
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.