Visualizing Design Erosion: How Big Balls of Mud are Made

Software systems are not static, they have to undergo frequent changes to stay fit for purpose, and in the process of doing so, their complexity increases. It has been observed that this process often leads to the erosion of the systems design and architecture and with it, the decline of many desirable quality attributes, such as maintainability. This process can be captured in terms of antipatterns - atomic violations of widely accepted design principles. We present a visualisation that exposes the design of evolving Java programs, highlighting instances of selected antipatterns including their emergence and cancerous growth. This visualisation assists software engineers and architects in assessing, tracing and therefore combating design erosion. We evaluated the effectiveness of the visualisation in four case studies with ten participants.

[1]  Jens Dietrich,et al.  Barriers to Modularity - An Empirical Study to Assess the Potential for Modularisation of Java Programs , 2010, QoSA.

[2]  Jing Li,et al.  The Qualitas Corpus: A Curated Collection of Java Code for Empirical Studies , 2010, 2010 Asia Pacific Software Engineering Conference.

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

[4]  Mauricio A. Saca Refactoring improving the design of existing code , 2017, 2017 IEEE 37th Central America and Panama Convention (CONCAPAN XXXVII).

[5]  Joseph J. LaViola,et al.  Code Park: A New 3D Code Visualization Tool , 2017, 2017 IEEE Working Conference on Software Visualization (VISSOFT).

[6]  Leonard M. Freeman,et al.  A set of measures of centrality based upon betweenness , 1977 .

[7]  Michael W. Godfrey,et al.  Identifying Architectural Change Patterns in Object-Oriented Systems , 2008, 2008 16th IEEE International Conference on Program Comprehension.

[8]  Dirk Beyer,et al.  Evolution Storyboards: Visualization of Software Structure Dynamics , 2006, 14th IEEE International Conference on Program Comprehension (ICPC'06).

[9]  Connie U. Smith,et al.  Software performance antipatterns , 2000, WOSP '00.

[10]  Maureen C. Stone,et al.  A field guide to digital color , 2003 .

[11]  Andrew Koenig,et al.  Patterns and Antipatterns , 1998, J. Object Oriented Program..

[12]  Jens Dietrich,et al.  Scalable Motif Detection and Aggregation , 2012, ADC.

[13]  Lucian Voinea,et al.  Interactive Visual Mechanisms for Exploring Source Code Evolution , 2005, 3rd IEEE International Workshop on Visualizing Software for Understanding and Analysis.

[14]  J. S. Bradbury,et al.  Defining a Catalog of Programming Anti-Patterns for Concurrent Java , 2009 .

[15]  U. Brandes A faster algorithm for betweenness centrality , 2001 .

[16]  Matthias Noback The Dependency Inversion Principle , 2018 .

[17]  Marcelo R. Campo,et al.  An Overview of 3D Software Visualization , 2009, IEEE Transactions on Visualization and Computer Graphics.

[18]  Richard Müller,et al.  The Recursive Disk Metaphor - A Glyph-based Approach for Software Visualization , 2015, IVAPP.

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

[20]  David Lorge Parnas,et al.  Review of David L. Parnas' "Designing Software for Ease of Extension and Contraction" , 2004 .

[21]  Rosane Minghim,et al.  Metric Evolution Maps: Multidimensional Attribute-driven Exploration of Software Repositories , 2016, VMV.

[22]  Harald C. Gall,et al.  Fractal Figures: Visualizing Development Effort for CVS Entities , 2005, 3rd IEEE International Workshop on Visualizing Software for Understanding and Analysis.

[23]  Thierry Coupaye,et al.  ASM: a code manipulation tool to implement adaptable systems , 2002 .

[24]  Foutse Khomh,et al.  An exploratory study of the impact of antipatterns on class change- and fault-proneness , 2011, Empirical Software Engineering.

[25]  James Noble,et al.  SourceVis: Collaborative software visualization for co-located environments , 2013, 2013 First IEEE Working Conference on Software Visualization (VISSOFT).

[26]  Manoel G. Mendonça,et al.  An interactive differential and temporal approach to visually analyze software evolution , 2011, 2011 6th International Workshop on Visualizing Software for Understanding and Analysis (VISSOFT).

[27]  Harald C. Gall,et al.  A Tool for Visual Understanding of Source Code Dependencies , 2008, 2008 16th IEEE International Conference on Program Comprehension.

[28]  Ewan D. Tempero,et al.  An empirical study of cycles among classes in Java , 2007, Empirical Software Engineering.

[29]  Michele Lanza,et al.  Telling stories about GNOME with Complicity , 2011, 2011 6th International Workshop on Visualizing Software for Understanding and Analysis (VISSOFT).

[30]  Padhraic Smyth,et al.  Analysis and Visualization of Network Data using JUNG , 2005 .

[31]  M. Lanza,et al.  CodeCrawler - an information visualization tool for program comprehension , 2005, Proceedings. 27th International Conference on Software Engineering, 2005. ICSE 2005..

[32]  Ulrich W. Eisenecker,et al.  GETAVIZ: Generating Structural, Behavioral, and Evolutionary Views of Software Systems for Empirical Evaluation , 2017, 2017 IEEE Working Conference on Software Visualization (VISSOFT).

[33]  Michael W. Godfrey,et al.  YARN: Animating Software Evolution , 2007, 2007 4th IEEE International Workshop on Visualizing Software for Understanding and Analysis.

[34]  Joseph W. Yoder,et al.  Big Ball of Mud , 1997 .

[35]  Jens Dietrich,et al.  Cluster analysis of Java dependency graphs , 2008, SoftVis '08.

[36]  Rajiv D. Banker,et al.  Software complexity and maintenance costs , 1993, CACM.

[37]  Harald C. Gall,et al.  System evolution tracking through execution trace analysis , 2005, 13th International Workshop on Program Comprehension (IWPC'05).

[38]  Craig Anslow,et al.  CodeSurveyor: Mapping large-scale software to aid in code comprehension , 2015, 2015 IEEE 3rd Working Conference on Software Visualization (VISSOFT).