This presentation shows you the way to optimize your iOS development with continuous integration, automatic unit tests, automatic acceptance tests and one click deployments.
1. Sven Günther – it-agile GmbH
iOS-Entwicklung –
der agile Weg
2. Softwareentwickler seit 1997
Objective-C seit 2007
iOS Entwicklung seit 2009
Berater und Coach für agile Softwareentwicklung bei it-agile
Twitter: @inevs
www.it-agile.de
4. Als Nutzer möchte ich eine Suche
nach einem Fahrzeug ausführen
und als Ergebnis die Anzahl der
Treffer sehen, um zu prüfen, ob
die Suche weiter eingeschränkt
werden kann.
www.it-agile.de
5. Als Nutzer möchte ich eine Suche
nach einem Fahrzeug ausführen
und als Ergebnis die Anzahl der
Treffer sehen, um zu prüfen, ob
die Suche weiter eingeschränkt
werden kann.
Walking Skeleton
www.it-agile.de
21. Testgetriebene Entwicklung - TDD
neue Funktionalität wird durch Test beschrieben
Test
Green
Funktionalität wird
implementiert
www.it-agile.de
22. Testgetriebene Entwicklung - TDD
neue Funktionalität wird durch Test beschrieben
Test
Funktionalität wird
Code wird Refactor Green
implementiert
aufgeräumt
www.it-agile.de
24. Unit Tests
it
SenT estingK
OC Unit / pple.co
m)
per.a
( develo
www.it-agile.de
25. Unit Tests
it
SenT estingK (gith G
ub.co HUnit
OC Unit / pple.co
m) m/ga
per.a briel/
( develo gh-unit
)
www.it-agile.de
26. Unit Tests
it
SenT estingK (gith G
ub.co HUnit
OC Unit / pple.co
m) m/ga
per.a briel/
( develo gh-unit
)
GTMTest
(code.google.com)
www.it-agile.de
27. Unit Tests
it
SenT estingK (gith G
ub.co HUnit
OC Unit / pple.co
m) m/ga
per.a briel/
( develo gh-unit
)
GTMTest
(code.google.com)
Testen kleine Einheiten (Klassen)
Laufen schnell bei jedem Build
Vorbeugen gegen Regression
Erlauben Refactorings
www.it-agile.de
28. Testen im iOS-SDK
Logic-Tests
Testen einzelne Funktionalität
isoliert von anderen
NIB-Files werden nicht
instantiiert
ViewController werden nicht
vollständig initialisiert
CoreData (ManagedObjects)
nicht testbar
www.it-agile.de
29. Testen im iOS-SDK
Logic-Tests Application-Tests
Testen einzelne Funktionalität Tests laufen gegen die
isoliert von anderen gesamte App
NIB-Files werden nicht App wird zur Laufzeit gegen
instantiiert das TestBundle gelinkt
ViewController werden nicht Tests laufen nur auf dem
vollständig initialisiert Device
CoreData (ManagedObjects) für Unit-Tests nicht geeignet
nicht testbar
www.it-agile.de
33. Automatische Akzeptanztests
tion (code U
UI A utoma .goog ISpec
Apple m)
per.a pple.co le.co
m/p/
( develo ui spec)
www.it-agile.de
34. Automatische Akzeptanztests
tion (code U
UI A utoma .goog ISpec
Apple m)
per.a pple.co le.co
m/p/
( develo ui spec)
Frank
(github.com/moredip/Frank)
www.it-agile.de
35. Automatische Akzeptanztests
tion (code U
UI A utoma .goog ISpec
Apple m)
per.a pple.co le.co
m/p/
( develo ui spec)
Frank
(github.com/moredip/Frank)
Testen der fachlichen Funktionalität der App
Akzeptanzkriterien werden durch ProductOwner
beschrieben
Tests bilden die Akzeptanzkriterien ab
Zeigen Fortschritt der Entwicklung durch grüne Tests
www.it-agile.de
36. Frank
App wird um HTTP-Server erweitert
Abb. (c) github.com/moredip/Frank
www.it-agile.de
37. Frank
App wird um HTTP-Server erweitert
Über FrankDriver wird die UI angesteuert
Abb. (c) github.com/moredip/Frank
www.it-agile.de
38. Frank
App wird um HTTP-Server erweitert
Über FrankDriver wird die UI angesteuert
Testscripte werden mit cucumber geschrieben
Abb. (c) github.com/moredip/Frank
www.it-agile.de
39. Frank
App wird um HTTP-Server erweitert
Über FrankDriver wird die UI angesteuert
Testscripte werden mit cucumber geschrieben
Tests laufen gegen die App im Simulator
Abb. (c) github.com/moredip/Frank
www.it-agile.de
40. Frank
App wird um HTTP-Server erweitert
Über FrankDriver wird die UI angesteuert
Testscripte werden mit cucumber geschrieben
Tests laufen gegen die App im Simulator
Abb. (c) github.com/moredip/Frank
Views mit Accessibility-Label werden erkannt
www.it-agile.de
42. Cucumber
http://cukes.info/
BDD: Behaviour Driven Development
Verhalten beschreiben im Plain Text
Step Definition in Ruby schreiben
Ausführen und sehen dass es fehlschlägt
Code schreiben um Test zum Erfolg zu bringen
Test erneut ausführen
Wiederholen
www.it-agile.de
43. Cucumber
http://cukes.info/
BDD: Behaviour Driven Development
Verhalten beschreiben im Plain Text
Step Definition in Ruby schreiben
Ausführen und sehen dass es fehlschlägt
Code schreiben um Test zum Erfolg zu bringen
Test erneut ausführen
Wiederholen
kommt urspünglich aus Webentwicklung
www.it-agile.de
44. Cucumber
http://cukes.info/
BDD: Behaviour Driven Development
Verhalten beschreiben im Plain Text
Step Definition in Ruby schreiben
Ausführen und sehen dass es fehlschlägt
Code schreiben um Test zum Erfolg zu bringen
Test erneut ausführen
Wiederholen
kommt urspünglich aus Webentwicklung
Viele Portierungen u.a. für Java, .Net, ...
www.it-agile.de
49. Integrations-Server
Continuous Integration
Frühes Feedback und weniger Risiko durch ständige Integration
Vermeidet Big-Bang-Integration
Potentiell auslieferbare Software zu jeder Zeit
Build läuft immer auf dem letzten Stand im SourceCodeRepository
Mac Mini (c) www.apple.com
Jenkins-Logo (c) www.jenkins-ci.org
www.it-agile.de
50. Integrations-Server
Continuous Integration
Frühes Feedback und weniger Risiko durch ständige Integration
Vermeidet Big-Bang-Integration
Potentiell auslieferbare Software zu jeder Zeit
Build läuft immer auf dem letzten Stand im SourceCodeRepository
Mac Mini (c) www.apple.com
Jenkins-Logo (c) www.jenkins-ci.org
www.it-agile.de
51. Integrations-Server
Continuous Integration
Frühes Feedback und weniger Risiko durch ständige Integration
Vermeidet Big-Bang-Integration
Potentiell auslieferbare Software zu jeder Zeit
Build läuft immer auf dem letzten Stand im SourceCodeRepository
Mac Mini (c) www.apple.com
Jenkins-Logo (c) www.jenkins-ci.org
www.it-agile.de
52. Xcode auf der Console
xcodebuild
xcodebuild -target "myapp" -configuration "debug" build
www.it-agile.de
55. Jenkins
www.jenkins-ci.org
führt Jobs aus und zeigt Zustand der Jobs an
Java-Webanwendung
Configuration
pollt git-Repository auf Änderungen (alle 5 min)
bei Änderungen wird aktueller Stand geladen
führt make aus (compile, test, deploy)
www.it-agile.de
56. Jenkins
www.jenkins-ci.org
führt Jobs aus und zeigt Zustand der Jobs an
Java-Webanwendung
Configuration
pollt git-Repository auf Änderungen (alle 5 min)
bei Änderungen wird aktueller Stand geladen
führt make aus (compile, test, deploy)
Wichtig
➡ Parallelität der Build-Queue auf 1 setzen
www.it-agile.de
58. One Click Deployments
manuelle Buildschritte vermeiden
leicht installierbare Version erzeugen
Over the Air Deployment
Betabuilder (http://www.hanchorllc.com/2010/08/24/introducing-ios-beta-builder/)
Testflight (http://testflightapp.com/)
www.it-agile.de
64. Betabuilder
Ruby-Gem von Luke Redpath
https://github.com/lukeredpath/betabuilder
Distribution-Zertifikate müssen auf CI-Server verfügbar sein
www.it-agile.de
65. Betabuilder
Ruby-Gem von Luke Redpath
https://github.com/lukeredpath/betabuilder
Distribution-Zertifikate müssen auf CI-Server verfügbar sein
Gute Möglichkeit Apps für Betatest zu deployen ist TestFlight
https://testflightapp.com/
www.it-agile.de
67. Fazit
Vorgehen mit Walking Skeleton hat sehr geholfen
Betatest sehr gut angenommen worden
neue App lässt sich ständig auf verschiedene Geräte ‘Over The Air’ spielen
Frank-Tests helfen gut gegen Regression
Frank ist noch sehr Beta, hat sich in den letzten 6 Monaten aber stark
verbessert
www.it-agile.de