21. Juni 2006 ... Demonstration: PMD. • PMD ist ein statisches Code Analysewerkzeug für Java ...
[ Bloch02: Joshua Bloch, Effektiv Java programmieren, 2002 ] ...
Werkzeuggestützte Softwareprüfungen Statische Analyse und Metriken Dennis Hardt 21.06.2006
Gliederung • Statische Analyse – Definition, Arbeitsweise, Werkzeuge – Angewandt auf ein Projekt – Statische Analyse selbst gemacht
• Metriken – Definition – Codemetriken, Werkzeuge
• Zusammenfassung
Dennis Hardt: Statische Analyse und Metriken
2
Statische Analyse - Definition • Analyse eines Prüflings mit dem Ziel Mängel zu finden und automatisch durchführbar zu sein. • Der zu analysierende Prüfling muss einer formal definierten Struktur genügen. • Die Analyse ist statisch, weil das analysierte Programm nicht ausgeführt wird. Der Prüfling ist eine Beschreibung des Programms.
Dennis Hardt: Statische Analyse und Metriken
3
Arbeitsweise von statischer Analyse (I) Programm
Prüfling
Prüfungsaspekt
Statisches Analysewerkzeug
Fehler gefunden? Welchen? Wo, wie?
Kein Fehler gefunden!
Dennis Hardt: Statische Analyse und Metriken
4
Arbeitsweise von statischer Analyse (II) Programm
Kripke-Struktur
Temporale Logik
Model Checker
Fehler gefunden! Gegenbeispiel
Anforderungen erfüllt
Dennis Hardt: Statische Analyse und Metriken
5
Statische und dynamische Analyse Statische Analyse
Dynamische Analyse
Analyse ohne Ausführung des Programms
Analyse durch Ausführung des Programms
Beispiele: • Model Checking • Code Analyse
Beispiele: • Testen
Was ist keine statische Analyse: • Reviews, Walkthroughs
Heute: statische Code Analyse Dennis Hardt: Statische Analyse und Metriken
6
Statische Analyse Tools für Java (I) Prüfungsaspekte
Demonstration: PMD • PMD ist ein statisches Code Analysewerkzeug für Java • Open Source, zu finden unter http://pmd.sourceforge.net • Enthält Regeln („Rules“) zu verschiedenen Kategorien, z.B. – – – –
Coupling (Beziehungen zwischen Objekten) Design Unused Code …
Dennis Hardt: Statische Analyse und Metriken
9
Das XP-Labor Projekt 2006 UseCaseEditor UseCase Nr. 1
Überweisung tätigen
Umfeld Ebene
Speichern
Aufgabe
Laden
Hauptakteur
.
.
.
.
.
.
RTF Export
M
C
V
Statistiken, Warnungen
Dennis Hardt: Statische Analyse und Metriken
10
Das XP-Labor Projekt 2006 unter der Lupe Analyse des Projekts anhand drei ausgewählter PMD-Regeln: 1. „Ignorieren Sie keine Ausnahmen“ [Bloch02] • PMD-Rule: EmptyCatchBlock
2. „Referenzieren Sie Objekte über ihre Interfaces“ [Bloch02] • PMD-Rule: LooseCoupling
3. Klassen, die nur aus statischen Methoden bestehen, sollten als Singleton implementiert werden • PMD-Rule: UseSingleton
[ Bloch02: Joshua Bloch, Effektiv Java programmieren, 2002 ] Dennis Hardt: Statische Analyse und Metriken
11
PMD – Kritische Würdigung • PMD-Regeln finden den repräsentierten Mangel nicht immer vollständig – Beschreibung genau lesen und Regel kennen – Gegebenfalls eigene Regeln schreiben oder erweitern
• Liefert bei allen aktivierten Regeln sehr viele Mängel – Schrittweise aktivieren – Sinnvoll auswählen
• Aber: Die Analyse ist einfach durchzuführen und schnell
Dennis Hardt: Statische Analyse und Metriken
12
Eigene PMD-Regeln schreiben Code
Abstract Syntax Tree (vereinfacht) ClassDeclaration
class IndexExample { void maxIndex(Index i) { while(i.isValid()) i.increment(); } } Was dieser Code leistet sei nicht von Interesse, weil wir ihn nur statisch analysieren wollen!
MethodDeclaration
WhileStatement
Expression
…
Statement
In PMD: XPath Anfrage an den AST stellen Dennis Hardt: Statische Analyse und Metriken
13
Qualitätsaspekte (Auswahl) Funktionalität
Effizienz Usability Verständlichkeit
Qualität Wartbarkeit Korrektheit
Veränderbarkeit Portabilität
Sicherheit … Frage: Lässt sich Qualität messen? Dennis Hardt: Statische Analyse und Metriken
14
Metrik - Definition
„Eine Softwarequalitätsmetrik ist eine Funktion, die eine SoftwareEinheit in einen Zahlenwert abbildet. Dieser berechnete Wert ist interpretierbar als der Erfüllungsgrad einer Qualitätseigenschaft der Software-Einheit.“ (IEEE Standard 1061, 1992)
• Statische Code Analyse lässt sich als Messinstrument für Produktmetriken einsetzen – Für nahezu jede Programmiersprache sind entsprechende Werkzeuge vorhanden
Dennis Hardt: Statische Analyse und Metriken
15
Bekannte Codemetriken
Metrik Cyclomatic Complexity Methods per Class LOC per Method DIT