Software Evolution

6 EC

Semester 1, period 2

5364SOEV6Y

Owner Master Software Engineering
Coordinator dr. L.T. van Binsbergen
Part of Master Software Engineering, year 1

Course manual 2024/2025

Course content

This course is designed around lab sessions in which we study real and large (open-source) software systems, written in languages like C, Java, PHP or Ruby. We use Rascal -a programming language workbench, or meta programming language- to apply and build software metrics, software analyses, software visualisations and (if time permits) software transformations. See http://www.rascal-mpl.org. The student is supported with introductory courses and interactive lab sessions while learning this new language in the beginning.

The course is supported by a series of lectures on the theory of software maintenance and evolution, guest lecturers from field experts, and a guided study of a number of research papers about maintenance, reverse engineering, reengineering and renovation. Example topics are clone detection, mining software repositories and refactoring.

Study materials

Syllabus

  • Reader consisting of selected papers on software evolution

Other

  • http://www.rascal-mpl.org: http://www.rascal-mpl.org
  • Potentially other (academic) sources

Objectives

  • Understand a wide range of challenges stemming from the fact that software is developed in large, dynamic teams, is subjected to changing requirements and needs to be adapted to new contexts
  • Apply language engineering and empirical software engineering techniques to large code-bases in order to analyze them using various software quality metrics (e.g. to measure maintainability)
  • Analyze scientific contributions from selected papers addressing the challenges in software evolution discussed in lectures and covered in practicals
  • Evaluate one's own implementation of a software analysis tool by experimenting with the implementation (e.g. tweaking parameters or implementation choices), drawing comparisons with alternative approaches in literature, and/or against a set of clearly specified requirements

Teaching methods

    The format is focused on practical skills via the lab exercises, such as exploring source code and building tools, and academic skills via the paper sessions. Every week we start with a two hour lecture on the theory of software evolution, which is required to understand the material covered in the lab exercises. The rest of the day and the following day are lab hours. You also need two hours time every other week to prepare for the bi-weekly two-hour paper sessions.

    In this course we use the experimental programming language Rascal, which is (beta) open-source software and new to most students. On top of that we dive into many new topics for the students. Therefore the lab time is designed to be an integral and interactive part of the teaching, where the lecturer and the students are both present.

    Learning activities

     

    Activity

    Number of hours

    Zelfstudie

    53

    Lecture

    16

    Seminar

    4

    Presentation (giving/attending)

    3

    Laptop practical

    92

    Attendance

    Requirements concerning attendance (TER-B).

  • Participation in practical exercises, tutorials and study group sessions is obligatory. Detailed rules are laid out in the study guide and/or the course catalogue for each unit of study.
  • Assessment

    Item and weight Details

    Final grade

    Assignments

    The two practical assignments are executed in pairs (Series 1-2). The written assignment is executed individually (Annotated Bibliography)

    Fraud and plagiarism

    The 'Regulations governing fraud and plagiarism for UvA students' applies to this course. This will be monitored carefully. Upon suspicion of fraud or plagiarism the Examinations Board of the programme will be informed. For the 'Regulations governing fraud and plagiarism for UvA students' see: www.student.uva.nl

    Course structure

    See course reader.

    Additional information

    Recommended prior knowledge:

    • Advanced programming skills in several programming languages.
    • Knowledge of compiler construction (parsing, ASTs, basic code analysis, etc.).
    • Good (academic) English reading and writing skills.

    Contact information

    Coordinator

    • dr. L.T. van Binsbergen