Was gibt's zu sehen?

Werkzeuge für Überdeckungsmessung
(und für Datenflusstests):
Überdeckungsmessung:
clover/JUnit, gcov/lcov
Datenflusstest:
valgrind
Bassem Helal und Stefan König
Was gibt’s zu sehen?
z
Allgemeines zu Überdeckungsmessung:
–
–
–
z
z
z
z
z
z
z
z
Einführung: Was ist Code Coverage (Code-Überdeckung)?
Anwendungen: Wofür ist es geeignet und wofür nicht?
Metriken: Was kann alles gemessen werden?
Vorstellung/Vorführung: clover/JUnit
Beispiel: clover mit ant
Kriterien für die Tool-Auswahl
Vorstellung: gcov/lcov
Tool für Datenflusstests: valgrind
Vorführung: gcov/lcov und valgrind
Beide Werkzeugarten in Kombination
Zusammenfassung
Bassem Helal und Stefan König
1
Thematik des Testens
"Testen ist der Prozess, ein Programm mit der
Absicht auszuführen, Fehler zu finden."
Glenford J. Myers
Bassem Helal und Stefan König
Wozu Code Coverage?
• Testen einer kleinen Unit (z.B. einer Klasse) mit Hilfe von JUnit
• Die zu testende Funktionalität ist relativ begrenzt.
• Die Menge der zu erstellenden Tests bleibt überschaubar.
•
•
•
•
große Projekt mit vielen Entwicklern (z. B. mehr als 1000 Klassen)
Was ist bereits getestet worden und was nicht?
Fehlen noch Tests und für Welche Klassen?
Wer hat was getestet und wann?
Bassem Helal und Stefan König
2
Was kann Code Coverage (Test Coverage)?
z
z
z
z
z
z
z
Code Coverage ist eine Messtechnik
kann Hilfestellung bei großen Projekten
gibt Auskunft welcher Code nicht getestet wurde
bessere Sichtweise auf das Testdesign durch bestimmte Coverage
Metriken
Mittel zur Qualitätssteigerung von Tests.
Aus Managementsicht sind vor allem Fakten wichtig!
Code Coverage ermittelt das Verhältnis von getestetem
Programmcode zum Gesamtquellcode
Bassem Helal und Stefan König
Was kann Code Coverage nicht?
Keine Aussage über:
• die Korrektheit der Tests
• die Vollständigkeit des Programmcodes
• die Erfüllung von Anforderungen
Im Vergleich zum Funktionaltest, erscheint das
strukturierte Testen qualitativ unterlegen
Bassem Helal und Stefan König
3
Code Coverage Metriken
Was gibt es für Coverage Typen?
- Line Coverage
- Branche Coverage
- Decision Coverage
Bassem Helal und Stefan König
Code Coverage Metriken
Decision Coverage (Bedingungsüberdeckung )
ƒ
ƒ
ƒ
Eine erweiterte Sichtweise von Branch Coverage .
Ziel: Die Testfälle müssen nicht nur jede Kante durchlaufen, sondern
auch jede Bedingung in allen möglichen Kombinationen durchspielen.
Somit werden bei einer 100%igen decision Coverage alle möglichen
Testes für einen bestimmten Kontrollflussgraphen verlangt.
Bassem Helal und Stefan König
4
Code Coverage Metriken
Beispiel für Decision Coverage (Bedingungsüberdeckung )
If (value > 0 && con1)
1) 10 , true
2) 10 , false
3) -10 , true
4) -10 , flase
100% Decision Coverage
Bassem Helal und Stefan König
Clover
9 ist kein OpenSource Projekt
9 von der Firma Cortex, pro Lizenz 250 bis 2500 Euro
wurde für die Arbeit mit JUnit entwickelt ( IntelliJ IDEA, Eclipse,
JBuilder und .net Plug-in)
9 Clover basiert auf dem theoretischen Ansatz von Branch Coverage.
9 hat einen eigenen Compiler
9 erst nach dem Ausführen von Tests startet der Clover Compiler
9Ergebnisse werden in verschiedenen Formaten (HTML, GUI, XML,
PDF…) exportiert
9Clover unterstützt OpenSource Entwicklung !
Bassem Helal und Stefan König
5
Clover
Adaptis, Inc.
Adobe Systems
Bang Networks
British Telecomc
Brute Squad Labs
Cysive, Inc.
Daimler Chrysler
Deutsche Bank AG
E*TRADE Financial
eBay Inc
Fidelity Investments
Fujitsu
Hitachi Storage
Software
IBM
ID Analytics, Inc.
IONA Technologies
Jive Software
MediaOcean
Mitsubishi Electric
Oracle Corp
Presedia, Inc
Sabre Inc
SeeBeyond
SmartOps Corporation
Spoke Software
Symantec
ThoughtWorks, Inc
Ubiquity Software Corp
Vignette Corporation
Bassem Helal und Stefan König
Clover Beispiel 1
1) Code compilieren
2) Test Ausführen
3) Clover Starten
Bassem Helal und Stefan König
6
Bassem Helal und Stefan König
Bassem Helal und Stefan König
7
Bassem Helal und Stefan König
Bassem Helal und Stefan König
8
Bassem Helal und Stefan König
Bassem Helal und Stefan König
9
Clover Beispiel 2
Betrachten von der Entwicklung von Ant innerhalb der
letzten zwei Jahren.
Bassem Helal und Stefan König
Kriterien für die Auswahl
z
z
Kosten
Nutzbarkeit:
–
–
–
–
für verschiedenste Projekt einsetzbar?
Einarbeitungszeit?
nötiger Arbeitsaufwand?
brauchbare Ergebnisse?
Bassem Helal und Stefan König
10
Coverage-Tool: gcov
z
z
z
z
z
zur Messung von Zweigüberdeckung
GPL Lizenz
erneute Kompilierung notwendig (möglichst
ohne Compiler-Optimierungen)
protokolliert Benutzung von Programmzeilen
während der Laufzeit des Programms
erzeugtes Ergebnis recht unübersichtlich…
Bassem Helal und Stefan König
Coverage-Tool: lcov
z
z
z
zur besseren Visualisierung von gcov-Protokolldaten
LGPL Lizenz
Gibt verschiedene Übersichten zur Überdeckung als
HTML-Dokumente aus:
–
–
Übersicht für alle Module
Details für jedes Modul (Quelltexte mit farblicher Markierung
der (un)überdeckten Teile – dadurch schnelles auffinden
von nicht abgedecktem Code und somit schnelleres und
effizienteres –aber manuelles- erweitern der Testdaten
möglich)
Bassem Helal und Stefan König
11
cov/lcov: Wertung
z
Positiv:
–
–
z
kostenlose Tools (GPL/LGPL)
Kurze Einarbeitungszeit
Negativ:
–
zusätzliches Tool (lcov) für eine übersichtlichere
Visualisierung der Ergebnisse notwendig
Bassem Helal und Stefan König
Tool Datenflusstest: valgrind
z
z
z
z
z
z
Einsatz nur auf x86-Linux möglich (!)
Kein erneutes Kompilieren nötig (Debug-Informationen sollten
aktiviert sein)
Programm läuft in Virtual Machine (10-30x langsamer)
Whitebox- und Blackbox-Tests möglich
Findet normalerweise schwer auffindbare oder meist unbemerkte
Bugs sehr schnell und zeigt die wirkliche(!) Stelle des Fehlers im
Quellcode an
Verwendung (z.B.): KDE, OpenOffice, Konquerer, QT, GNOME,
Mozilla, Opera, Yahoo! Messenger, MySQL, PostgreSQL, NASA
Mars Exploration Rover, Perl, PHP, Ogg Vorbis, Samba, Battlefield
1942, Crystal Space, …
Bassem Helal und Stefan König
12
Tool Datenflusstest: valgrind
z
Valgrind findet unter anderem folgende Fehler:
–
–
–
–
–
–
–
–
–
Lesezugriffe auf uninitialisierten Speicher
Zugriffe auf bereits freigegebenen Speicher
Zugriffe außerhalb Grenzen des angeforderten Speichers
Lesen/Schreiben über Stack-Grenzen hinaus
Speicherlöcher (verlorene Zeiger auf angeforderte
Speicherbereiche)
Übergabe uninitialisierter oder nicht adressierbarer
Speicherbereiche an Systemaufrufe
Überlappung von src- und dst-Speicherbereich bei memcpy()
Einige Fehler bei der Verwendung der POSIX-pthreads-API
Quellcode an
Bassem Helal und Stefan König
Valgrind: Wertung
z
Positiv:
-
z
Kostenlos
Sehr wenig zusätzlicher Aufwand
Whitebox- und Blackbox-Test möglich
Findet sehr viele, normalerweise schwer zu findende Fehler
Interaktive Tests (während der Benutzung) möglich
Negativ:
–
–
Nur für x86-Linux
Programmausführung langsamer
Bassem Helal und Stefan König
13
Funktionsweise/Vorführung
Bassem Helal und Stefan König
Kombination der Tools
z
z
gcov+lcov sichern ab, dass alle Teile eines Systems
wenigstens Teilweise getestet wurden, d.h.: prüft der
Güte der Testfälle und trägt der sinnvollen
Erweiterung dieser bei
valgrind findet die wirklichen Programmzeilen in
denen Fehler passieren, wenn auch nicht die direkte
Fehlerursache - ist jedoch auch bei komplexen
Anwendung dann meist sehr einfach, da der
Komplette Aufrufstack incl. übergebener Parameter
ausgegeben wird.
Bassem Helal und Stefan König
14
Zusammenfassung
z
z
z
z
z
clover ist als kommerzielles Produkt umfangreicher
und vor allem bedienerfreundlicher
lcov/gcov sind dafür kostenlos
Arbeitsaufwand für die Testfallerstellung sinkt bei
Einsatz von lcov+gcov enorm
Verwendung von valgrind hat an sich keinen
Mehraufwand – und findet dabei sehr viele Fehler,
jedoch langsamere Ausführung
Überdeckungs- und Datenfluss-Tests lassen sich
prima kombinieren
Bassem Helal und Stefan König
Fragen?
Bassem Helal und Stefan König
15