5. Dokumentieren und Testen Advanced Programming Techniques Wintersemester 2009 / 2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010
Einordnung in den gesamten Kurs 1. Einführung 2. Java Schnellkurs 3. Programmieren gegen Schnittstellen 4. Software-Kategorien 5. Dokumentieren und Testen 6. Komponenten 7. Regeln zum Design von Komponenten 8. Fehlerbehandlung 9. Konfigurationsmanagement 10.Debugging, Tracing, Logging 11. Refactoring 2 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010
Agenda Dokumentieren Testen
Was wird mittels JavaDoc dokumentiert? Die Außensicht, d.h. immer aus Sicht des Nutzers! Nutzer Anbieter JavaDoc Deklaration und Konfiguration I i; i = new C(); Definition (Außensicht) public interface I { public void m (); Nutzung Implementierung (Innensicht) i.m(); public class C implements I { public void m() { In-line Kommentare 4 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010
Was wird dokumentiert? Die Spezifikation! Schnittstelle Name public interface OrderManager { Schnittstellenname Operationen Signatur Semantik Rückgabetyp Operationsname Eingabeparameter und -typ Order placeorder (Customer customer, Article article) throws NotAvailableException; Prosa, Vorbedingungen, Nachbedingungen, etc. Ausnahme Nicht-funktionale Eigenschaften Prosa Protokoll Prosa, Sequenzdiagramme etc. 5 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010
Beispiel Accounting 6 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010
Parameterart: in, out, inout Method Details Accounting Post condition Java Notation für Bedingungen Schlüsselwort exists Schlüsselwort result Semiformale Notation angelehnt an QSL [Siedersleben: Moderne Softwarearchitektur] 7 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010
Beispiel Borrowing 8 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010
Method Details Borrowing Pre condition Post condition 9 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010
Agenda Dokumentieren Testen Testen
Unit Tests: Was wird wann wie getestet? Was? Unit = kleinste Testeinheit in einem System, z.b. einzelne Methode Unit Test = isolierter, (meist) automatisierter Test einer Unit mittels eines Testrahmens Wann? Früh testen! Nach XP werden die Testfälle vor dem eigentlichen System programmiert (und liefern somit eine ausführbare Spezifikation) Main Methoden zum schnellen Ausprobieren sind von gestern! Wie? Umfassend und destruktiv testen: Alle Methoden (zumindest in der Außensicht) Verschiedene typische Werte Extremwerte (null, -9999, ): wir wollen ja wirklich Fehler finden! Ausnahmen (verletzte Preconditions etc.) 11 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010
Testen von Java-Klassen mit JUnit Aufräumen setup() teardown() test1() test2() test3()... TestCase Vorbereiten des Unit Tests (jedes einzelnen!) Einzelne Unit Tests All Unit Tests müssen voneinander unabhängig sein! Die Reihenfolge der Ausführung ist nicht definiert test2() kann nicht davon ausgehen, dass Daten aus test1() zur Verfügung stehen 12 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010
Aufbau eines Unit Tests public Scanner(Hashtable mapping) { super(); this.mapping = mapping; public Vector scan(string text) { Vector result = new Vector(); StringTokenizer st = new StringTokenizer(text); while (st.hasmoretokens()) { Integer i = (Integer) mapping.get(st.nexttoken()); if(i == null) { i = new Integer(NO_TOKEN); result.add(i); return result; public void testscan() { Hashtable mapper = new Hashtable(); mapper.put("null", new Integer(0)); mapper.put("eins", new Integer(1));... mapper.put("neun", new Integer(9)); scanner = new Scanner(mapper); Vector tokenids = scanner.scan("eins Fünf Drei Neun"); Testvorbereitung Testdurchführung assertequals(1, ((Integer) tokenids.elementat(0)).intvalue());... assertequals(9, ((Integer) tokenids.elementat(3)).intvalue()); Testauswertung 13 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010
Testsuiten Testsuite Testsuite Testsuite Testsuite Testklasse Testklasse Testklasse Testsuite Testsuite Testklasse Testklasse Testklasse Testklasse 14 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010