This course has two closely related themes.
First,
most software development is not new development,
but adding new features,
correcting problems,
migrating to new platforms,
and integrating third-party components into new projects
(maintenance & evolution).
Second, more than half the effort in software development is devoted to
activities related to testing,
including test design, execution, and evaluation.
This course will teach quantitative, technical, practical methods
that software engineers and developers can use to test their software,
both during and at the end of development.
These two themes are intertwined because much of the effort during
maintenance is testing the changes,
and much of the effort in testing is about
evaluating changes.
This course covers these two themes quantitatively,
with a solid basis in theory
and with practical applications.
These topics are useful to strong programmers
in the Computer Science program,
as well as engineers,
physical scientists,
and mathematicians
who regularly integrate software components as part of their work.