The main aim of the course is to provide a basic understanding of techniques that cope with errors in programs.
Recurring themes are;
a) the identification of errors,
b) their analysis,
c) their removal.
The course also provides an understanding of systematic ways to convince oneself that a program unit really does what it should.The course covers formal and informal methods, testing (terminology, coverage, unit tests, a unit test framework), debugging (control, workflow, localisation, tools), formal specifications (pre-/postconditions, invariants), formal verification (logics, tool support).Through out, the course is concerned with imperative programs in general, and object-oriented programs in particular.
After the course, student have understood - and are able to employ - the methods testing (trying to reveal the presence of errors in a systematic way), debugging (the act of isolating and fixing errors), and verification (reasoning about programs in order to guarantee correctness).
All these methods only make sense in the presence of a specification of what the program is supposed to do.