Folien - Das Fachgebiet Software Engineering

8 downloads 578 Views 399KB Size Report
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

Konkretes Werkzeug

• Lexikalische Analyse • Syntaktische Analyse • Andere:

Java Compiler (javac) http://java.sun.com/

• Nicht erreichbarer Code • Nicht definierte Variablen •…

Alte Bekannte

„Warnungen“: • Codestil • Unnötiger Code •…

Eclipse http://www.eclipse.org

Dennis Hardt: Statische Analyse und Metriken

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/

Dennis Hardt: Statische Analyse und Metriken

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 …

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

Max. (XP ’06)

Regel

24

< 10

--

< 20

152

< 24 (bei C++)

7