Titelaufnahme

Titel
EvoZilla - longitudinal evolution analysis of large scale software systems / Michael Fischer
VerfasserFischer, Michael
Begutachter / BegutachterinGall, Harald C. ; Jazayeri, Mehdi
Erschienen2006
UmfangIV, 132, X S. : graph. Darst.
HochschulschriftWien, Techn. Univ., Diss., 2007
Anmerkung
Zsfassung in dt. Sprache
SpracheEnglisch
Bibl. ReferenzOeBB
DokumenttypDissertation
Schlagwörter (DE)Programmevolutionsanalyse / longitudinale Entwicklung
Schlagwörter (EN)software evolution analysis / longitudinal development
Schlagwörter (GND)Softwaresystem / Entwicklung / Analyse / Längsschnittuntersuchung
URNurn:nbn:at:at-ubtuw:1-18005 Persistent Identifier (URN)
Zugriffsbeschränkung
 Das Werk ist frei verfügbar
Dateien
EvoZilla - longitudinal evolution analysis of large scale software systems [1.65 mb]
Links
Nachweis
Klassifikation
Zusammenfassung (Deutsch)

Langlebige Computerprogramme repräsentieren wichtige Vermögenswerte, welche möglichst flexibel auf die sich beständig ändernden Bedürfnisse ihrer Anwender reagieren müssen. Konsequenterweise muss die Prüfungen auf Unregelmäßigkeiten in der Entwicklung eines Computerprogramms ein integraler Bestandteil des gesamten Lebensdauerzykluses sein. Die Entwicklungsanalyse von Computerprogrammen offeriert eine Möglichkeit die strukturelle Stabilität während der Programmentwicklung zu bewerten.

Erforderlich ist daher eine Methodik um kritische Programmartefakte noch während der Entwicklung des Systems zu identifizieren und mögliche strukturelle Mängel aufzuzeigen. Die so gewonnenen Informationen repräsentiert Rückmeldungen über die getroffene Entscheidungen in der Entwurfsphase und ermöglicht so deren Validierung.

Um das Problem der Informationsgewinnung zu lösen, konzentrieren wir uns in der gegenständlichen Arbeit auf das Potential historischer Daten welche automatisch während der Entwicklung eines Systems aufgezeichnet werden. Primäre Forschungsziele sind daher:

(G1) ein effizientes Speichermodell und Werkzeuge welche die Speicherung und Auswertungen historischer und struktureller Daten ermöglichen; (G2) eine schnelle und effiziente Methodik zur Detektierung strukturelle Anomalien basieren auf historischen Daten; und (G3) eine Methodik zur Generierung von Feedback über die wichtigsten Artefakte und deren Abhängigkeiten um das Verständnis über Änderungen und deren Effekte zu verbessern.

Unsere Analyseansatz, EvoGraph genannt, dient zur Erkennung von kritischen Artefakten und Mustern im Zuge der Evolution eines Programmsystems basierend auf Änderungs- und Problembeschreibungen, Laufzeitdaten und Quellcodeänderungen. Zur effizienten Anwendung unseres Ansatzes werden die zu analysierenden Teile mittels Merkmalsanalyse vorselektiert. Basierend auf der gewählten Untermenge, wird ein Abhängigkeitsgraph erstellt, welcher Gewichtungen aus den historischen Informationen enthält. Mittels Distanzoptimierung können komplexe Abhängigkeiten zwischen den Knoten im Graphen dargestellt werden. Als Resultat werden stark voneinander abhängige Knoten in enger Nachbarschaft zueinander plaziert. Eine nachfolgende Analyse der Änderungen im Quellcode gibt detailiert Auskunft über die Entwicklung des Systems hinsichtlich struktureller Abhändigkeiten.

Ergebnis unseres Ansatzes ist eine qualifizierte Untermenge von ausgewählten Quellcodeartefakten gemeinsam mit ihren strukturellen Abhängigkeiten. Sie stellen das evolutionäre Echo der implementierten Architektur des Programmsystems dar. Darüberhinaus werden durch Visualisierungen entsprechende Informationen über Änderungsmuster im Quellcode geboten. Sie erlauben das Ziehen weiterer Schlüsse über die Entwicklung des Systems.

EvoGraph stellt einen flexiblen, einfachen und ausreichenden Ansatz dar um die strukturelle Stabilität von großen Programmsystemen zu überprüfen. Unsere Fallstudie mit der Mozilla Application Suite hat gezeigt, dass unser Ansatz praktisch durchführbar sowie effektiv im Aufzeigen der wichtigsten Artefakte und ihrer strukturellen Abhängigkeiten ist. Die Resultate zeigen weiters, dass langlebige Programmsysteme historische Daten in ausreichender Qualtität und Quantität liefern, um die effiziente Identifizierung von Anomalien zu erlauben. Hinsichtlich unserer Fallstudie waren wir in der Lage, Gott-Klassen in der strukturellen Dimension und verschiedene Muster in der entwicklungsmäßigen Dimension zu identifizieren. Sie sind ein Zeichen für strukturelle Instabilitäten welche komplexe und teure Quellcodeänderungen verursachen.

Zusammenfassung (Englisch)

Large and long-lived software systems represent important assets.

With respect to their constantly changing and evolving environment they must react flexible to incorporate user requirements. Design for change and agile development are no panacea without appropriate feedback about the created instances of the solution space. As a consequence, the check for anomalies in a system's evolution must be an integral part of the overall live-cycle process. Software evolution analysis offers an opportunity to establish a feedback loop for the assessment of the structural stability of a software system.

A methodology is required to systematically identify critical entities in a system's evolution with respect to their structural dependencies and to point out their shortcomings. This information represents the feedback about and enables the validation of past design decisions.

To solve the problem of information extraction and feedback generation we focus on the large amount of historical data which are automatically recorded by the various supporting tools such as version control or problem reporting systems. The primary research goals which arise are therefore:

(G1) an efficient storage model and support tools which enable the accommodation of the historical and structural changes for fast and efficient analysis; (G2) a fast and efficient method to detect structural anomalies from release history and problem report information; and (G3) a method for feedback generation about critical entities and dependencies to improve the understanding about changes and their effects.

Central element of all analyses is a release history database which accommodates all data gathered about a system. We propose EvoGraph, an approach for hot-spot and change pattern detection in the evolution of large-scale software systems based on modification and problem reports, run-time data and source code changes. For the efficient use of our EvoGraph approach, we first apply feature analysis to obtain source file candidates for a detailed exploration. Based on the obtained file-set, a dependency graph is generated from the historical and structural information in the database. Next, the graph is used to reveal non-obvious structural dependencies, which is achieved via minimizing the distance between related nodes and maximizing the distance between unrelated nodes. Finally, a subsequent source change analysis phase provides detailed information about the system's evolution with respect to structural changes.

Result of the approach are qualified subsets of the pre-selected source artifacts with their respective structural dependencies, which can be conceived as the evolutionary echo of the as-implemented architecture. Structural changes are also quantifiable which facilitates their assessment on a fine-grained level such as method or variable. Moreover, visualizations provide feedback to draw further conclusions about identified change patterns and re-engineering intervals.

EvoGraph represents a flexible, lightweight, and sufficient approach to assess the structural stability of large software systems. Our case study with the Application Suite has shown its applicability and effectiveness in pointing out the major artifacts and their structural shortcomings. Results also indicate that long-lived software systems provide historical data in sufficient quality and quantity to efficiently identify and point out structural and evolutionary anomalies. With respect to our case study we were able to identify God-classes in the structural dimension and different anti-patterns in the evolutionary dimension which are indicators for structural instabilities causing complex and costly source code changes.