Software Verification and Testing
(Fall 2017) under construction

General Information:
  • Grades (of non-Markus items) are posted on Blackboard when they are ready.
  • For text book and references see here.

Instructor Contact:
Azadeh Farzan: azadeh *at* cs dot toronto dot edu

TA Team:
Aamod Kore
Yi Li
Victor Nicolet
Anthony Vandikas

Office Hours:
Thursdays 1:30-2:30pm

Grading Scheme:
see Grading Info.

The Goal of the Course and Learning Objectives:
In this course, we aim to expose you to a variety of techniques that are used to ensure software reliability. These techniques range from software testing (fully automatic) to proving programs correct using theorem provers (involves a lot of contribution from the user). We do this by:
  • covering theoretical foundations of various testing and verification techniques, and
  • putting your theoretical knowledge to practical use by using a variety of tools to solve small scale (classroom-sized) problems. This gives you a chance to practice the theory, and to get to know these tools that may be useful to you in your future careers.
This process will involve learning to use quite a few tools in a relatively short period of time (12 weeks). It may seem a bit overwhelming for some. But, I think, given the fact that most of you are about to graduate and start your new careers, this situation simulates what you will face very soon in your work environment. Computer science is a very dynamic field. New programming languages, environments, tools and techniques find their way to the market every day. As a computer scientist, you need to have to skill to catch up with the new technology quickly (in contrast to knowing one or two of these very well from your school days). I consider all the assignments and projects for this course at the very easy level, once you get over the bump of figuring out how to work with these tools. My experience shows that a big majority of students very quickly catch up and do extremely well. I am mostly writing this for the small minority (about or under 20% of students) who mostly just give up trying because they think they cannot handle it. I assure you that you can! Just ask for help as early as you need it.

Also, in case you are taking this course as an elective, and do not like the general idea of it, then reconsider.

Attendance is not compulsory, but strongly recommended. Since the topics covered in this course are spread through several different books, the course does not have a single designated text book. So, if/when you miss a lecture, other than the lecture slides that are posted here, the burden of checking out the relevant book (for all course reference see here) from the library and catching up will be on you. Attending a lecture will save you all the trouble and a lot of time.

Communication Guidelines:
  • Email your instructor for personal matters, or asking for special considerations.
  • All general questions should be posted on the course bulletin board. Everyone can benefit from the question and the answer.
  • Always sign your full name at the bottom of your emails.
  • Always send your email from your university account.
  • Your questions will generally be answered within two business days (excluding weekends), although this may take longer during busy times (such as around assignment due dates). So, do not rely on getting a same-day answer.

Providing Feedback:
Rather than wait until the official course evaluations at the end of the term, by which point it's too late to make a difference, please feel free to get in touch with your instructor at any point during the term with any suggestion or complaint that you have about any aspect of the course. In particular, do not hesitate to let us know if there are aspects of the course that you particularly like, so that we can keep them that way, or if there are specific aspects that you dislike, so that we can make changes (or discuss with you our reasons for doing things that way).