Software maintenance is estimated at 75% to 90% of software development lifecycle cost, and its cost is predicted to grow. As systems stretch beyond their limits, maintaining and refactoring code requires ever-increasing effort and introduces serious risks since crucial business assets are often hidden in legacy components.

As high-tech companies often have many millions of lines of code in their systems, changing old software is known to be expensive, time-consuming, and error-prone. For refactoring or even efficiently maintaining a legacy application, it is essential to have a good understanding of the code. The technique to use depends on the specific case.

Dynamic analysis

Static analysis is such a technique that can help your code comprehension and provides a good insight into an application’s architecture, data, and dependencies. It doesn’t help you understand program flow, data flow (between calls, read/write database, and screen data), identify what code is executed to satisfy specific use cases, or ensure that all business rules have been taken into account. To secure this information a dynamic analysis is needed. Dynamic analysis can close the knowledge gap by augmenting the static model with a comprehensive analysis of the application during execution.

Legacy applications and Technical debt

This project develops methodologies and tools to combine static and dynamic analysis of code, aiming to provide industrial engineers with all necessary information for understanding legacy applications and addressing technical debt. The feasibility and added value of the approach is validated by means of a use case study, using a real-life software from the medical domain.