Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Statische Analysetools - ein Überblick

Ähnliche Präsentationen


Präsentation zum Thema: "Statische Analysetools - ein Überblick"—  Präsentation transkript:

1 Statische Analysetools - ein Überblick
Wolfram Heinz Übung Testen von Software SoSe 2006

2 Programm Tester - ein Überblick
Inhaltsübersicht Einführung Lint/Splint Jlint Checkstyle Demo Fazit Programm Tester - ein Überblick

3 Programm Tester - ein Überblick
Einführung (1) Analysetools: Lint/Splint 3.1.1 Jlint 2.3 Checkstyle 4.1 Statischer Test: Semantische Überprüfung von Quellcode eines Programms auf Fehler Programm selbst wird nicht ausgeführt Programm Tester - ein Überblick

4 Einführung (2) Lint/Splint Jlint Checkstyle Zielsprache(n) Zielsysteme
Java (C, C++, Objective C) Java Zielsysteme Windows, Linux, Solaris, Free BSD alle gängigen Lizenzstatus frei verfügbar nach GPL/LGPL Herkunft, Entwickler Universität Virginia, David Evans Konstantin Knizhnik, Cyrille Artho Oliver Burn Typ Konsolenanwendung Konsole + ANT-Task Programm Tester - ein Überblick

5 Programm Tester - ein Überblick
Lint/Splint (1) Ende der 70er: Lint Entwicklung als Vorläufer von Splint durch S.C. Johnson erstes Tool zur statischen Überprüfung von C-Programmen seit 2003: Splint zusätzliche und stärkere Prüfoptionen Schwerpunkt der Überprüfung liegt auf Sicherheitsanfälligkeiten und Fehler bei der Codierung (Secure Programming Lint) Nutzung von speziellen Kommentaren (annotations) Programm Tester - ein Überblick

6 Programm Tester - ein Überblick
Lint/Splint (2) 4 Prüfstufen standard checks weak strict Programm Tester - ein Überblick

7 Lint/Splint (3) - Fehlertypen
nicht benutzte Bezeichner Typinkonsistenzen Zugriff auf Variablen oder Funktionen ohne vorherige Definition unerreichbarer Code ignorierte return-Werte Ausführungspfade ohne return Endlosschleifen wie Lint, jedoch zusätzlich: Dereferenzierung eines möglichen Nullzeigers Fehler im Speichermanagement Makroimplementierungen bzw. -aufrufe Puffer-Überlauf Programm Tester - ein Überblick

8 Programm Tester - ein Überblick
Lint/Splint (4) Programm Tester - ein Überblick

9 Programm Tester - ein Überblick
Lint/Splint (5) Vorteile: Programm/Projekt insgesamt analysiert Keine Compilierung des Quellcodes nötig Aussagekräftigere Fehlermeldungen + Lösungsvorschläge Nachteile: C++ nicht unterstützt Bestimmte Fehlertypen nicht erkannt Bsp.: int a = 14l; int b = 020; int c; c=a/b; Bsp.: int a = 14; int b = 16; int c; c=a/b; Programm Tester - ein Überblick

10 Programm Tester - ein Überblick
Jlint (1) 2 Komponenten: Jlint und AntiC AntiC Basis-Syntaxchecker für alle Sprachen der C-Familie und Java Scanner + Top-Down-Parser zur Erkennung von einfachen Fehlertypen und einigen Syntax-Fehlern Jlint überprüft Semantik des Quellcodes (nur für Java-Programme) Ausführung lokaler und globaler Datenflussanalysen Erkennung von Blockaden und Laufzeitproblemen Steuerung über Flags Fehlerbericht + History-Funktion Programm Tester - ein Überblick

11 Programm Tester - ein Überblick
Jlint (2) - Fehlertypen AntiC Jlint Fehlerhafte Zeichenketten long l = 0x111111l; printf("\x"); Operatorprioritäten if (x = y) x || y && z Fehler in Anweisungsblöcken if (rc != 0) if (perr) *perr = rc; else return Ok; Synchronisation nicht deterministisch/reproduzierbar z.B. bei Client/Server-Anwendungen Vererbung falsch zugeordnete Methoden- profile, verdeckte Komponenten z.B. gleiche Methodennamen in innerer und äußerer Klasse Datenfluss Programm Tester - ein Überblick

12 Programm Tester - ein Überblick
Jlint (3) - Fehlertypen Beispiele: Synchronisation: Kategorie Blockierung Vererbung: Kategorie Variablenverdeckung Datenfluss: Kategorie Puffer-Überlauf public void foo() synchronized (a) synchronized (b) public void bar() class A public int a; public void f(int a) this.a = a; // verursacht keine Fehlermeldung public int g(int a) return a; // Meldung: shadow_local public long multiply(int a, int b) return a*b; // Multiplikation 2er Integer-Operanden, // Konvertierung des Ergebnisses in Datentyp long Programm Tester - ein Überblick

13 Programm Tester - ein Überblick
Jlint (4) Vorteile: schnelle Überprüfung des Quellcodes auf ca. 50 verschiedene Fehler einfaches Hinzu- oder Abschalten von Optionen zur Fehlerberichterstattung (z.B: -all +synchronisation) geringer Ressourcenverbrauch Nachteile: Compilierung des zu prüfenden Quellcodes notwendig JDK oder vergleichbare Entwicklungsumgebung muss installiert sein Programm Tester - ein Überblick

14 Programm Tester - ein Überblick
Checkstyle (1) Unterstützt den Programmierer bei der Einhaltung von Coding Conventions umfangreiche Konfigurationsmöglichkeiten über XML-Datei Festlegung der durchzuführenden Checks (Module) über modulspezifische Eigenschaften (Properties) erfolgt Ausgabesteuerung Plugin für Entwicklungsumgebungen (z.B. Eclipse, JEdit, Emacs JDE, Borland JBuilder, …) Programm Tester - ein Überblick

15 Programm Tester - ein Überblick
Checkstyle (2) Aufruf über Konsole: java -D<property>=<value> \ com.puppycrawl.tools.checkstyle.Main \ -c <configurationFile> Prüfmodule [-n <packageNameFile>] \ Paketname [-f <format>] Ausgabeformat: XML/Plain [-p <propertiesFile>] spezielle Eigenschaften [-o <file>] \ Pfad der Ausgabedatei [-r <dir>] Dateisuche in Verzeichnis file java com.puppycrawl.tools.checkstyle.Main -c docs/sun_checks.xml \ -f xml -o build/checkstyle_errors.xml Check.java oder java -jar checkstyle-all-4.1.jar \ -c docs/sun_checks.xml Check.java Programm Tester - ein Überblick

16 Programm Tester - ein Überblick
Checkstyle (3) Aufruf als ANT-Task: ANT  Another Neat Tool plattformunabhängig Tool zur automatisierten Generierung von Programmen aus vorhandenem Quellcode Steuerung durch XML-Datei (Build-Datei) Programm Tester - ein Überblick

17 Checkstyle (4) - Fehlertypen
Standard Checks: keine zusätzlichen Bibliotheken nötig Javadoc Comments Naming Conventions Headers Coding, Class Design Optionale Checks (J2EE): Entity Bean Session Bean <module name="FinalClass"/> <module name="JavadocType"> <property name="authorFormat" value="\S"/> </module> <module name="j2ee.EntityBean"> <property name= "persistence" value="container"/> </module> Programm Tester - ein Überblick

18 Programm Tester - ein Überblick
Checkstyle (5) Vorteile: einfache und schnelle Prüfung auf Einhaltung von Stilrichtlinien Möglichkeit, eigene „Checks“ zu definieren Ausgabe des Fehlerreports als Text oder XML-Datei Fehlerreport unter ANT: Übermittlung via möglich Ausgabe als HTML unter Nutzung von Stylesheet-Info‘s (XSLT) Nachteile: grundlegende XML-Kenntnisse erforderlich Browser muss über XML-Parser verfügen Programm Tester - ein Überblick

19 Programm Tester - ein Überblick
Fazit Tools insgesamt mächtiger als Standard-Compiler frühzeitige Erkennung von Fehlern möglich Qualitätskontrolle geringere Entwicklungskosten Grenzen statischer Analysetools: Programmtest mit bestimmter Variablenbelegung nicht möglich Test auf Fehler, die erst zur Laufzeit auftreten nicht durchführbar Programm Tester - ein Überblick

20 Vielen Dank für Ihre Aufmerksamkeit !


Herunterladen ppt "Statische Analysetools - ein Überblick"

Ähnliche Präsentationen


Google-Anzeigen