2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

5. Dokumentieren und Testen Advanced Programming Techniques Wintersemester 2009 / 2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 1 ...
Author: Volker Sachs
3 downloads 0 Views 491KB Size
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 2

11. Refactoring

Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010

Agenda

 Dokumentieren Dokumentieren Testen

Was wird mittels JavaDoc dokumentiert? Die Außensicht, d.h. immer aus Sicht des Nutzers!

Nutzer Deklaration und Konfiguration … I i; i = new C(); …

4

JavaDoc

Definition (Außensicht) public interface I { public void m (); … }

Nutzung … i.m(); …

Anbieter

Implementierung (Innensicht) public class C implements I { public void m() {…} … In-line } Kommentare

Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010

Was wird dokumentiert? Die Spezifikation! Schnittstelle

Schnittstellenname

public interface OrderManager {

Name

Rückgabetyp

Operationen

Operationsname

Eingabeparameter und -typ

Order placeOrder (Customer customer, Article article) throws NotAvailableException;

Signatur }

Semantik

Ausnahme Prosa, Vorbedingungen, Nachbedingungen, etc.

Nicht-funktionale Eigenschaften Protokoll

5

Prosa

Prosa, Sequenzdiagramme etc.

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

TestCase Aufräumen

setUp() tearDown() test1() test2() test3() ...

12

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

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"); assertEquals(1, ((Integer) tokenIDs.elementAt(0)).intValue()); ... assertEquals(9, ((Integer) tokenIDs.elementAt(3)).intValue());

Testvorbereitung

Testdurchführung

Testauswertung

} 13

Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010

Testsuiten

Testsuite

Testklasse

Testsuite

Testsuite

Testsuite

Testklasse

Testklasse

Testsuite

Testklasse Testklasse 14

Testsuite

Testklasse Testklasse

Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 28.10.2010

Suggest Documents