Visualizing Software Evolution in Lagrein Andrejs Jermakovics, Alberto Sillitti, Raimund Moser, Giancarlo Succi Center of Applied Software Engineering Free University of Bozen-Bolzano
Outline Introduction Background Single version visualizations Evolution visualizations
Introduction Why visualize software? Improve understanding New people in organisation A lot of code Detect problems (easier) Overly large/complex parts Highly coupled parts/With many concerns Violations of architecture (dep. cycles) Candidates for refactoring/testing
Introduction Why visualize software? Keep track Quality Effort distribution Re-engineering Retrieve design Communicate
Introduction Why visualize software evolution? Improve understanding Studying how software evolved (history) Understand the impact of accumulated changes See tendency Identify "drift" in the architecture Track/monitor quality Increases in complexity, size, couplings Spot patterns Repetitions, fluctuations Detect logical couplings – often modified together (clones, co-maintainable parts)
Background Why study software evolution? Identify change-prone parts of your systems Must be better designed Identify fault-prone/vulnerable parts of your system Must be better tested Must be maintained Identify artifacts that tend to change together Impact analysis Maintaining cloned code Change propagation on crosscutting concerns
Background Approaches Classical: Chart [Lehman97]
Background Approaches Comparing 2 versions [SeeSoft] [GASE]
Background Approaches Many Different Hard to compare Specific purpose
Background Approaches Evolution Matrix [Lanza01]
Background General problems Scalability Loss of details Trade-off Approaches Levels of granularity Aggregation Perspectives
Visualization in Lagrein Project visualizations Polymetric views [Lanza03] Switching, customizing, interacting, selecting granularity Using software metrics LOC, NOM, NOA, WMC, CBO, LCOM, RFC,... Spot trends and outliers
Visualization in Lagrein Project visualizations Dependency view Polymetric Selectable granularity Spring layout algorithm Grouping/clustering Dependencies: Calls Inheritance Same package
Visualization in Lagrein Data source – PROM (PRO Metrics)
SW Evolution in Lagrein The Obvious Version/Release chart Polymetric Aggregated metrics Evolution Matrix
SW Evolution in Lagrein Gradient Shows history/age Combined with any view Spot patterns (stable, grows, fluctuates) Enables comparisons of change speed
SW Evolution in Lagrein Animated polymetric views Seeing change In metrics In structure (additions) Seeing trends Tracking individual classes, packages Full control navigation
SW Evolution in Lagrein Animated polymetric views Dependency view Reusing previous layout (faster, smoother) Updating strengths Adding new classes close to neighbours (less movements) Observable change at system level and entity level
Critique Need to know what looking for (somewhat) Scalability Difficult to evaluate Computationally expensive
Thank you! Questions Comments Suggestions