SOFTWARE ENGINEERING 3 TESTVORBEREITUNGEN UND UNIT-TEST
Gliederung 2 0. 1. 2. 3. Vorstellung Testvorbereitungen Planungsphase Definitionsphase Implementierungs-, Abnahme-und Einführungsphase Testphasen nach Pol, Koomen und Spillner Unit-Test JUnit Python CppUnit Quellen
0. Vorstellung 3 Referenten: Simone Weigl Michael Kaleja Daniel Fuss Christian Adler
4 1. Testvorbereitungen
1. Testvorbereitungen 5 Überblick [B1]
1.1 Planungsphase [T2] 6 Netzplan Gehört in den Bereich des Projektmanagement [B2]
1.2 Definitionsphase [T2] 7 Lasten- und Pflichtenheft Lastenheft Pflichtenheft Wird vom Auftraggeber erstellt Wird vom Auftragnehmer erstellt
8 1.3 Implementierungs-, Abnahmeund Einführungsphase [T2] Allgemeines zur Implementierung Folgende Punkte sollten beachtet werden: Konsistenz Modularisierung Versionsverwaltung Kommentare
9 1.3 Implementierungs-, Abnahmeund Einführungsphase [T2] Allgemeines zum Testen Unit-Test Code Review Automatisierter Test Verfahren: Test-first Test-driven- Development (= zuerst werden die Testfälle geschrieben und dann der Programmcode.) Zuerst wird der Programmcode geschrieben und danach wird er erst getestet.
1.4 Testphasen nach Pol, Koomen 10 und Spillner [T1] Testplanung: Allgemeine Abwicklung Strategien Ziele und Kriterien Testverfahren Programmiersprache Beendigung Dokumentation Testdaten
1.4 Testphasen nach Pol, Koomen 11 und Spillner [T1] Weitere Testphasen Testvorbereitung Umsetzung der Testplanung Testspezifikation Testdurchführung Dynamisch Statisch Testauswertung Fehler Alles in Ordnung Testabschluss Komplett durchlaufen Abbruch
12 2. Unit-Test
2. Unit-Test [T3] 13 Ausschnitt aus einer Liste von Unit-Test-Abwandlungen: ABAP: ABAP Unit C: CUnit, cfix, Embedded Unit, ucunit C++: CppUnit, Boost Java: JUnit JavaScript: JSUnit.NET: NUnit PHP: PHPUnit PL/SQL: utplsql Python: PyUnit, DocString MATLAB/Simulink: Simulink Design Verifier Smalltalk: SUnit
2.1 JUnit [T4, T5, A1] 14 Was ist JUnit? (1/2) JUnit ist ein Framework zum Testen von Java-Programmen entwickelt von Kent Beck & Erich Gamma Kent Beck [B3] Erich Gamma [B4]
2.1 JUnit [T4, T5, A1] 15 Was ist JUnit? (2/2) JUnit basiert auf der Struktur von Smalltalks SUnit, der Mutter aller Unit Tests. Kent Beck übernahm die Struktur von SUnit und benutzte sie für das objektorientiere Modell von Java. Der Arbeitsraum wurde die Klasse, aus Variablen wurden Instanzvariablen und das zu Testende wurde zu Methoden Besonderheit: Automatisierte Tests, die es damals unter SUnit noch nicht gab
2.1 JUnit [T4, T5, A1] 16 Funktionsweise von JUnit Kennt nur zwei Ergebnisse: grün für Test gelingt rot für Test gescheitert Mögliche Ursachen für das Scheitern sind ein Fehler (Error) oder ein falsches Ergebnis (Failure) Failures werfen eine sogenannte AssertionFailedError - Exception alle anderen Exceptions werden von JUnit als Error interpretiert
2.1 JUnit [T4, T5, A1] 17 Vorgehensweise bei JUnit Idee : möglichst fehlerarmen Code Ein Programmierer liefert zu seinen Code immer die passenden JUnit Tests. Bei Änderung des Codes durch andere Programmierer können sich diese über die mitgelieferten Unit Tests vergewissern, dass das Programm läuft. Treten nach der Änderung Fehler im Unit Test auf, ist klar, dass der Dritte dafür verantwortlich ist. => Korrektur bis Unit Tests wieder grün zeigen
18 2.1 JUnit Beispiel zu JUnit
2.2 Python [T6, T7] 19 Zwei Modul-Tests, die bereits in die Standardbibliothek von Python integriert sind: Testfälle im DocString Unit-Test PyUnit Im Paket doctest Seit Python 2.1 Testfälle werden in Docstrings geschrieben Testfälle können aus dem Interaktivmodus kopiert werden Ausführbar mit doctest.testmod() Im Paket unittest Aus der Idee von JUnit entstanden und für Python umgesetzt Autor: Steve Purcell Seit Python 2.1 Eigenständige Pythonmodule für die Testfälle
2.2 Python [T6, T7] 20 Vergleich von PyUnit zu doctest Vorteile Nachteile Test getrennt von Quellcode in eigenen Testklassen Vollständig in Python-Code geschrieben Einfacher ausführbar Höherer Arbeitsaufwand
21 2.2 Python Beispiele zu PyUnit und DocString
2.3 CppUnit [T8, T9, T10] 22 Was ist CppUnit? (1/2) CppUnit ist eine Portierung von JUnit zu C++. Das CppUnit-Projekt basiert auf den ersten Portierungen von Michael Feathers und Jerome Lacoste Michael Feathers [B5]
2.3 CppUnit [T8, T9, T10] 23 Was ist CppUnit? (2/2) Die Community um CppUnit setzt auf beiden Arbeiten auf und kombinierte sie zu einem Framework, welches auf Solaris/Unix- und Windows-Rechnern läuft. CppUnit unterstützt Unix Compiler (z.b. GNU C++ Compiler), Microsoft Visual C++ und Borland C++ Besitz u.a. folgende Eigenschaften: XML-Ausgabe mit Elementen für zusätzliche Angaben Compiler-ähnliche Ausgabe für Integration in IDE Makros zur Realisierung von Test-Suiten Unterstützung von GUI-basierten Test-Runnern
24 2.3 CppUnit Beispiel zu CppUnit
2.1 Fazit Unit-Tests [T4, T5, A1] 25 Vorteile von Unit-Test Nachteile von Unit-Test Schnelle Überprüfung des Codes Wiederverwendbarkeit der Tests Trennung von Code und Tests Übersichtlichkeit beim Testen Zusätzliche Methoden und Klassen für das Testen Unterbricht den Programmierfluss Gefahr, zu wenig zu testen, da man davon ausgeht, dass bei grünem Balken der Code fehlerfrei ist Es können nur solche Fehler entdeckt werden, auf die die Tests ausgelegt sind. => grüner Balken ungleich fehlerfreier Code
3. Quellen 26 Textquellen: [T1]: http://de.wikipedia.org/wiki/softwaretest [T2]: IT-Handbuch für Fachinformatiker, Sascha Kersken, 5. aktualisierte und erweiterte Auflage 2011, Kapitel 11 Software Engineering [T3]: http://de.wikipedia.org/wiki/liste_von_modultest-software [T4]: http://de.wikipedia.org/wiki/junit [T5]: http://www.junit.org/ [T6]: http://docs.python.org/library/ [T7]: http://openbook.galileocomputing.de/python/ [T8]: http://cppunit.sourceforge.net/doc/1.11.6/ [T9]: http://de.inforapid.org/ [T10]: http://de.wikipedia.org/wiki/cppunit
3. Quellen 27 Bildquellen: [B1]: Software Engineering III (SE), Kapitel 1 Einführung, WS 11/12 [B2]: Eigenerstellung [B3]: http://upload.wikimedia.org/wikipedia/commons/thumb/5/55/kent_beck _no_workshop_mapping_xp.jpg/220px-kent_beck_no_workshop_ Mapping_XP.jpg [B4]: http://javazone.no/incogito/speaker/d5503464-a8c7-41c1-aade- 7d256d34d59c/photo [B5]: http://www.chicagotribune.com/media/photo/2011-03/60045270.jpg Audioquellen: [A1]: http://www.se-radio.net/2010/09/episode-167-the-history-of-junit-and-thefuture-of-testing-with-kent-beck/
VIELEN DANK FÜR IHRE AUFMERKSAMKEIT