Seminar (Hauptstudium)
Seminar über Methoden Statischer Analyse zur Unterstützung der Software Evolution
Prof. Dr. Armin B. Cremers Dr. Günter Kniesel Daniel Speicher
Warum wächst der bereitgestellte Funktionsumfang von Softwaresystemen nicht exponentiell mit dem Entwicklungsaufwand? Wenn stets jede neue Komponente mit einem festen Anteil der bestehenden kombiniert werden könnte, müsste dies der Fall sein. Entwicklungssprünge sind zwar auch in Realität nicht ganz unüblich, aber das volle Maß möglicher Wiederverwendung wird bei weitem nicht erreicht. Neben der Herausforderung die durch die Größe eines Systems gegeben ist, findet sich die Ursache im Verfall des ursprünglichen Designs und der ungenügenden Nutzung der Modularisierungsmöglichkeiten.
In diesem Seminar werden wir uns mit Methoden und Werkzeuge zur statischen Analyse vertraut machen. Sie ermöglichen die Struktur der Software zu visualisieren, problematische Stellen zu identifizieren, gutes Design (wieder)herzustellen und durch automatisiertes Feedback dem Entwicklungsteam die Möglichkeit zu geben, den erreichten Standard zu halten. Kurzfristiges Feedback ist als wesentlicher Faktor des Erfolgs agiler Prozesse bekannt. Durch die Modularisierungsfähigkeiten aspektorientierter Sprachen erhalten die betrachteten Methoden eine besondere Aktualität. Hier geht es darum Funktionalität, die bisher über größere Teilsysteme verstreut implementiert werden musste, in ein einziges Modul zu extrahieren. Dies ist ohne Werkzeuge kaum möglich und setzt einen gut strukturierten Code voraus.
Die Palette der verwendeten Methoden ist reichhaltig:
- Einfaches Aufsuchen als fehlerträchtig bekannter textueller Muster (Reguläre Ausdrücke, XPath-Suche über XML-Darstellung des Codes)
- Berechnung von Metriken zur Bewertung der Prägnanz, Kohäsion, Kopplung und Komplexität des Codes. (In der Regel Kennzahlen von Teilgraphen des Graphen der durch die syntaktische Struktur des Codes unter Berücksichtigung der Referenzen gebildet wird.)
- Aufsuchen von Verdopplung im Code (Textueller Vergleich, Vergleich von Teilbäumen des Syntaxbaumes, Auffinden komplexer Strukturen durch formale Konzeptanalyse)
- Berechnung von Program Slices (Der Teil eines Programmes der den Wert einer Variable in einer bestimmten Zeile beeinflussen kann.)
- Analyse der durch das Typsystem definierten Einschränkungen.
- Analysen des Daten- und Kontrollflusses (Z.B. zur Identifikation möglicher NullPointerException)
Jeder Seminarvortrag schließt mit der exemplarischen Darstellungen einiger Analysen ab, für deren Implementierung uns das Werkzeug JTransformer eine
lingua franca
zur Verfügung stellt und so den Vergleich der vorgestellten Ansätze erleichtert. Die notwendigen praktischen Fertigkeiten vermitteln wir in einem eintägigen Tutorial in den ersten Wochen der Semesterferien.
|