This paper discusses a method for incorporating several important software engineering concepts that have been traditionally hard to teach into courses at both the undergraduate and graduate level. We have created a project template that can be instantiated in many ways to be tailored to the level of a particular course, the number of students, the quality of students, and the goals of the course. We consider a ``large'' software project to be one in which each programmer's contributionrepresents a small part of the overall project (less than 10%). Our project template is a completed software system, which, although too large for a semester project in its complete form, can be easily divided into coherent subsystems. The students are provided with some subsystems, and asked to derive requirements for, design, implement, and test the remaining subsystems. This approach allows the students to work in a large-project environment, reuse existing code, maintain old code, and perform an integration of a significant system. This project has been successfully used in undergraduate and graduate courses that have completely diverging goals and purposes.
Back to my home page.