The EvoSpaces reverse-engineering tool represents the architecture and metrics of complex software systems as 3D software cities. By navigating and interacting with this world, th...
Legacy applications can be difficult and time-consuming to understand and update due to the lack of modern abstraction mechanisms in legacy languages, as well as the gradual dete...
When trying to understand the evolution of a software system it can be useful to visualize the evolution of the system’s architecture. Existing tools for viewing architectural e...
Dynamic protocol recovery tries to recover a component’s sequencing constraints by means of dynamic analysis. This problem has been tackled by several automaton learning approac...
Gaining an understanding of software systems is an important discipline in many software engineering contexts. It is essential that software engineers are assisted as much as poss...
The notion of functional or modular dependency is fundamental to understand the architecture and inner workings of any software system. In this paper, we propose to extend that no...
This paper presents an algorithm for reverse engineering semantically sound object-oriented data models from programs written in weakly-typed languages like Cobol. Our inference i...
Reverse engineering legacy software systems often involves the employment of clustering algorithms that automatically decompose a software system into subsystems. The decompositio...
Our analysis of crosscutting concerns in real-life software systems (totaling over 500,000 LOC) and in reports from literature indicated a number of properties that allow for thei...
Comments are valuable especially for program understanding and maintenance, but do developers comment their code? To which extent do they add comments or adapt them when they evol...