New Software Engineering Courses at U of T

Starting in September 2007, the University of Toronto will replace its current three-course sequence in software engineering with two new courses. The first, CSC301, will be suitable for students in all streams; the second will primarily target Software Engineering specialists, though we expect a significant number of students from other specializations (particularly those intending to do PEY internships) will take it as well. I’ve included outlines for the courses below, and I’d be grateful for feedback.

CSC301: Introduction to Software Engineering

An introduction to agile development methods appropriate for medium-sized teams and rapidly-moving projects. Basic software development infrastructure; requirements elicitation and tracking; estimation and prioritization; teamwork skills; basic UML; design patterns and refactoring; security, ethics, and professional responsibility.

Rationale: CSC301 will introduce students to a complete, coherent set of development practices that are widely used in industry, and also appropriate for graduate-level research. It will be appropriate for students in specializations other than Software Engineering (such as Information Systems and HCI).

Structure: The course will be built around a term-long project, which will be done in two-week iterations by teams of 3-4 students using agile development methods. An example of such a project is adding internationalization and accessibility support to DrProject; another is building a simple educational game for the OLPC.

Topic Lecture Hours
Motivation: why do software projects fail? 1
Introduction to agile development 1
Project infrastructure: version control, continuous integration, issue tracking, etc. 1
Requirements elicitation and tracking 2
Estimation and prioritization 1
Teamwork skills: meeting management, work allocation, tracking progress 1
Case study 1: persistence 1
Basic UML (class diagrams and sequence diagrams) 1
Design patterns 3
Refactoring patterns 1
Midterm 1
Case study 2: internationalization and localization 1
Building testable software 2
Code quality and metrics 1
Documentation: what to write, how to maintain it 1
Software security 2
Case study 3: role-based access control 1
Ethics and professional responsibility 1
Course summary; where to look next 1

CSC302: Engineering Large Software Systems

An introduction to the theory and practice of large-scale software system design, development, and deployment. Project management; ICONIX and the Rational Unified Process; advanced UML; reverse engineering; requirements inspection; verification and validation; software architecture; performance modeling and analysis.

Rationale: This course will introduce students to the problems encountered in building and maintaining large systems with large, distributed teams. We hope (but cannot require) that students will take CSC301 and CSC302 in consecutive terms, so that instructors will be able to minimize repetition and maintain momentum.

Structure: The course will be built around a term-long project, which will be done in two iterations by groups of 6-8. Unlike CSC301, this course’s project will start from an existing medium-sized application. In each iteration, teams will go through “inception”, “elaboration”, “construction”, and “transition” phases of the Rational Unified Process (RUP). As in CSC408, teams will swap projects midway through the course.

Topic Lecture Hours
Motivation: how are large projects different from small ones? 1
Introduction to the Rational Unified Process 1
Requirements modeling with UML 2
Requirements inspection; traceability 1
Reverse engineering and design recovery 1
Design with UML 2
Midterm 1
Project management; risk management; change management 2
Deployment 1
Software architecture 4
Verification and validation 2
Performance analysis and modeling 4
Fault tolerance 2
Summary; facts and fallacies of software engineering 1