Unit Tests für Totalverweigerer

43
Macoun 1

Transcript of Unit Tests für Totalverweigerer

Page 1: Unit Tests für Totalverweigerer

Macoun⌘

1

Page 2: Unit Tests für Totalverweigerer

Unit Tests für TotalverweigererPeter Hauke, Ingo Kasprzak

2

Page 3: Unit Tests für Totalverweigerer

Hinweis

• Unit Tests für Totalverweigerer

• Spieleentwicklung mit Sprite Kit (Terrassensaal)

• B.L.I.N.K. (Kleiner Saal)

3

Page 4: Unit Tests für Totalverweigerer

Ablauf

• Theorie

• Theorie mit etwas Praxis

• Praxis

• Demos

4

Page 5: Unit Tests für Totalverweigerer

Testing

5

Page 6: Unit Tests für Totalverweigerer

Varianten von Testing ...

• Verbreitete Tests:

• Integrationstest

• Systemtests

• AkzeptanztestBlack Box Tests

• Problem bei allen: Debugging

6

Page 7: Unit Tests für Totalverweigerer

... eine weitereUnit Tests

• Test funktionaler Einzelteile (Module)

• Validierung auf statische Bedingungen

• Idee:

• Einzelteile genügen Spezifikationen

• Gesamtheit der Einzelteile genügt Spezifikation

7

Page 8: Unit Tests für Totalverweigerer

Ja und nun?

8

Page 9: Unit Tests für Totalverweigerer

GrundideeKleine Teile testen

• Tests ohne Abhängigkeiten von:

• Benutzereingaben

• Konfiguration des Host

• Externen Daten (Datenbanken, Server)

• anderen Tests

• Module liefern zu diskreten Eingaben reproduzierbare Ergebnisse

9

Page 10: Unit Tests für Totalverweigerer

ErgebnisHohe Testabdeckung

• Vielzahl von Test, die

• jederzeit wiederholt werden können

• ständig wiederholt werden

• Stetige Validierung von existierendem Code

• Macoun 2013 „96% Testabdeckung“ (Maxim Zaks)

10

Page 11: Unit Tests für Totalverweigerer

Ich versteh es immer noch nicht

11

Page 12: Unit Tests für Totalverweigerer

Test Driven DevelopmentTest First Development

• Ansatz:

• Test schreiben

• Code schreiben der Test genügt

• Refactoring

• wenig überflüssiger Code & hohe Testabdeckung

12

Page 13: Unit Tests für Totalverweigerer

Test Driven DevelopmentVoraussetzungen

• Genaue Analyse der Anforderungen vor Entwicklung

• Kleinteilige Problemstellungen identifizieren (Microfeatures)

• kleinere Microfeatures - einfachere Tests

13

Page 14: Unit Tests für Totalverweigerer

Test Driven DevelopmentUnd so gehts ... (1)

• Analyse

• ein Microfeature identifizieren

• Randbedingungen für Microfeature erkennen

• Test schreiben

14

Page 15: Unit Tests für Totalverweigerer

Test Driven DevelopmentUnd so gehts ... (2)

• Test starten

• fail: Code fehlt noch

• pass: Microfeature bereits implementiert

• Code schreiben

• Test starten

15

Page 16: Unit Tests für Totalverweigerer

Test Driven DevelopmentUnd so gehts ... (3)

• Code so lang anpassen, bis Test erfolgreich

• Just Barely Good Enough™

• Refactor

• Testen

16

Page 17: Unit Tests für Totalverweigerer

Test Driven DevelopmentBeispiel: Taschenrechner

• Analyse:

• Methoden zur Berechnung

• Microfeature:

• Addition zweier Zahlen

• Randbedingungen:

• Eingabe numerisch und nicht nil

17

Page 18: Unit Tests für Totalverweigerer

Änderung der Herangehensweise

• Weg von Gedanken „Wie kann ich das debuggen?“

• Über „Wie kann ich einen Test dafür schreiben?“

• Zu „Wie kann ich beweisen, dass mein Code den Anforderungen genügt?“

18

Page 19: Unit Tests für Totalverweigerer

Vorteile

• Code wird kleinteilig

• Code wird kleinteilig tesbar

• Zeitnahe Problembehebung

• Weniger Code

• Sicherheit beim Refactor

• Spätere Änderungen am Code transparenter

19

Page 20: Unit Tests für Totalverweigerer

Der lange Weg

• Unit Tests ausprobieren

• kleine Tests schreiben

• oder auch: erst Code, dann Test schreiben

• typisch: man schreibt Tests, die zum Code passen könnten

• Lernkurve enorm

20

Page 21: Unit Tests für Totalverweigerer

Nachteile

• (naja) hohes Anforderungsverständnis

• nur erkannte Randbedingungen spiegeln sich in Tests wieder

• Testcode, der nicht in die App gelangt

• Tests garantieren keine Fehlerfreiheit

• Problem bei Datenbanken, Netzwerk, Nebenläufigkeit

21

Page 22: Unit Tests für Totalverweigerer

Nettigkeiten

• Zwang, die Anforderungen zu verstehen

• Teamarbeit: Tester - Coder

• weniger überflüssiger Code

• Tests dienen der Dokumentation

• Last but not least: Viele Grüne Tests ergeben ein gutes Gefühl

22

Page 23: Unit Tests für Totalverweigerer

Worauf teste ich?

23

Page 24: Unit Tests für Totalverweigerer

Worauf teste ich? XCTest/XCTestAssertionsImpl.h (1)

XCTFail(format...)XCTAssertNil(a1, format...)XCTAssertNotNil(a1, format...)XCTAssert(expression, format...)XCTAssertTrue(expression, format...)XCTAssertFalse(expression, format...)XCTAssertEqualObjects(a1, a2, format...)XCTAssertNotEqualObjects(a1, a2, format...)XCTAssertEqual(a1, a2, format...)XCTAssertNotEqual(a1, a2, format...)XCTAssertEqualWithAccuracy(a1, a2, accuracy, format...)XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format...)

24

Page 25: Unit Tests für Totalverweigerer

Worauf teste ich? XCTest/XCTestAssertionsImpl.h (2)

XCTAssertThrows(expression, format...)XCTAssertThrowsSpecific(expression, specificException, format...)XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format...)XCTAssertNoThrow(expression, format...)XCTAssertNoThrowSpecific(expression, specificException, format...)XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format...)

25

Page 26: Unit Tests für Totalverweigerer

Worauf teste ich? XCTest/XCTestAssertionsImpl.h (3)

XCTAssertNil(a1, format...)XCTAssertNotNil(a1, format...)

XCTAssertTrue(expression, format...)XCTAssertFalse(expression, format...)

26

Page 27: Unit Tests für Totalverweigerer

Worauf teste ich? XCTest/XCTestAssertionsImpl.h (4)

XCTAssertEqualObjects(a1, a2, format...)XCTAssertNotEqualObjects(a1, a2, format...)

XCTAssertEqual(a1, a2, format...)XCTAssertNotEqual(a1, a2, format...)

XCTAssertEqualWithAccuracy(a1, a2, accuracy, format...)XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format...)

27

Page 28: Unit Tests für Totalverweigerer

Demo

28

Page 29: Unit Tests für Totalverweigerer

Demos

• Ganz einfach

• Unit Test nachrüsten

• TicTacToe mit Überraschungen

29

Page 30: Unit Tests für Totalverweigerer

Ganz einfach

• Simple Calculator

30

Page 31: Unit Tests für Totalverweigerer

Unit Test nachrüsten

• Framework in Xcode 5: XCTest

31

Page 32: Unit Tests für Totalverweigerer

Projekt in Xcode 5

32

Page 33: Unit Tests für Totalverweigerer

Target hinzufügen

33

Page 34: Unit Tests für Totalverweigerer

Testing Bundle

34

Page 35: Unit Tests für Totalverweigerer

Target Namen wählen

35

Page 36: Unit Tests für Totalverweigerer

Das war‘s ...

36

Page 37: Unit Tests für Totalverweigerer

TicTacToe

• Demo von Macoun 2012

• Unit Test nachgerüstet

• überraschende Ergebnisse

37

Page 38: Unit Tests für Totalverweigerer

Fragen?

38

Page 39: Unit Tests für Totalverweigerer

Tipp

Der wichtigste Test überhaupt ist der,

den man zuerst schreibt.

39

Page 40: Unit Tests für Totalverweigerer

Buchempfehlung

Graham Lee

„Test-Driven iOS Development“

40

Page 41: Unit Tests für Totalverweigerer

One more thing

http://www.0x02100.de

41

Page 42: Unit Tests für Totalverweigerer

Vielen Dank

42

Page 43: Unit Tests für Totalverweigerer

Macoun⌘

43