Analyzing the Evolution of Software Systems by Providing and Relating Different Levels of Change Abstractions
This presentation was created for the SATURN conference series and does not necessarily reflect the positions and views of the Software Engineering Institute.
Studies on the life cycle of software-intensive systems conclude that the effort spent on maintenance can amount to 80% of the costs. People developing and maintaining such systems are confronted with a massive amount of information. Developers need to understand how the code to be changed relates to other features or bug fixes. Architects are interested in architecturally relevant changes only. Project stakeholders need to know the hot spots of frequent changes.
Currently, different versions of artifacts are compared at the code level only. Architecture or code-analysis tools evaluate and compare the quality of a software system at different points in time. The approach to be presented here focuses on the incremental or aggregated changes of the software over time. Changes are automatically resolved on structural levels such as architecture, design, and code. Architectural changes consist of added, removed, or changed components and changes of their dependencies. A component implementation is related to changes on the design-construct level, and these are categorized according to additional criteria such as being renamed or moved. Similarities are recognized over different design-construct versions.
When specifying a requirement or bug-tracking identification with configuration management check-ins, changes are also automatically related to requirements or bug fixes. This presentation will describe how impact analysis is supported by resolving all past changes attributable to a specific requirement starting with the last change to the code to be modified at the moment. Hints about how often a certain design construct has changed in combination with another design construct in the past indicate potential implications when modifying this design construct anew.