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 |
I really like this more modern syllabus (syllabi?). It feels much more practical in my opinion, and more closer to what skill sets students really need when it’s time to *gasp* actually look for a new job/internship. As a (returning) student, I’m curious as to how would this relate to the now-defunct CSC309? In your opinion, would it be worth it to take CSC301 and CSC302 given that some of the topics here have been already covered in CSC309 (for people who have taken it)?
There’s no intrinsic relationship between 301/302 (which are about development processes and tools) and 309 (which is about web programming) — the material in 301/302 is as relevant to graphics, compilers, operating systems, games, etc., as it is to the web.
We hope.
I’m sorry, must’ve been thinking of what I’m planning to take next school year. I meant 340.
I love that they’ll swap projects partway through the course! What a great way to emphasize the need for writing maintainable code (and prepare for the realities of commercial software development).
I wonder if there is already a list of recommended reading material for the new courses…
I love it! I wish I could sign up for CSC301 right now, it’s exactly the kind of things we are trying to put in place for our team now, and something that was not covered in any course previously. I think agile is the way that the whole industry is starting to go, and knowing how to really do it right is going to be key for the next generation of software developers.