Prof. Bob Keller, 1249 Olin (MTuW; 4:15-5:30 p.m. or by drop-in or appt.), x 18483
Software testing is an endeavor that, although partially coupled to the
software development process, can be viewed as an independent intellectual
activity, with its own sets of problems and techniques. Similarly, there is an
applicable body of theory distinct from, but not unrelated to, the theory of
software verification.
It is well known that software cannot generally be exhaustively tested.
Moreover expeditious formal specifications and proofs of program correctness for
complete systems are usually not within the capability of even the advanced
software developer. Therefore testing seeks to provide the best assessment of
software quality within limited resources.
The purpose of this course is to develop an awareness of the approaches to testing, with an emphasis on conceptual underpinning, and to also conduct a survey of contemporary tools.
We will not leave untouched the thorny issues surrounding testing applications with graphical user interfaces, web-based interfaces, and real-time systems.
We will spend some time comparing testing with complementary approaches such
as formal verification.
Even someone who never plans to be a tester can benefit from understanding
issues such as testing in multi-threaded environments.
The course will have a seminar structure. There will be assigned papers, in-class presentations by students, and some homework and coding. Grading breakdown is:
30% Class participation, which will include some
presentations
70% Written work, which will include some code development
o What is “software quality”?
o How is software quality similar to, as well as different from, quality of other kinds of products?
o Can software quality be measured? Can it be managed?
o What techniques can be used to assure software quality?
o What aspects, and to what extent, can the specification of software and its testing be formalized?
o For those aspects that can be formalized, to what extent can they be proved?
o For those aspects that can be proved, to what extent can the proofs be automated?
o How does testing interplay with specification and proof?
o What development/testing processes are likely to enhance software quality?
There are many available books on testing. Most tend to be oriented toward
practice and methods. We are going to do a critical read of the following,
which is somewhat more theoretical than average, as a baseline reference:
Paul C. Jorgensen, Software Testing, A Craftsman’s Approach (2nd edition), CRC Press, 2002.
Other references will be introduced as we go.