A preliminary evaluation on the relationship among architectural and test smells

Software maintenance is the software life cycle's longest and most challenging phase. Bad architectural decisions or sub-optimal solutions might lead to architectural erosion, i.e., the process that causes the system's architecture to deviate from its original design. The so-called architectural smells are the most common signs of architectural erosion. Architectural smells might affect several quality aspects of a software system, including testability. When a system is not prone to testing, sub-optimal solutions may be introduced in the test code, a.k.a. test smells. This paper explores the possible relations between architectural and test smells. By mining 798 releases of 40 open-source Java systems, we studied the correlation between class-level architectural and test smells. In particular, Eager Test and Assertion Roulette smells often occur in conjunction with Cyclically-dependent Modularization, Deficient Encapsulation, and Insufficient Encapsulation architectural smells.

[1]  Kelly Blincoe,et al.  A systematic mapping study on architectural smells detection , 2020, J. Syst. Softw..

[2]  Andrea De Lucia,et al.  VITRuM: A Plug-In for the Visualization of Test-Related Metrics , 2020, AVI.

[3]  Andrea De Lucia,et al.  Splicing Community Patterns and Smells: A Preliminary Study , 2020, ICSE.

[4]  Harald C. Gall,et al.  Scented since the beginning: On the diffuseness of test smells in automatically generated test code , 2019, J. Syst. Softw..

[5]  Davide Taibi,et al.  Architectural Smells Detected by Tools: a Catalogue Proposal , 2019, 2019 IEEE/ACM International Conference on Technical Debt (TechDebt).

[6]  Andy Zaidman,et al.  On the Relation of Test Smells to Software Code Quality , 2018, 2018 IEEE International Conference on Software Maintenance and Evolution (ICSME).

[7]  Gabriele Bavota,et al.  A large-scale empirical study on the lifecycle of code smell co-occurrences , 2018, Inf. Softw. Technol..

[8]  A. D. Lucia,et al.  When and Why Your Code Starts to Smell Bad , 2017, 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering.

[9]  Tushar Sharma,et al.  Designite - A Software Design Quality Assessment Tool , 2016, 2016 IEEE/ACM 1st International Workshop on Bringing Architectural Design Thinking Into Developers' Daily Activities (BRIDGE).

[10]  A. D. Lucia,et al.  Are test smells really harmful? An empirical study , 2015, Empirical Software Engineering.

[11]  Gabriele Bavota,et al.  Mining Version Histories for Detecting Code Smells , 2015, IEEE Transactions on Software Engineering.

[12]  Robert J. Winter Agile Software Development: Principles, Patterns, and Practices , 2014 .

[13]  Nenad Medvidovic,et al.  Toward a Catalogue of Architectural Bad Smells , 2009, QoSA.

[14]  Nenad Medvidovic,et al.  Identifying Architectural Bad Smells , 2009, 2009 13th European Conference on Software Maintenance and Reengineering.

[15]  Richard N. Taylor,et al.  Software architecture: foundations, theory, and practice , 2009, 2010 ACM/IEEE 32nd International Conference on Software Engineering.

[16]  Gerard Meszaros,et al.  xUnit Test Patterns: Refactoring Test Code , 2007 .

[17]  Kent L. Beck,et al.  Test-driven Development - by example , 2002, The Addison-Wesley signature series.

[18]  Arie van Deursen,et al.  Refactoring test code , 2001 .

[19]  Tomasz Imielinski,et al.  Mining association rules between sets of items in large databases , 1993, SIGMOD Conference.

[20]  M.M. Lehman,et al.  Programs, life cycles, and laws of software evolution , 1980, Proceedings of the IEEE.

[21]  Robert C. Martin,et al.  Clean Architecture: A Craftsman's Guide to Software Structure and Design , 2017 .

[22]  R. Fisher On the Interpretation of χ2 from Contingency Tables, and the Calculation of P , 2010 .

[23]  Arie van Deursen,et al.  On the Interplay Between Software Testing and Evolution and its Effect on Program Comprehension , 2008, Software Evolution.

[24]  M. Fowler Refactoring , 2002, Proceedings of the 24th International Conference on Software Engineering. ICSE 2002.