Teaching software engineering principles using maintenance-based projects

We describe a first undergraduate course in software engineering based on maintenance exercises. The approach has been successful in teaching important software engineering principles in a 10-week quarter to undergraduates inexperienced in these principles.