SlideShare ist ein Scribd-Unternehmen logo
Macoun
⌘
1
Unit Tests für Totalverweigerer
Peter Hauke, Ingo Kasprzak
2
Hinweis
•Unit Tests für Totalverweigerer
•Spieleentwicklung mit Sprite Kit (Terrassensaal)
•B.L.I.N.K. (Kleiner Saal)
3
Ablauf
•Theorie
•Theorie mit etwas Praxis
•Praxis
•Demos
4
Testing
5
Varianten von Testing ...
•Verbreitete Tests:
• Integrationstest
• Systemtests
• Akzeptanztest
Black Box Tests
•Problem bei allen: Debugging
6
... eine weitere
Unit Tests
•Test funktionaler Einzelteile (Module)
•Validierung auf statische Bedingungen
•Idee:
• Einzelteile genügen Spezifikationen
• Gesamtheit der Einzelteile genügt Spezifikation
7
Ja und nun?
8
Grundidee
Kleine 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
Ergebnis
Hohe Testabdeckung
•Vielzahl von Test, die
• jederzeit wiederholt werden können
• ständig wiederholt werden
•StetigeValidierung von existierendem Code
•Macoun 2013 „96%Testabdeckung“ (Maxim Zaks)
10
Ich versteh es immer noch nicht
11
Test Driven Development
Test First Development
•Ansatz:
• Test schreiben
• Code schreiben der Test genügt
• Refactoring
•wenig überflüssiger Code & hohe Testabdeckung
12
Test Driven Development
Voraussetzungen
•Genaue Analyse der Anforderungen vor Entwicklung
•Kleinteilige Problemstellungen identifizieren (Microfeatures)
• kleinere Microfeatures - einfachere Tests
13
Test Driven Development
Und so gehts ... (1)
•Analyse
•ein Microfeature identifizieren
•Randbedingungen für Microfeature erkennen
•Test schreiben
14
Test Driven Development
Und so gehts ... (2)
•Test starten
• fail: Code fehlt noch
• pass: Microfeature bereits implementiert
•Code schreiben
•Test starten
15
Test Driven Development
Und so gehts ... (3)
•Code so lang anpassen, bis Test erfolgreich
• Just Barely Good Enough™
•Refactor
•Testen
16
Test Driven Development
Beispiel:Taschenrechner
•Analyse:
• Methoden zur Berechnung
•Microfeature:
• Addition zweier Zahlen
•Randbedingungen:
• Eingabe numerisch und nicht nil
17
Änderung der Herangehensweise
•Weg von Gedanken „Wie kann ich das debuggen?“
•Über „Wie kann ich einenTest dafür schreiben?“
•Zu „Wie kann ich beweisen, dass mein Code den Anforderungen
genügt?“
18
Vorteile
•Code wird kleinteilig
•Code wird kleinteilig tesbar
•Zeitnahe Problembehebung
•Weniger Code
•Sicherheit beim Refactor
•Spätere Änderungen am Code transparenter
19
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
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
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
Worauf teste ich?
23
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
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
Worauf teste ich?
XCTest/XCTestAssertionsImpl.h (3)
XCTAssertNil(a1, format...)
XCTAssertNotNil(a1, format...)
XCTAssertTrue(expression, format...)
XCTAssertFalse(expression, format...)
26
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
Demo
28
Demos
•Ganz einfach
•Unit Test nachrüsten
•TicTacToe mit Überraschungen
29
Ganz einfach
•Simple Calculator
30
Unit Test nachrüsten
•Framework in Xcode 5: XCTest
31
Projekt in Xcode 5
32
Target hinzufügen
33
Testing Bundle
34
Target Namen wählen
35
Das war‘s ...
36
TicTacToe
•Demo von Macoun 2012
•Unit Test nachgerüstet
•überraschende Ergebnisse
37
Fragen?
38
Tipp
Der wichtigste Test überhaupt ist der,
den man zuerst schreibt.
39
Buchempfehlung
Graham Lee
„Test-Driven iOS Development“
40
One more thing
http://www.0x02100.de
41
Vielen Dank
42
Macoun
⌘
43

Weitere ähnliche Inhalte

Ähnlich wie Unit Tests für Totalverweigerer

BED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerBED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als Entwickler
Patrick Baumgartner
 
Puppet: Designing modules & repositories
Puppet: Designing modules & repositoriesPuppet: Designing modules & repositories
Puppet: Designing modules & repositories
inovex GmbH
 
Test-Driven-Development mit JUnit 4
Test-Driven-Development mit JUnit 4Test-Driven-Development mit JUnit 4
Test-Driven-Development mit JUnit 4
Jörn Dinkla
 
Regressionstests in Webprojekten - IPC12SE
Regressionstests in Webprojekten - IPC12SERegressionstests in Webprojekten - IPC12SE
Regressionstests in Webprojekten - IPC12SE
Sebastian Bauer
 
Coderetreat Vorlage
Coderetreat VorlageCoderetreat Vorlage
Coderetreat Vorlage
Ramon Anger
 
Property Based Testing
Property Based TestingProperty Based Testing
Property Based Testing
Daniel Heinrich
 
Einführung in die Software-Qualitätssicherung
Einführung in die Software-QualitätssicherungEinführung in die Software-Qualitätssicherung
Einführung in die Software-QualitätssicherungChristian Baranowski
 
Continuous Integration für PHP
Continuous Integration für PHPContinuous Integration für PHP
Continuous Integration für PHP
Sebastian Bauer
 
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
Odilo Oehmichen
 
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
Patrick Baumgartner
 
Regressionstests in Webprojekten
Regressionstests in WebprojektenRegressionstests in Webprojekten
Regressionstests in WebprojektenSebastian Bauer
 
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Florian Wolters
 
Continous Deployment - Schneller entwickeln
Continous Deployment - Schneller entwickelnContinous Deployment - Schneller entwickeln
Continous Deployment - Schneller entwickeln
Martin Seibert
 
Streaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlStreaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der Wahl
Matthias Niehoff
 
objectiF extrem
objectiF extremobjectiF extrem
objectiF extrem
Olaf Lewitz
 
Refactoring: Mythen & Fakten
Refactoring: Mythen & FaktenRefactoring: Mythen & Fakten
Refactoring: Mythen & Fakten
NETUserGroupBern
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungChristian Baranowski
 
Office-Programmierung mit VBA
Office-Programmierung mit VBAOffice-Programmierung mit VBA
Office-Programmierung mit VBAmspgermany
 
TDD mit ABAP Units
TDD mit ABAP UnitsTDD mit ABAP Units
TDD mit ABAP Units
Cadaxo GmbH
 
iOS Testautomation bei mobile.de
iOS Testautomation bei mobile.deiOS Testautomation bei mobile.de
iOS Testautomation bei mobile.de
Holger Hammel
 

Ähnlich wie Unit Tests für Totalverweigerer (20)

BED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerBED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als Entwickler
 
Puppet: Designing modules & repositories
Puppet: Designing modules & repositoriesPuppet: Designing modules & repositories
Puppet: Designing modules & repositories
 
Test-Driven-Development mit JUnit 4
Test-Driven-Development mit JUnit 4Test-Driven-Development mit JUnit 4
Test-Driven-Development mit JUnit 4
 
Regressionstests in Webprojekten - IPC12SE
Regressionstests in Webprojekten - IPC12SERegressionstests in Webprojekten - IPC12SE
Regressionstests in Webprojekten - IPC12SE
 
Coderetreat Vorlage
Coderetreat VorlageCoderetreat Vorlage
Coderetreat Vorlage
 
Property Based Testing
Property Based TestingProperty Based Testing
Property Based Testing
 
Einführung in die Software-Qualitätssicherung
Einführung in die Software-QualitätssicherungEinführung in die Software-Qualitätssicherung
Einführung in die Software-Qualitätssicherung
 
Continuous Integration für PHP
Continuous Integration für PHPContinuous Integration für PHP
Continuous Integration für PHP
 
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
 
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
 
Regressionstests in Webprojekten
Regressionstests in WebprojektenRegressionstests in Webprojekten
Regressionstests in Webprojekten
 
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
 
Continous Deployment - Schneller entwickeln
Continous Deployment - Schneller entwickelnContinous Deployment - Schneller entwickeln
Continous Deployment - Schneller entwickeln
 
Streaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlStreaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der Wahl
 
objectiF extrem
objectiF extremobjectiF extrem
objectiF extrem
 
Refactoring: Mythen & Fakten
Refactoring: Mythen & FaktenRefactoring: Mythen & Fakten
Refactoring: Mythen & Fakten
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
 
Office-Programmierung mit VBA
Office-Programmierung mit VBAOffice-Programmierung mit VBA
Office-Programmierung mit VBA
 
TDD mit ABAP Units
TDD mit ABAP UnitsTDD mit ABAP Units
TDD mit ABAP Units
 
iOS Testautomation bei mobile.de
iOS Testautomation bei mobile.deiOS Testautomation bei mobile.de
iOS Testautomation bei mobile.de
 

Unit Tests für Totalverweigerer