Software & Data Evolution

Course Description

The course Software and Data Evolution offers an in-depth coverage of a core topic within the broader field of information systems engineering -- specifically, the evolution and re-engineering  of software and data. The course starts by reviewing software evolution in general. Then, it proceeds to cover in an in-depth analysis, the area of re-engineering a legacy software. The course presents the general method of re-engineering a legacy system into a new, well-designed and maintainable object-oriented system. Following, the particular steps of the method, along with patterns and anti-patterns are covered: reverse engineering, abstract modeling of an OO system, identification of bad design symptoms, re-engineering patterns and forces. The cource moves on to cover the evolution of data, and presents typical patterns by which database schemata evolve, and techniques to handle schema evolution.

A team project where a large complex software system is re-engineered accompanies the theoritical lecturing.

Instructors

Learning Objectives & Expected Outcomes

  • Understand the state-of-the-art and the historical evolution of research in the area under study.
  • Understand in depth the critical steps in the process of re-engineering.
  • Reverse engineer an existing system and produce (a) an abstract model of the system and (b) the appropriate documentation that goes along with the abstract model.
  • Identify symptoms of bad design and rigidity and prioritize them in terms of re-engineering.
  • Understand the role of re-engineering patterns in the process of software maintenance, their interrelationships and tradeoffs.
  • Design specific solutions for the identified problems and assess both the “forces” that constrain the solution space as well as the trade-offs that each candidate solution incurs.
  • Acquire hands-on experience by developing a complete project wherein they apply the design and algorithmic knowledge obtained from the course in order to re-engineer an existing complex software system.

Literature and Study Material

Object-Oriented Reengineering Patterns, S. Demeyer, S. Ducasse, O. Nierstrasz, ISBN 978-3-9523341-2-6.

Working Effectively with Legacy Code, M. Feathers, Prentice Hall, ISBN-13: 978-0131177055.

Refactoring. Improving the Design of Existing Code, Fowler, Addison-Wesley, ISBN 0-201-48567-2.

Refactoring To Patterns, J. Kerievsky. Addison-Wesley, ISBN 0-321-21335-1.

Design Patterns: Elements of Reusable Object-Oriented Software, E. Gamma,R. Helm, Richard, R. Johnson, Ralph, J. Vlissides,  Addison-Wesley, ISBN 0-201-63361-2.

You can download related readings from Prof. Vassiliadis' page.

Scoring

The score is based on two factors (1) a team project and (2) an atomic project.
  • (Team) Project: 80%
  • (Atomic) Participation to the course lectures, discussions, and individual activities:  20%


You can download the lectures' slides here (contents updated after each lecture).

Projects

The project of the course involves the re-engineering of a fairly sizeable object-oriented project. Specifically, the process of bringing the project to successful end involves the following steps.
  • The instructors announce a short list of candidate software projects
  • Students form groups of 2 or 3 persons
  • Depending on the team’s size there is an assignment of project made by the instructors.
  • Intermediate deliverables will be prescribed in the project description. 
  • The ultimate deadline and the presentation of the project is 17/01/2023.

Announcements

  • NEW !! The review of the project will take place on WED 18/1 10.00 - 12.00 instead of TUE 17/1.
  • This year's project is to restructure tax calculation application and develop a respective Spring fron-end.
    • You can find more details and the source code of the project here.

Useful Links