Software Testing, Verification, and Validation (COM3220)

Instructor: Karl Lieberherr
Office hours: Tue. 9:30-12:30 AM
Room: 237 CN

Short Description

This course introduces the student to software testing techniques. Testing software is like proving that a mathematical conjecture is wrong: it is sufficient to find one counterexample. Proving a conjecture to be wrong is often useful information since it shows that the conjecture needs to be repaired. Similarly, finding a bug in a program shows that the program needs to be corrected. There is an important difference between software testing and mathematics: In software testing the conjectures can be huge: Given this 1000 line program and this 200 line specification, find an input where the program does not fulfill the specification. In mathematics, interesting conjectures are usually much shorter. Another difference is that mathematical conjectures are formulated in a precise language while software specifications might be formulated in English. This means that the test engineer first has to build a model of the software against which to test the software.

Finding test inputs which lead to failures of programs requires a good understanding of the specification of the program as well as an understanding of which parts of the specification are hardest to implement. If the program to be tested is given in source form, we get additional clues where it might be most productive to look for bugs.

In an ideal world, there would be no need for testing: The software would be correct by construction. Ideally, we can think of a systematic way of deriving a program from a specification and simultaneously proving that the program satisfies the specification. While "correct-by-construction" is a worthwhile goal it is difficult to achieve in practice with the current state-of-the-art. The course will however also show how simple programs can be proven to be correct with respect to their specification. The software development process has an influence on which errors remain in the final program. If the software development process is perfect, there are no errors left provided the specification is correct.

The practical parts of the course will focus on testing Java programs using testing tools for Java from SunTest.

Menubar, resize this frame to
see text links below

Home page of 1999 course

Home page of 1998 course