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
© Copyright 2024 ExpyDoc