Course Instructor

Soha Makady

Course Information

You can find an unofficial version of the course outline here.

Announcements

Course Objectives

Basic software engineering courses focus on how to build a software system on a green field site. However, as a developer heads to the industry, he spends most of his time maintaining medium to large scale systems, that he has not contributed to their initial design or implementation, thus knows no information about their internal secrets. Maintaining an existing systems demands the developer to first understand the existing system design and implementation details (sometimes in the absence of documentation), to know which parts of the system would need to be modified, and to make sure that his applied modifications will not alter already working functionality, or inject additional defects.

This course aims to give students a realistic experience in how to maintain existing open source applications, in addition to learning how to design a software system so that it would be easy to maintain later on. By the end of this course, students will learn:

  • Techniques to help understand a software system that was developed by different authors (Program understanding )
  • How to identify the affected portions of the system by an intended change for some maintenance task (Software change impact analysis )
  • Techniques to enhance the ability to evolve a software system, and if that is always easy to do (Design for reuse )
  • How to reuse existing functionality during system evolution tasks to lessen the chances for injecting new defects (Software reuse )