University of Toronto, Department of Computer Science

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.