tended to remain almost intact across and unaffected
code versions, and thus tolerate code changes.
5 CONCLUSIONS
We developed a tool for architecture recovery directly
from source code and carried out a study on the results
produced by using different working configurations.
Our method tracks source code dependencies,
prepares incrementally, by parsing and analysing all
source files, a global dependency graph, and then
applies clustering algorithms to compute likely
architectural modules. The foundation of our
approach is modularity theory and the essential
criterial underpinning modular design, requiring
loose coupling across components, with intensive
dependencies appearing only as intra-component
links. We observed good results when switching and
playing with alternative clustering functions and
parameters.
Finally, we also explored two new ideas: (i) the
notion of dependency patterns, where we identified a
few cases frequently occurring in our study; and (ii)
correlations of clustering output resulting from
successive code versions to capture potential trends in
the software evolution process.
Although our focus on the second topic was more
limited in time, we believe that version-specific
clustered graphs collectively possess a lot of valuable
information for further versioning analysis.
REFERENCES
Terra, R., M.T. Valente, K. Czarnecki, R.S. Bigonha
(2012). Recommending Refactorings to Reverse
Software Architecture Erosion. In Proceedings of the
16th European Conference on Software Maintenance
and Reengineering, IEEE, March 2012, pp 335–340
ISO/IEC/IEEE 42010:2011. Systems and software
engineering — Architecture description
de Silva, L., Balasubramaniam, D. (2012). Controlling
software architecture erosion: a survey. Journal of
Systems and Software. 85 (1): 132–151.
Hunt, Andrew; Thomas, David (1999). The Pragmatic
Programmer, Addison Wesley, ISBN 0-201-61622-X.
Tamburri, D. A., Kazman, R. (2018). General methods for
software architecture recovery: a potential approach
and its evaluation. Empirical Software Engineering, 23
(4), June 2018, Springer
Tufano, Michele; Palomba, Fabio; Bavota, Gabriele;
Oliveto, Rocco; Di Penta, Massimiliano; De Lucia,
Andrea; Poshyvanyk, Denys (2015). When and Why
Your Code Starts to Smell Bad. In 2015 IEEE/ACM
37th IEEE International Conference on Software
Engineering. pp 403–414
Ducasse, S., Pollet, D. (2009). Software Architecture
Reconstruction: A Process-Oriented Taxonomy. In
IEEE Transactions on Software Engineering,
September 2009, 35(4)
Johnson, R., Opdyke, W. (1993). Refactoring and
Aggregation. In proceedings of the First International
Symposium on Object Technologies for Advanced
Software, Springer LNCS Vol. 742, pp 264-278
Buschmann F., Meunier R., Rohnert H., Sommerlad P., Stal
M. (1996). Pattern-Oriented Software Architecture: A
System of Patterns. John Wiley & Sons.
Breivold, H. P., Crnkovic, I., Larssona, M. (2012). Software
architecture evolution through evolvability analysis.
Elsevier Journal of Systems and Software, 85(11), pp
2574-2592
Ford, N., Kua, P., Parsons, R. (2019). Building
Evolutionary Architectures: Support Constant Change.
2nd Release. O'Reilly Media.
Barnes, J., Garlan, G., Schmerl, B. R. (2014). Evolution
styles: foundations and models for software
architecture evolution. Software Systems Modelling
13(2), pp 649-678
Rakic, G., Budimac, , Z., Ivanovic, M. (2014). A language-
independent approach to the extraction of dependencies
between source code entities. Elsevier Journal
Information and Software Technology, Vol 56, pp
1268-1288
Sourcetrail – The open-source cross-platform source
explorer. The Sourcetrail Development Team.
https://www.sourcetrail.com/. Accessed June 2021.
Assunção, W., Lopez-Herrejon, R., Linsbauer, L., Vergilio,
S., Egyed, A. (2017). Multi-objective reverse
engineering of variability-safe feature models based on
code dependencies of system variants. Springer
Empirical Software Engineering, Vo 22, pp 1763–1794
Kienle, H. M., Moeller, H. A. (2010). Rigi-An environment
for software reverse engineering, exploration,
visualization, and redocumentation. Science of Comp.
Programming, 75(4), pp 247-263.
Understand - Take Control of Your Code. Scientific
Toolworks, Inc. https://www.scitools.com/. Accessed
June 2021.
Blondel, V. D., Guillaume, J.-L., Lambiotte, R., Lefebvre,
E. (2008). Fast unfolding of communities in large
networks. Journal of Statistical Mechanics: Theory and
Experiment, 2008, P10008.
Rosvall, M., Axelsson, D. & Bergstrom, C. T. (2009). The
map equation. https://arxiv.org/abs/0906.1405
Raghavan, U., Albert, R., Kumara, S. (2007). Near linear
time algorithm to detect community structures in large-
scale networks. Physical review. Phys. Rev. E 76,
036106.
Taylor, R.N., Medvidović, N., Dashofy, E. M. (2009).
Software architecture: Foundations, Theory and
Practice. Wiley.