CSC444
Software Engineering I Fall
2002
syllabus, course goals and rationale
Syllabus
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)
Course Goals
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.
Course Rationale
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.