Software Restructuring
Master Project

Project description

Legacy software is the result of years of accumulated investment, leading to stable code bases that are complex, poorly documented, and hard to modify. The maintenance efforts for legacy code bases are significant and can easily consume 40% of the total software development budget. To keep up the rate of innovation, software developers should be enabled to efficiently make structured, large-scale code modifications, and ensure their correctness.

We are working on a framework for the definition of custom, project-specific software restructurings that can be automatically applied at scale and for the automated validation of the correctness of the application of restructurings. We will combine our expertise in language engineering and model checking in a framework consisting of (1) an engine for executing large-scale restructurings of C++ code, which will operate on a language parametric semantic program model, incorporating aspects such as data- flow, control-flow, and name binding, enabling robust transformations by abstracting from irrelevant details, (2) a domain-specific language for the definition of program restructurings in terms of concrete object syntax, but operating on semantic program models, and incorporating static checks on the safety of restructurings, and (3) techniques for post-translation validation of the behavioral correctness of restructurings, building on techniques such as model-checking and model-based testing.

In this master thesis project you will develop components for a software restructuring frameworks. Specifics to be determined based on interest of the candidate.

This project involves the following steps:

  • Develop techniques for software restructuring

  • Evaluate these techniques on a code based

[1] Coccinelle program matching and transformation engine.

[2] Julien Brunel, Damien Doligez, René Rydhof Hansen, Julia L. Lawall, Gilles Muller. A foundation for flow-based program matching: using temporal logic and model checking. In Zhong Shao, Benjamin C. Pierce, editors, Proceedings of the 36th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL 2009, Savannah, GA, USA, January 21-23, 2009. pages 114-126, ACM, 2009.

[3] Hendrik van Antwerpen, Casper Bach Poulsen, Arjen Rouvoet, Eelco Visser. Scopes as types. Proceedings of the ACM on Programming Languages, 2(OOPSLA), 2018.

[4] Jeff Smits, Eelco Visser. FlowSpec: declarative dataflow analysis specification. In Benoît Combemale, Marjan Mernik, Bernhard Rumpe, editors, Proceedings of the 10th ACM SIGPLAN International Conference on Software Language Engineering, SLE 2017, Vancouver, BC, Canada, October 23-24, 2017. pages 221-231, ACM, 2017.

[5] Gabriël Konat, Michael J. Steindorfer, Sebastian Erdweg, Eelco Visser. PIE: A Domain-Specific Language for Interactive Software Development Pipelines. Programming Journal, 2(3):9, 2018.

[6] Eelco Visser. Meta-programming with Concrete Object Syntax. In Don S. Batory, Charles Consel, Walid Taha, editors, Generative Programming and Component Engineering, ACM SIGPLAN/SIGSOFT Conference, GPCE 2002, Pittsburgh, PA, USA, October 6-8, 2002, Proceedings. Volume 2487 of Lecture Notes in Computer Science, pages 299-315, Springer, 2002.

Contacts for the project

Software Restructuring

Supervisor(s): Eelco Visser, Casper Bach Poulsen
Location: TU Delft, industry
Posted: March 15, 2019