By the end of this course, the students will have not only studied, but actually performed, all of the major steps of a large software project. It is hoped that these exercises will consolidate the learning of these skills and well-prepare students for larger projects to come. There is, in some sense, only one project for the entire course, but it is broken down into a few distinct phases (involving very different activities):
It is traditional, in Software Engineering courses, to have students build a large project. This is intended to give students the opportunity to apply many of the skills covered in the reading and lectures. And I must concede that building software is the most obvious form for projects in a Software Engineering class to take.
In looking at what students have actually done in these projects, I have found a few major concerns:
In a typical Software Engineering project, students spend (at best) 25% of their time on these activities, and 75% of their time coding and debugging. This is realistic (in that it mirrors real software development) but it doesn't provide much opportunity for the students to apply the taught techniques and develop the associated skills.
The typical class project involves a one digit number of staff-months of work: the size of a single task in many large software projects. While these projects are highly educational, and a necessary step in the development of discipline and skills, they seem (to me) too small to demand significant exercise of "Software Engineering" (as opposed to programming) skills.
My goal, in defining projects for this course, has been to create a series of projects that will focus primarily on the primary skills taught in the course.
Another goal of these projects is to develop organizational, planning, time management, and post-mortem review skills. This is accomplished by not breaking the second project into small pieces, but rather, requiring the students to do this. The students are not merely responsible for producing the required work products, but plans for their production. The project grades are based, in part, on the quality of the plans, the dilligence that was paid to them, and the insights gained in retrospect. It is further hoped that the post-mortem reviews will help consolidate learning of both process and technical lessons.
Thus the assigned projects should be seen, both in terms of the primary technical skills they exercise, and successively more demanding sets of project management responsibilities. I assert that it is these skills (and not additional programming ability) that are the primary focus of this course.