Überdeckungsmessung von Java-Programmen TAV 20, 16.-17. Oktober 2003 method-park, Erlangen Mario Winter, Hans-Gerd Wefels FH Köln Überdeckungsmessung von Java-Programmen Dynamischer Test in der Praxis meist Black-box Test Testfälle in erster Linie aus Spezifikation abgeleitet Welche Elemente der Software wurden im dynamischen Test ausgeführt? C0 = Anweisungsüberdeckung C1 = Zweigüberdeckung C2 = (einfache) Bedingungsüberdeckung C3 = Pfadüberdeckung MC/DC = Minimale Mehrfach-Bedingungsüberdeckung (Modified Condition/Decision Coverage) Manuell nur schwer nachweisbar Idee: Programm um Checkpoints erweitern Zur Laufzeit melden Hier war ich Reihenfolge wichtig! Folie 2 TAV 20 16.Okt. 2003 1
Warnung! Die Aufgerufene Datei existiert ni ch t. Überdeckungsmessung von Java-Programmen Instrumentierung und Überdeckungsmessung Instrumentierung im Sourcecode Für fast alle Sprachen und Umgebungen möglich Instrumentierung im Bytecode Nicht alle Quellcodekonstrukte erkennbar Quellcode In Java zur Ladezeit möglich Instrumentierung im Laufzeitsystem Reflektion notwendig Umgebungsabhängig Instrumentierung bedeutet immer Compiler Performanzverfälschung! Instrumentierung Objektcode Laufendes Anwendungssystem Folie 3 Kommerzielle Werkzeuge JavaScope von SUN C0, C1, Ausnahmeüberdeckung, Bedingungsüberdeckung Methoden/Konstruktoren-Überdeckung Vertrieb und Entwicklung 1999 aus strategischen Gründen eingestellt McCluskey-Tools C0, C1, Methodenüberdeckung Clover von Cortex C0, C1, Methodenüberdeckung Unterstützt assert JCover von Man Machine Systems C0, C1, Methoden- und Klassenüberdeckung Borlands OptimizeIt Code Coverage C0, Methoden- und Klassenüberdeckung Code Coverage von Koalog Testers Edge GJ-Cover Folie 4 TAV 20 16.Okt. 2003 2
Open Source Werkzeuge Java Instrumentation Engine (JIE) von Eran Tromer C0, C1, Klassen- und Methodenüberdeckung Parser/Visitor Architektur Bis Java 1.2 Barat von B. Bokowski und A. Spiegel Parser für Java Programme Visitor-Architektur Beispiel: Methodenüberdeckung Hansel für JUnit C0, C2 Uni Bonn: Experimente mit Byte-Code Instrumentierung Instrumenting Class Loader Folie 5 Bedingungsüberdeckungs-Test Wahrheitswert: true, false Atomarer Ausdruck (Boolesche Variablen/Funktionen) isempty(); size > 0 Zusammengesetzter Ausdruck (Boolesche Ausdrücke) (size > 0) && (inobject!= void) Minimale Mehrfach-Bedingungsüberdeckung [Riedemann97]: Teste jede Kombination von Wahrheitswerten, bei denen die Änderung des Wahrheitswertes eines atomaren Ausdrucks den Wahrheitswert des zusammengesetzten Ausdrucks ändern kann! Modified Condition/Decision Coverage (MC/DC, DO-178B): Every point of entry & exit in the program has been invoked at least once, every condition in a decision in the program has taken all possible outcomes at least once, every decision in the program has taken all possible outcomes at least once, each condition in a decision has been shown to independently affect that decision's outcome Folie 6 TAV 20 16.Okt. 2003 3
Beispiel: Minimale Mehrfach-Bedingungsüberdeckung Teste jede Kombination von Wahrheitswerten, bei denen die Änderung des Wahrheitswertes eines atomaren Ausdrucks den Wahrheitswert des zusammengesetzten Ausdrucks ändern kann! A B A B A B A B A B C A B C 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 Folie 7 Java Instrumentierung Ähnlich problematisch wie C++ ArrayList exts; java.io.file f; Iterator it = exts.iterator(); while (it.hasnext()){ if (f.getname().endswith((string)it.next())) return true; } while ( (line = inbuf.readline() )!= null ) Folie 8 TAV 20 16.Okt. 2003 4
DoIT Datenbankgestützte Instrumentierung Folie 9 DoIT GUI Folie 10 TAV 20 16.Okt. 2003 5
DoIT Text-Reports // Package-Name: junit.runner, Version: 3.8.1, Instrumentierung Nr. 2, instrumentiert am 29.12.2002 // Ergebnisse des instrumentierten Testlaufes vom 29.12.2002 18:58 // lfd. Test-Nr. dieser Inst-Nr: 2 // Bemerkung zur Instrumentierung: Testen von DoiT mittels JUnit // // Globale Messergebnisse für Package junit.runner : // Klassenüberdeckung : 55 % // Methodenüberdeckung : 50 % // Zweigüberdeckung : 40 % // Bedingungsüberdeckung : 42 % // Minimale Mehrfachbedingungsüberdeckung : 41 % // Schleifenüberdeckung : 75 % // Ausnahmeüberdeckung : 9 % Folie 11 DoIT HTML-Reports Folie 12 TAV 20 16.Okt. 2003 6
DoIT Weiterentwicklungen Überdeckungsmetrik für den modified condition/decision coverage Test' Berücksichtigung der unvollständigen Evaluierung (short-circuit-evaluation) Verbesserung des Laufzeitverhaltens auch bei I/O-intensiven Testläufen durch asynchrones Schreiben der Datenbank-Updates Realisierung einer schlanken Version mit datenbank-unabhängigen Instrumentierungsanweisungen z. B. für eingebettete Systeme (Java MicroEdition, JavaCard) Erkennung und Berücksichtigung von Vererbungshierarchien und auf Wunsch Instrumentierung entsprechender Oberklassen (falls diese im Quelltext vorliegen) Erweiterung um Sensitivierungs- und Testdatenerzeugungskomponenten Integration in die Open Source Testwerkzeuge aus dem XP-Umfeld Folie 13 Interesse an DoIT? Sponsoring... Kooperation Beta-Tester z.zt. FH-Köln, DLR-MTP, oskar winter@gm.fh-koeln.de Vielen Dank für ihre Geduld! Folie 14 TAV 20 16.Okt. 2003 7