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 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. 3
Arbeitsweise von statischer Analyse (I) Programm Prüfling Prüfungsaspekt Statisches Analysewerkzeug Fehler gefunden? Welchen? Wo, wie? Kein Fehler gefunden! 4
Arbeitsweise von statischer Analyse (II) Programm Kripke-Struktur Temporale Logik Model Checker Fehler gefunden! Gegenbeispiel Anforderungen erfüllt 5
Statische und dynamische Analyse Statische Analyse Analyse ohne Ausführung des Programms Dynamische Analyse Analyse durch Ausführung des Programms Beispiele: Model Checking Code Analyse Beispiele: Testen Was ist keine statische Analyse: Reviews, Walkthroughs Heute: statische Code Analyse 6
Statische Analyse Tools für Java (I) Prüfungsaspekte Lexikalische Analyse Syntaktische Analyse Andere: Nicht erreichbarer Code Nicht definierte Variablen Konkretes Werkzeug Java Compiler (javac) http://java.sun.com/ Alte Bekannte Warnungen : Codestil Unnötiger Code Eclipse http://www.eclipse.org 7
Statische Analyse Tools für Java (II) Prüfungsaspekte Codierrichtlinien Konkretes Werkzeug Checkstyle http://checkstyle.sourceforge.net/ Bug Patterns FindBugs http://findbugs.sourceforge.net/ Sicherheit Fortify Source Code Analysis http://fortifysoftware.com/ 8
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 9
Das XP-Labor Projekt 2006 UseCaseEditor UseCase Nr. 1 Umfeld Ebene Hauptakteur Überweisung tätigen Aufgabe Speichern Laden M...... RTF Export C V Statistiken, Warnungen 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 ] 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 12
Eigene PMD-Regeln schreiben Code Abstract Syntax Tree (vereinfacht) 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! ClassDeclaration MethodDeclaration WhileStatement Expression Statement In PMD: XPath Anfrage an den AST stellen 13
Qualitätsaspekte (Auswahl) Funktionalität Effizienz Usability Qualität Wartbarkeit Korrektheit Sicherheit Verständlichkeit Veränderbarkeit Portabilität Frage: Lässt sich Qualität messen? 14
Metrik - Definition Eine Softwarequalitätsmetrik ist eine Funktion, die eine Software- Einheit 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 15
Bekannte Codemetriken Metrik Max. (XP 06) Regel Cyclomatic Complexity Methods per Class 24 -- < 10 < 20 LOC per Method DIT 152 7 < 24 (bei C++) < 6 Interpretationshilfe, aber projektspezifisch! Regel nach [Stephen H. Kan, Metrics and Models in Software Quality Engineering, 2003] 16
Demonstration: Metrics Plugin für die Entwicklungsumgebung Eclipse Open Source, zu finden unter: http://metrics.sourceforge.net Misst automatisch über 20 Codemetriken 17
Umgang mit dem Metrics Eclipse-Plugin Welche Metriken brauche ich für mein Projekt? Ziel- und Projektorientierte Auswahl treffen Wird leider nicht direkt im Plugin unterstützt Was bedeutet eine Metrik? Was wird gemessen? Beschreibung der Metriken: http://metrics.sourceforge.net Wie interpretiere ich eine Metrik? Toleranzbereiche im Plugin als Hilfestellung nutzen und durch die Codenavigation den betroffenen Bereich schnell finden 18
Zusammenfassung Statische Analyse Gute Werkzeugunterstützung Einfach anzuwenden und schnell, selbst bei viel Code Aber: viele Regeln erzeugen auch sehr viele Informationen und auch nicht immer für ein Projekt sinnvolle Statische Analyse braucht gesunden Menschenverstand, der ihn einsetzt Metriken Nutzen bei Code statische Analyse zur Messung Sind gezielt auszuwählen und müssen interpretiert werden 19