Sie sind auf Seite 1von 34

Werkzeuge zur Code-Analyse

Thomas Gängler
Proseminar: Software-Qualität

Werkzeuge
zur
Code-Analyse
Werkzeuge zur Code-Analyse
Thomas Gängler
Übersicht Proseminar: Software-Qualität

# Werkzeugtypen
> Dynamische Testwerkzeuge
> Statische Analysewerkzeuge
> Formale Verifikationswerkzeuge
> Modellierende und analysierende Werkzeuge
# Analysewerkzeuge
> Aufbau/ Technik/ Beispiele/ Demo
# Portale
> Aufbau/ Beispiele
# Zusammenfassung

01 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Werkzeugtypen Proseminar: Software-Qualität

# Dynamische Testwerkzeuge
> Strukturorientierte Testwerkzeuge
> Funktiosorientierte Testwerkzeuge
> Regressionstestwerkzeuge
> Leistungs- und Stresstestwerkzeuge

02 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Dynamische Testwerkzeuge Proseminar: Software-Qualität

# Strukturorientierte Testwerkzeuge (1)


> Informationen über den Stand der Prüfung
> Testüberdeckungsprotokoll
> Bsp.: Zweigüberdeckungstest-Werkzeuge
> Darstellungsformen:
> Kontrollflussgraph
> Strukturdiagramm
> Quellcode in aufbereiteter Form

03 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Dynamische Testwerkzeuge Proseminar: Software-Qualität

# Strukturorientierte Testwerkzeuge (2)


> Oft programmiersprachen-abhängig
> Instrumentierend:
> Syntaxanalyse mit Anweisungsanreicherung
> Nicht-instrumentierend:
> Abgreifen genutzter Adressen über
Hardware-Schnittstelle

04 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Dynamische Testwerkzeuge Proseminar: Software-Qualität

# Beispiele
> Eclipse Test and Performance Tools Platform (TPTP)

[1]

05 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Dynamische Testwerkzeuge Proseminar: Software-Qualität

# Funktionsorientiere Testwerkzeuge
> Für Testfallerzeugung/ -planung nach Testtechniken
> Bsp.: funktionale Äquivalenzklassenbildung
> Definition von Testdaten/ Testergebnissen
>> Testautomatisierung
> Bsp.: Zusicherungswerkzeuge
> Feste Syntax
> Fehlermeldung bei Zusicherungsverletzung
> Oft programmiersprachen-unabhängig
> Zur Komforterhöhung/ Dokumentation der Testplanung

06 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Dynamische Testwerkzeuge Proseminar: Software-Qualität

# Regressionstestwerkzeuge
> Zur Automatisierung der Testdurchführung
> Einspielen/ Aufzeichnung der Testdaten/ -ergebnisse
>> Vergleich möglich
> Nach Fehlerkorrekturen und Funktionserweiterungen
>> Nur Automatisierung bei Testwiederholung technisch
und wirtschaftlich sinnvoll
> i.A. programmiersprachen-unabhängig
> Überprüfung grafischer Oberflächen möglich

07 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Dynamische Testwerkzeuge Proseminar: Software-Qualität

# Leistungs- und Stresswerkzeuge


> Für Leistungs- und Stresstests
> Leistungstest: Testen im Normalbereich an der Grenze
zur Überlast
> Stresstest: Betrieb bei Überlast
> Lastenerzeugung erforderlich
> Oft nur werkzeugunterstützt erforderlich
> Oft in Regressionstestwerkzeuge intergriert
> Enthalten Messfunktionen für Registrierung von
Antwortzeitverhalten und Ressourcenauslastung

08 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Werkzeugtypen Proseminar: Software-Qualität

# Statische Analysewerkzeuge
> Messwerkzeuge
> Stilanalysatoren
> Werkzeuge zur Erzeugung von Grafiken und Tabellen
> Slicing-Werkzeuge
> Datenflussanomalieanalyse-Werkzeuge

09 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Statische Analysewerkzeuge Proseminar: Software-Qualität

# Messwerkzeuge
> Zur Informationsgewinnung und -darstellung mittels
statischer Analyse
>> Quellcodeanalyse mit Merkmalsregistrierung
> i.d.R. programmiersprachen-spezifisch
> Verbreitete Maße:
> Zyklomatische Zahl
> Halstead-Maße
> Maße zur Datenkomplexität
> Lines of Code
> Maße müssen präzise definiert sein

10 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Statische Analysewerkzeuge Proseminar: Software-Qualität

# Stilanalysatoren
> Codeanalyse nach Verletzungen von Programmierregeln
> Beispiele:
> Einschränkungen der zu verwendenden
programmiersprachlichen Konstrukte
> Definition zusätzlicher Forderungen
> Voraussetzung für bestimmte Programmiersprachen und
bestimmte Anwendungsgebiete

11 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Statische Analysewerkzeuge Proseminar: Software-Qualität

# Werkzeuge zur Erzeugung von Tabellen und Grafiken


> i.A. Bestandteil von Werkzeugumgebungen
> Zur Erzeugung von:
> Kontrollfluss- und Aufrufgraphen
> Variablen-Cross-Reference-Tabellen

12 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Statische Analysewerkzeuge Proseminar: Software-Qualität

# Slicing-Werkzeuge
> Allgemein: zum Vereinfachen von Programmen
>> Betrachten eines semantischen Aspekts
> Speziell: zur Unterstützung der Fehlersuche nach
Erkennen eines Fehlverhaltens
>> Betrachten der Variablen und deren Zusammenhänge

13 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Statische Analysewerkzeuge Proseminar: Software-Qualität

# Datenflussanomalieanlysatoren
> Oft in Compiler integriert
> Geringer Aufwand bei der Erkennung
> Automatisierbar
> Bieten sichere und verlässliche Ergebnisse

14 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Werkzeugtypen Proseminar: Software-Qualität

# Formale Verifikationswerkzeuge
> Allgemein: Überprüfung der Konsistenz zwischen
Spezifikation und Realisierung mittels mathematischer
Mittel
> Speziell: symbolic model checking und symbolisches
Testen als Grundlage für erweiterte statische Analyse

15 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Werkzeugtypen Proseminar: Software-Qualität

# Modellierende und analysierende Werkzeuge


> Anwendungsbereiche:
> Risikoanalyse
> Sicherheitsanalyse
> Zuverlässigkeitsanalyse
> Verfügbarkeitsanalyse
> Oft programmiersprachen-unabhängig
> FMECA-, Fehlerbaumanalyse-, Markov-, HAZOP-
Werkzeuge, ...

16 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Analysewerkzeuge Proseminar: Software-Qualität

# Grundstruktur

[2]

17 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Analysewerkzeuge Proseminar: Software-Qualität

# Technik
> Ausnutzung von model checking Technologien und
Abstraktion:
> Symbolische Eingabe
> Abstrakte Werte
> Erhöht die Pfadabdeckung

18 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Analysewerkzeuge Proseminar: Software-Qualität

# Pfadabdeckung
> Generell: keine 100%ige Pfadabdeckung möglich
> Problem: Anzahl der Pfade bei Schleifen und Rekursion

[3]

> Modellierung von multithreading


> false positives/ false negatives
> keine Erkennung logischer Fehler

19 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Analysewerkzeuge Proseminar: Software-Qualität

# Fehlermuster/- klassen:
> Verschiedene Ansätze/ Kategorisierung
> Teilweise programmiersprachen-spezifisch
> Beispiele:
> unvorhersehbare/ kritische Fehler
> Speicher-Allokierungs-Fehler
> Thread-Konkurrenz-Fehler
> Inkonsistenzen/ Redundanzen
> Eigene Fehlermuster/- klassen

20 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Analysewerkzeuge Proseminar: Software-Qualität

# Beispiele
> FindBugs

21 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Analysewerkzeuge Proseminar: Software-Qualität

# Beispiele
> SemmleCode

[4]

22 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Portale Proseminar: Software-Qualität

# Vereinigung mehrerer Werkzeuge zur Qualitätsanalyse


# Angepasste Ausgabe für verschiedene Rollen

[2]

23 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Portale Proseminar: Software-Qualität

# Oft Verwaltung über Webserver

[2]

24 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Portale Proseminar: Software-Qualität

# Beispiele
> GrammaTech CodeSonar

[3]

25 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Portale Proseminar: Software-Qualität

# Beispiele
> Coverity Prevent / Thread Analyzer

[5]

26 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Portale Proseminar: Software-Qualität

# Weitere Beispiele:
> CAST Application Intelligence Platform
> Klocwork Insight
> Client/Server-Werkzeuge von PolySpace

27 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Zusammenfassung Proseminar: Software-Qualität

# Vielzahl von Test- und Analysewerkzeugen


# Oft mehrere Funktionalitäten vereint
# Gute Verfügbarkeit auch im Open-Source-Bereich
# Statische Analyse-Werkzeuge:
... sind ein gute Ergänzung zu dynamischen Testwerkzeugen
... ersetzen diesen nicht
... helfen echte Fehler zu finden
... reduzieren Kosten
... sparen Zeit

28 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Proseminar: Software-Qualität

Danke
für Ihre
Aufmerksamkeit
Werkzeuge zur Code-Analyse
Thomas Gängler
Bilderverzeichnis Proseminar: Software-Qualität

[1] Unknown. Eclipse Test and Performance Tools Platform


[TPTP] Project, June 2005. datasheet.
[2] F. Simon, O. Seng, and T. Mohaupt.
Code-Quality-Management. dpunkt.verlag, 2006.
[3] M. Zarins. Overview of GrammaTech Static-Analysis
Technology. Technical report, GrammaTech, Inc., 2008.
[4] E. Hajiyev. .QL: Object-Oriented Queries Made Easy, July
2007. PowerPoint presentation.
[5] http://www.coverity.com/html_pop/thread_analyzer.html

29 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Referenzen Proseminar: Software-Qualität

# P. Anderson. Detecting Bugs in Saftey-Critical Code. Dr. Dobb’s Journal, March 2008.
# O. de Moor, M. Verbaere, E. Hajiyev, P. Avgustinov, T. Ekman, N. Ongkingco, D. Sereni, and J.
Tibble. Keynote address: .QL for Source Code Analysis. Technical report, Semmle Limited,
2007.
# V. Garg, S. Lao, X. Shen, G.-S. Wang, B. Wilson, and P. Zhao. Analysis Tool Evaluation:
GrammaTech CodeSonar. Technical report, Carnegie Mellon University, 2007.
# C. Grindsta. FindBugs, Part 1: Improve the Quality of Your Code [online]. May 2004. Available
from: http://www.ibm.com/developerworks/java/library/j-ndbug1/.
# E. Hajiyev. .QL: Object-Oriented Queries Made Easy, July 2007. PowerPoint presentation.
# M. Harman and R. M. Hierons. An Overview of Program Slicing [online]. Available from:
http://www.dcs.kcl.ac.uk/sta/mark/sf.html.
# D. Hovemeyer and W. Pugh. Finding Bugs is Easy. Technical report, Dept. of Computer
Science, University of Maryland, 2004.
# P. Liggesmeyer. Software-Qualität: Testen, Analysieren und Verizieren von Software.
Spektrum, Akademischer Verlag, 2002.
# F. Simon, O. Seng, and T. Mohaupt. Code-Quality-Management. dpunkt.verlag, 2006.
# Unknown. Coverity Thread Analyzer for Java. Data sheet. Coverity, Inc., 2008.
# Unknown. Prevent for Java. Data sheet. Coverity, Inc., 2008.
# Unknown. Prevent SQS C/C++. Data sheet. Coverity, Inc., 2008.
# Unknown. Eclipse Test and Performance Tools Platform [TPTP] Project. Data sheet. Eclipse.
June 2005.
# M. Zarins. Overview of GrammaTech Static-Analysis Technology. Technical report,
GrammaTech, Inc., 2008.

30 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Vorgestellte Werkzeuge Proseminar: Software-Qualität

# Unknown. TPTP Home [online]. Available from:


http://www.eclipse.org/tptp/.
# O. Burn. Checkstyle Home [online]. Available from:
http://checkstyle.sourceforge.net/.
# F. Sauer. Metrics Home [online]. Available from:
http://metrics.sourceforge.net/.
# Unknown. FindBugs Home [online]. 2008. Available from:
http://findbugs.sourceforge.net/.
# Unknown. Semmle Home [online]. 2008. Available from:
http://semmle.com/.
# Unknown. GrammaTech Home [online]. 2007. Available from:
http://www.grammatech.com/index.html.
# Unknown. Coverity Home [online]. 2008. Available from:
http://www.coverity.com/.

31 / 28
Werkzeuge zur Code-Analyse
Thomas Gängler
Genannte Werkzeuge Proseminar: Software-Qualität

# Unknown. CAST Home [online]. Available from:


http://www.castsoftware.com/Default.aspx.
# Unknown. Klocwork Home [online]. 2008. Available from:
http://www.klocwork.com/default.asp.
# MathWorks PolySpace Home [online]. Available from:
http://www.mathworks.com/.

32 / 28