Abstract |
Software architecture plays a primary role in system specifications and design, acting as
a bridge between requirements and implementation. As software systems evolve over
time, conformance to the initial architecture may be broken, while unexpected or
undesirable component dependencies may arise due to the way the source code evolves.
Additionally, understanding the underlying architecture of large applications is required
for effective maintenance and continuous improvement. However, the problem is that
the architecture is not somehow reflected in the source code since it is not a programming
language construct. As a consequence, methods and tools to extract architecture-related
information from source code that can aid software developers in understanding system
structure are required.
Reverse engineering is the process of analyzing a system in order to identify and represent
the relationships between its components. Architecture mining is a subset of reverse
engineering in which meaningful high-level abstractions that represent system
components are detected. In this context, reverse engineering methods may be used to
compute concrete architectures and compare it to the original conceptual architecture.
In this thesis, we propose an architecture mining tool with the aim of reconstructing the
software architecture only from C++ source code. In order to accomplish this, we focus
on class relationships, since they represent key elements at the source level. Specifically,
our system parses C++ projects and statically analyzes the source code to extract classrelated information. Then, it generates and visualizes a dependency graph that represents
all the relationships between classes. On top of this graph, we apply clustering methods
to identify high-level architectural entities. We use clustering algorithms like Louvain,
Infomap and Layered Label Propagation, but also allow users to choose ad-hoc clustering
via namespaces and folders. Finally, we have carried out a few case studies to assess and
validate the utility of our architecture mining approach.
|