Heuristics for discovering architectural violations

Software architecture conformance is a key software quality control activity that aims to reveal the progressive gap normally observed between concrete and planned software architectures. In this paper, we present ArchLint, a lightweight approach for architecture conformance based on a combination of static and historical source code analysis. For this purpose, ArchLint relies on four heuristics for detecting both absences and divergences in source code based architectures. We applied ArchLint in an industrial-strength system and as a result we detected 119 architectural violations, with an overall precision of 46.7% and a recall of 96.2%, for divergences. We also evaluated ArchLint with four open-source systems, used in an independent study on reflexion models. In this second study, ArchLint achieved precision results ranging from 57.1% to 89.4%.

[1]  Benjamin Livshits,et al.  DynaMine: finding common error patterns by mining software revision histories , 2005, ESEC/FSE-13.

[2]  Rainer Koschke Incremental reflexion analysis , 2013, J. Softw. Evol. Process..

[3]  K. Rangarajan,et al.  Modularization of a Large-Scale Business Application: A Case Study , 2009, IEEE Software.

[4]  Alexander L. Wolf,et al.  Acm Sigsoft Software Engineering Notes Vol 17 No 4 Foundations for the Study of Software Architecture , 2022 .

[5]  Marco Tulio Valente,et al.  Study on the relevance of the warnings reported by Java bug-finding tools , 2011, IET Softw..

[6]  James R. Larus,et al.  Righting software , 2004, IEEE Software.

[7]  Michael D. Ernst,et al.  Which warnings should I fix first? , 2007, ESEC-FSE '07.

[8]  Sunghun Kim,et al.  Memories of bug fixes , 2006, SIGSOFT '06/FSE-14.

[9]  Richard C. Holt Structural manipulations of software architecture using Tarski relational algebra , 1998, Proceedings Fifth Working Conference on Reverse Engineering (Cat. No.98TB100261).

[10]  David Notkin,et al.  Software reflexion models: bridging the gap between source and high-level models , 1995, SIGSOFT FSE.

[11]  Hoan Anh Nguyen,et al.  Recurring bug fixes in object-oriented programs , 2010, 2010 ACM/IEEE 32nd International Conference on Software Engineering.

[12]  Kim Mens,et al.  Co-evolving code and design with intensional views: A case study , 2005, Comput. Lang. Syst. Struct..

[13]  Rainer Koschke,et al.  Hierarchical reflexion models , 2003, 10th Working Conference on Reverse Engineering, 2003. WCRE 2003. Proceedings..

[14]  H. James Hoover,et al.  Using SCL to specify and check design intent in source code , 2006, IEEE Transactions on Software Engineering.

[15]  Michael Eichberg,et al.  Defining and continuous checking of structural program dependencies , 2008, 2008 ACM/IEEE 30th International Conference on Software Engineering.

[16]  Dalton Serey Guerrero,et al.  Structural conformance checking with design tests: An evaluation of usability and calability , 2011, 2011 27th IEEE International Conference on Software Maintenance (ICSM).

[17]  Ricardo Terra,et al.  A dependency constraint language to manage object-oriented software architectures , 2009 .

[18]  Marco Tulio Valente,et al.  Mining system specific rules from change patterns , 2013, 2013 20th Working Conference on Reverse Engineering (WCRE).

[19]  Jens Knodel,et al.  A Comparison of Static Architecture Compliance Checking Approaches , 2007, 2007 Working IEEE/IFIP Conference on Software Architecture (WICSA'07).

[20]  Marco Tulio Valente,et al.  Mining Architectural Patterns Using Association Rules , 2013, SEKE.

[21]  Yana Momchilova Mileva,et al.  Mining Evolution of Object Usage , 2011, ECOOP.

[22]  Krzysztof Czarnecki,et al.  A recommendation system for repairing violations detected by static architecture conformance checking , 2015, Softw. Pract. Exp..

[23]  Ricardo Terra,et al.  Static Architecture-Conformance Checking: An Illustrative Overview , 2010, IEEE Software.

[24]  Stéphane Ducasse,et al.  Software Architecture Reconstruction: A Process-Oriented Taxonomy , 2009, IEEE Transactions on Software Engineering.

[25]  Murray Hill,et al.  Lint, a C Program Checker , 1978 .