Extraction of Architectural Knowledge from Legacy Code

statechart

Maintenance phase is often the longest running phase of software development lift cycle. In maintenance phase, a software project is typically handled by engineers who weren't there from the beginning. The code and other artifacts are 'legacy' for these engineers. The original contributors to the project have moved on, and with them is gone a lot of unwritten knowledge. Legacy code, which has been working well is both hard to maintain and to throw away. Design and architectural documentation is scanty. So, the maintenance engineer has to figure out what the original contributor had in mind. The usual techniques used to do this is code review, testing and a lot of guesswork.

In this project, we are developing a set of algorithms, mostly based on program analysis, to extract the high level architectural facts about legacy code. Our algorithms analyse the code and identify features and patterns which correspond to certain known design and architectural tricks, e.g. design pattern, architectural patterns and tactics.