Automatic and Continuous Software Architecture Validation

Software systems tend to suffer from architectural problems as they are being developed. While modern software development methodologies such as Agile and Dev-Ops suggest different ways of assuring code quality, very little attention is paid to maintaining high quality of the architecture of the evolving systems. By detecting and alerting about violations of the intended software architecture, one can often avoid code-level bad smells such as spaghetti code. Typically, if one wants to reason about the software architecture, the burden of first defining the intended architecture falls on the developer's shoulders. This includes definition of valid and invalid dependencies between software components. However, the developers are seldom familiar with the entire software system, which makes this task difficult, time consuming and error-prone. We propose and implement a solution for automatic detection of architectural violations in software artifacts. The solution, which utilizes a number of predefined and user-defined patterns, does not require prior knowledge of the system or its intended architecture. We propose to leverage this solution as part of the nightly build process used by development teams, thus achieving continuous automatic validation of the system's software architecture. As we show in multiple open-source and proprietary cases, a small set of predefined patterns can detect architectural violations as they are introduced over the course of development, and also capture deterioration in existing architectural problems. By evaluating the tool on relatively large open-source projects, we also validate its scalability and practical applicability to large software systems.

[1]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[2]  Mary Shaw,et al.  Abstractions for Software Architecture and Tools to Support Them , 1995, IEEE Trans. Software Eng..

[3]  Yuanfang Cai,et al.  Detecting software modularity violations , 2011, 2011 33rd International Conference on Software Engineering (ICSE).

[4]  Robert E. Tarjan,et al.  Depth-First Search and Linear Graph Algorithms , 1972, SIAM J. Comput..

[5]  Mary Shaw,et al.  The golden age of software architecture , 2006, IEEE Software.

[6]  Maayan Goldstein,et al.  System Grokking - A Novel Approach for Software Understanding, Validation, and Evolution , 2009, NGITS.

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

[8]  Bixin Li,et al.  A classification and comparison of model checking software architecture techniques , 2010, J. Syst. Softw..

[9]  Elmar Jürgens,et al.  Flexible architecture conformance assessment with ConQAT , 2010, 2010 ACM/IEEE 32nd International Conference on Software Engineering.

[10]  Arie van Deursen,et al.  Dependency profiles for software architecture evaluations , 2011, 2011 27th IEEE International Conference on Software Maintenance (ICSM).

[11]  Henry Muccini,et al.  Developing next generation ADLs through MDE techniques , 2010, 2010 ACM/IEEE 32nd International Conference on Software Engineering.

[12]  Katerina Goseva-Popstojanova,et al.  Architecture-based approach to reliability assessment of software systems , 2001, Perform. Evaluation.

[13]  Richard N. Taylor,et al.  Enhancing architecture-implementation conformance with change management and support for behavioral mapping , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[14]  Mohammad Bsoul,et al.  An approach to automatically enforce object-oriented constraints , 2014, Int. J. Comput. Appl. Technol..

[15]  Yuanyuan Song,et al.  Automatic modularity conformance checking , 2008, 2008 ACM/IEEE 30th International Conference on Software Engineering.

[16]  Neil B. Harrison,et al.  Pattern-Based Architecture Reviews , 2011, IEEE Software.

[17]  Mohamed Jmaiel,et al.  An UML-Based Approach for Validation of Software Architecture Descriptions , 2006, TEAA.

[18]  Volker Gruhn,et al.  Model-Driven Software Development , 2005 .

[19]  Rainer Weinreich,et al.  Paving the road for formally defined architecture description in software development , 2010, SAC '10.

[20]  Richard N. Taylor,et al.  A language and environment for architecture-based software development and evolution , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[21]  William G. Griswold,et al.  The structure and value of modularity in software design , 2001, ESEC/FSE-9.

[22]  David S. Janzen,et al.  Test-driven development concepts, taxonomy, and future direction , 2005, Computer.

[23]  Maayan Goldstein,et al.  Improving software through automatic untangling of cyclic dependencies , 2014, ICSE Companion.

[24]  Stéphane Ducasse,et al.  Efficient Retrieval and Ranking of Undesired Package Cycles in Large Software Systems , 2011, J. Object Technol..

[25]  Andrew Glover,et al.  Continuous Integration: Improving Software Quality and Reducing Risk (The Addison-Wesley Signature Series) , 2007 .

[26]  Nenad Medvidovic,et al.  Are automatically-detected code anomalies relevant to architectural modularity?: an exploratory analysis of evolving systems , 2012, AOSD.

[27]  Arie van Deursen,et al.  Quantifying the Analyzability of Software Architectures , 2011, 2011 Ninth Working IEEE/IFIP Conference on Software Architecture.

[28]  Leonard J. Bass,et al.  SAAM: a method for analyzing the properties of software architectures , 1994, Proceedings of 16th International Conference on Software Engineering.

[29]  Rick Kazman,et al.  Automated verification of design patterns: A case study , 2014, Sci. Comput. Program..