Fall term 2001
CSC444F (Software Engineering I)
The software development process. Software requirements and specifications.
Software design techniques. Techniques for developing large software systems.
CASE tools and software development environments. Software testing, documentation
and maintenance. (Prerequisite: ECE344S)
The course has two main goals:
To help students to develop skills that will enable them to construct software
of high quality – software that is reliable, and that is reasonably easy
to understand, modify and maintain
To foster an understanding of why these skills are important
Software Engineering is difficult to teach and to learn in a university
environment. Most of the important lessons of software engineering only
apply to large scale software development, i.e. to systems that are bigger
than it is possible for a small group of students to build in one or two
terms. The skills needed to develop such systems have very little to do
with the type of programming that most students learn at University. In
fact, software engineering has very little to do with programming at all.
Software Engineering is about the discipline needed to develop high quality
software that can be understood, maintained and adapted over long periods
of time by many different people. ‘Quality’ is a key word here. The notion
of quality for software is different from the notion of quality for other
types of engineered systems (electrical, mechanical, etc), because software
is different from physical systems (during the course we'll examine why).
The notion of quality for software is also different from the notion of
quality for programs that students build on programming courses. An understanding
of what software quality really means is central to understanding what
software engineering is all about.
The course attempts to foster an understanding of software quality:
what it is, and how to achieve it. We do this through the use of a team
project running throughout the course, in which teams trade software modules
with one another. By attempting to understand, assess, and modify one another’s
programs, students will gain insight into the nature of software quality,
and why an ability to program is not sufficient for the construction of
high quality software.