SlideShare ist ein Scribd-Unternehmen logo
1 von 70
Sven Günther – it-agile GmbH


iOS-Entwicklung –
der agile Weg
   Softwareentwickler seit 1997
   Objective-C seit 2007
   iOS Entwicklung seit 2009
   Entwickler und Coach für agile Softwareentwicklung bei it-agile
   Twitter: @iNevs
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.
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
Jenkins-Logo (c) www.jenkins-ci.org
git push




           Jenkins-Logo (c) www.jenkins-ci.org
git push   Compile




                     Jenkins-Logo (c) www.jenkins-ci.org
git push   Compile   UnitTest




                                Jenkins-Logo (c) www.jenkins-ci.org
Akzeptanz-
git push   Compile   UnitTest
                                   Test




                                             Jenkins-Logo (c) www.jenkins-ci.org
Akzeptanz-            Beta-
git push   Compile   UnitTest
                                   Test              Deploym.




                                             Jenkins-Logo (c) www.jenkins-ci.org
Betatester
Weiterentwicklung in kleinen Schritten
Weiterentwicklung in kleinen Schritten



             Ergebnisanzeige
Weiterentwicklung in kleinen Schritten



                Ergebnisanzeige




         Suchparameter
Weiterentwicklung in kleinen Schritten



                Ergebnisanzeige




         Suchparameter



                                  Design
Testgetriebene Entwicklung - TDD
Testgetriebene Entwicklung - TDD

        neue Funktionalität wird durch Test beschrieben


                           Test
Testgetriebene Entwicklung - TDD

        neue Funktionalität wird durch Test beschrieben


                           Test




                                     Green
                                               Funktionalität wird
                                                 implementiert
Testgetriebene Entwicklung - TDD

            neue Funktionalität wird durch Test beschrieben


                               Test




                                                   Funktionalität wird
     Code wird     Refactor              Green
                                                     implementiert
    aufgeräumt
Unit Tests
Unit Tests



                      it
         SenT estingK
OCUnit /     pple.co
                     m)
        per.a
(develo
Unit Tests



                      it
         SenT estingK               (gith      G
                                         ub.co HUnit
OCUnit /     pple.co
                     m)                       m/ga
        per.a                                     briel/
(develo                                                  gh-u
                                                             nit   )
Unit Tests



                      it
         SenT estingK                   (gith      G
                                             ub.co HUnit
OCUnit /     pple.co
                     m)                           m/ga
        per.a                                         briel/
(develo                                                      gh-u
                                                                 nit   )

                                GTMTest
                           (code.google.com)
Unit Tests



                          it
             SenT estingK                   (gith      G
                                                 ub.co HUnit
    OCUnit /     pple.co
                         m)                           m/ga
            per.a                                         briel/
    (develo                                                      gh-u
                                                                     nit   )

                                    GTMTest
                               (code.google.com)



   Treiben Dein Design während der Entwicklung
   Geben Dir ein Sicherheitsnetz für Änderungen
   Beugen Regression vor
   Erlauben Refactorings
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
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
OC-Unit - Anatomie eines Unit-Tests
Mocking
Mocking




  OCMock
(ocmock.org)
Mocking




                                OCMock
                              (ocmock.org)




   Stellvertreterobjekte in Tests
   dienen als Stellvertreter für reale Objekte
   sind essentiell zum Entkoppeln von Abhängigkeiten
   Simulieren Interaktionen mit anderen Objekten (z.B. Netzwerk)
      Mocks = Stellvertreter die erwartetes Verhalten überprüfen
      Stubs = Stellvertreter mit einem definierten Ein- / Ausgabeverhalten
Beispiel

#import <SenTestingKit/SenTestingKit.h>
#import <UIKit/UIKit.h>
#import <OCMock/OCMock.h>

@interface SmokeTest : SenTestCase
@end


@implementation SmokeTest

-(void) testThatUsesMocks {
! id mock = [OCMockObject mockForClass:[NSString class]];
! [[[mock stub] andReturn:@"i am a mock"] lowercaseString];
!
! STAssertEqualObjects(@"i am a mock", [mock lowercaseString], nil);
}

@end
Konfiguration
Automatische Akzeptanztests
Automatische Akzeptanztests



                  tion
      UI A  utoma
Apple                m)
        per.apple.co
(develo
Automatische Akzeptanztests



                  tion
      UI A  utoma                                   KIF
Apple                m)               (githu
        per.apple.co                        b.c   om/sq
(develo                                                 uare   /KIF)
Automatische Akzeptanztests



                  tion
      UI A  utoma                                       KIF
Apple                m)                   (githu
        per.apple.co                            b.c   om/sq
(develo                                                     uare   /KIF)
                                Frank
                     (github.com/moredip/Frank)
Automatische Akzeptanztests



                      tion
          UI A  utoma                                       KIF
    Apple                m)                   (githu
            per.apple.co                            b.c   om/sq
    (develo                                                     uare   /KIF)
                                    Frank
                         (github.com/moredip/Frank)



   Testen die fachliche Funktionalität der App
   Treiben die fachliche Weiterentwicklung
   Akzeptanzkriterien werden durch ProductOwner beschrieben
   Tests bilden die Akzeptanzkriterien ab
Frank




    App wird um HTTP-Server erweitert




                                         Abb. (c) github.com/moredip/Frank
Frank




    App wird um HTTP-Server erweitert
    Über FrankDriver wird die UI angesteuert


                                                Abb. (c) github.com/moredip/Frank
Frank




    App wird um HTTP-Server erweitert
    Über FrankDriver wird die UI angesteuert
    Testscripte werden mit cucumber geschrieben

                                                   Abb. (c) github.com/moredip/Frank
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
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
Cucumber

   http://cukes.info/
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
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
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, ...
Demo Frank und Cucumber
Cucumber Reports
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
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
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
Xcode auf der Console


                        xcodebuild




xcodebuild -target "myapp" -configuration "debug" build
Makefiles
Makefiles
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)
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
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/)
XCode-Logo (c) www.apple.com
      git-Logo (c) www.git-scm.com
Jenkins-Logo (c) www.jenkins-ci.org
XCode-Logo (c) www.apple.com
      git-Logo (c) www.git-scm.com
Jenkins-Logo (c) www.jenkins-ci.org
XCode-Logo (c) www.apple.com
      git-Logo (c) www.git-scm.com
Jenkins-Logo (c) www.jenkins-ci.org
XCode-Logo (c) www.apple.com
      git-Logo (c) www.git-scm.com
Jenkins-Logo (c) www.jenkins-ci.org
XCode-Logo (c) www.apple.com
      git-Logo (c) www.git-scm.com
Jenkins-Logo (c) www.jenkins-ci.org
Betabuilder
   Ruby-Gem von Luke Redpath
   https://github.com/lukeredpath/betabuilder
   Distribution-Zertifikate müssen auf CI-Server verfügbar sein
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/
Vielen Dank für die Aufmerksamkeit

Weitere ähnliche Inhalte

Andere mochten auch

Thesis_Seminar 03-04-2012
Thesis_Seminar 03-04-2012Thesis_Seminar 03-04-2012
Thesis_Seminar 03-04-2012A_Kl
 
Historia da igreja i aula 3
Historia da igreja i  aula 3Historia da igreja i  aula 3
Historia da igreja i aula 3Moisés Sampaio
 
Présentation baromètre michael page distribution commerce 2014
Présentation baromètre michael page distribution commerce 2014Présentation baromètre michael page distribution commerce 2014
Présentation baromètre michael page distribution commerce 2014MagazineLSA
 
Das Büro als Denkraum - Orte, Umgebungen und Schnittstellen zukünftiger Wisse...
Das Büro als Denkraum - Orte, Umgebungen und Schnittstellen zukünftiger Wisse...Das Büro als Denkraum - Orte, Umgebungen und Schnittstellen zukünftiger Wisse...
Das Büro als Denkraum - Orte, Umgebungen und Schnittstellen zukünftiger Wisse...FutureManagementGroup AG
 
Viral Strategies Buzz Marketing
Viral Strategies Buzz MarketingViral Strategies Buzz Marketing
Viral Strategies Buzz MarketingEmakina
 
El Reto de la Universidad 2.0: Reclutamiento y Retención de Estudiantes a tra...
El Reto de la Universidad 2.0: Reclutamiento y Retención de Estudiantes a tra...El Reto de la Universidad 2.0: Reclutamiento y Retención de Estudiantes a tra...
El Reto de la Universidad 2.0: Reclutamiento y Retención de Estudiantes a tra...Digetech.net
 
Python for Image Understanding: Deep Learning with Convolutional Neural Nets
Python for Image Understanding: Deep Learning with Convolutional Neural NetsPython for Image Understanding: Deep Learning with Convolutional Neural Nets
Python for Image Understanding: Deep Learning with Convolutional Neural NetsRoelof Pieters
 
Inha 1-métadonnées
Inha 1-métadonnéesInha 1-métadonnées
Inha 1-métadonnéesPeccatte
 
SOCIAL MEDIA FÜR NPO´s - MANDARIN MEDIEN, Niklas Jordan
SOCIAL MEDIA FÜR NPO´s - MANDARIN MEDIEN, Niklas JordanSOCIAL MEDIA FÜR NPO´s - MANDARIN MEDIEN, Niklas Jordan
SOCIAL MEDIA FÜR NPO´s - MANDARIN MEDIEN, Niklas JordanMANDARIN MEDIEN GmbH
 
Markenpositionierung - Bedeutung für den Erfolg einer Marke in dynamischen Mä...
Markenpositionierung - Bedeutung für den Erfolg einer Marke in dynamischen Mä...Markenpositionierung - Bedeutung für den Erfolg einer Marke in dynamischen Mä...
Markenpositionierung - Bedeutung für den Erfolg einer Marke in dynamischen Mä...Creative Advantage GmbH
 
Les collectivités territoriales et le financement des lieux-de-culte
Les collectivités territoriales et le financement des lieux-de-culteLes collectivités territoriales et le financement des lieux-de-culte
Les collectivités territoriales et le financement des lieux-de-culteKantar
 
Lésions des tendons extenseurs
Lésions des tendons extenseurs Lésions des tendons extenseurs
Lésions des tendons extenseurs Smail Rezzik
 

Andere mochten auch (18)

Thesis_Seminar 03-04-2012
Thesis_Seminar 03-04-2012Thesis_Seminar 03-04-2012
Thesis_Seminar 03-04-2012
 
Historia da igreja i aula 3
Historia da igreja i  aula 3Historia da igreja i  aula 3
Historia da igreja i aula 3
 
Produktkatalog, Stand September 2012
Produktkatalog, Stand September 2012Produktkatalog, Stand September 2012
Produktkatalog, Stand September 2012
 
Appunti Info Indust
Appunti Info IndustAppunti Info Indust
Appunti Info Indust
 
Présentation baromètre michael page distribution commerce 2014
Présentation baromètre michael page distribution commerce 2014Présentation baromètre michael page distribution commerce 2014
Présentation baromètre michael page distribution commerce 2014
 
Das Büro als Denkraum - Orte, Umgebungen und Schnittstellen zukünftiger Wisse...
Das Büro als Denkraum - Orte, Umgebungen und Schnittstellen zukünftiger Wisse...Das Büro als Denkraum - Orte, Umgebungen und Schnittstellen zukünftiger Wisse...
Das Büro als Denkraum - Orte, Umgebungen und Schnittstellen zukünftiger Wisse...
 
Viral Strategies Buzz Marketing
Viral Strategies Buzz MarketingViral Strategies Buzz Marketing
Viral Strategies Buzz Marketing
 
Grandes presas
Grandes presasGrandes presas
Grandes presas
 
El Reto de la Universidad 2.0: Reclutamiento y Retención de Estudiantes a tra...
El Reto de la Universidad 2.0: Reclutamiento y Retención de Estudiantes a tra...El Reto de la Universidad 2.0: Reclutamiento y Retención de Estudiantes a tra...
El Reto de la Universidad 2.0: Reclutamiento y Retención de Estudiantes a tra...
 
Python for Image Understanding: Deep Learning with Convolutional Neural Nets
Python for Image Understanding: Deep Learning with Convolutional Neural NetsPython for Image Understanding: Deep Learning with Convolutional Neural Nets
Python for Image Understanding: Deep Learning with Convolutional Neural Nets
 
11 ecorregiones
11 ecorregiones11 ecorregiones
11 ecorregiones
 
Inha 1-métadonnées
Inha 1-métadonnéesInha 1-métadonnées
Inha 1-métadonnées
 
SOCIAL MEDIA FÜR NPO´s - MANDARIN MEDIEN, Niklas Jordan
SOCIAL MEDIA FÜR NPO´s - MANDARIN MEDIEN, Niklas JordanSOCIAL MEDIA FÜR NPO´s - MANDARIN MEDIEN, Niklas Jordan
SOCIAL MEDIA FÜR NPO´s - MANDARIN MEDIEN, Niklas Jordan
 
Markenpositionierung - Bedeutung für den Erfolg einer Marke in dynamischen Mä...
Markenpositionierung - Bedeutung für den Erfolg einer Marke in dynamischen Mä...Markenpositionierung - Bedeutung für den Erfolg einer Marke in dynamischen Mä...
Markenpositionierung - Bedeutung für den Erfolg einer Marke in dynamischen Mä...
 
Les collectivités territoriales et le financement des lieux-de-culte
Les collectivités territoriales et le financement des lieux-de-culteLes collectivités territoriales et le financement des lieux-de-culte
Les collectivités territoriales et le financement des lieux-de-culte
 
Atelier Avis Clients etourisme
Atelier Avis Clients etourismeAtelier Avis Clients etourisme
Atelier Avis Clients etourisme
 
Introduction aux open badges
Introduction aux open badgesIntroduction aux open badges
Introduction aux open badges
 
Lésions des tendons extenseurs
Lésions des tendons extenseurs Lésions des tendons extenseurs
Lésions des tendons extenseurs
 

Ähnlich wie iOS-Entwicklung - der agile Weg

BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...Marc Müller
 
Eclipse, Git und Gerrit
Eclipse, Git und GerritEclipse, Git und Gerrit
Eclipse, Git und GerritStefan Lay
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsGFU Cyrus AG
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...Marc Müller
 
Framework-Qualität: Tests als Gütesiegel
Framework-Qualität: Tests als GütesiegelFramework-Qualität: Tests als Gütesiegel
Framework-Qualität: Tests als GütesiegelBenjamin Eberlei
 
Testen mit, durch und in Scrum
Testen mit, durch und in ScrumTesten mit, durch und in Scrum
Testen mit, durch und in ScrumFrank Düsterbeck
 
Testautomatisierung mit CodedUI für Fortgeschrittende
Testautomatisierung mit CodedUI für FortgeschrittendeTestautomatisierung mit CodedUI für Fortgeschrittende
Testautomatisierung mit CodedUI für FortgeschrittendeNico Orschel
 
Test Management mit Visual Studio 2012
Test Management mit Visual Studio 2012Test Management mit Visual Studio 2012
Test Management mit Visual Studio 2012Nico Orschel
 
Dev ops testautomatisierer bei Technosoft
Dev ops testautomatisierer bei TechnosoftDev ops testautomatisierer bei Technosoft
Dev ops testautomatisierer bei TechnosoftBart Zwager
 
Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Oliver Klee
 
Unit testing mit Javascript
Unit testing mit JavascriptUnit testing mit Javascript
Unit testing mit Javascriptjoergreichert
 
Android Entwicklung GTUG München 2009
Android Entwicklung GTUG München 2009Android Entwicklung GTUG München 2009
Android Entwicklung GTUG München 2009greenrobot
 
Softwaremonitoring mit prometheus
Softwaremonitoring mit prometheusSoftwaremonitoring mit prometheus
Softwaremonitoring mit prometheusGeorg Öttl
 
Ionic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenHendrik Lösch
 
CI-Ampel für Jenkins mit RaspberryPi und Python
CI-Ampel für Jenkins mit RaspberryPi und PythonCI-Ampel für Jenkins mit RaspberryPi und Python
CI-Ampel für Jenkins mit RaspberryPi und PythonThomas Koch
 
Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...
Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...
Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...Nico Orschel
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptSebastian Springer
 
DevDay 2016 Keynote - Die Evolution agiler Software Entwicklung
DevDay 2016 Keynote - Die Evolution agiler Software EntwicklungDevDay 2016 Keynote - Die Evolution agiler Software Entwicklung
DevDay 2016 Keynote - Die Evolution agiler Software EntwicklungMarc Müller
 

Ähnlich wie iOS-Entwicklung - der agile Weg (20)

BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
 
Eclipse, Git und Gerrit
Eclipse, Git und GerritEclipse, Git und Gerrit
Eclipse, Git und Gerrit
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
 
Framework-Qualität: Tests als Gütesiegel
Framework-Qualität: Tests als GütesiegelFramework-Qualität: Tests als Gütesiegel
Framework-Qualität: Tests als Gütesiegel
 
Testen mit, durch und in Scrum
Testen mit, durch und in ScrumTesten mit, durch und in Scrum
Testen mit, durch und in Scrum
 
Testautomatisierung mit CodedUI für Fortgeschrittende
Testautomatisierung mit CodedUI für FortgeschrittendeTestautomatisierung mit CodedUI für Fortgeschrittende
Testautomatisierung mit CodedUI für Fortgeschrittende
 
Iks Sonderdruck Eclipse Magazin Mai 2010: Automatisierte SWTBot-Tests
Iks Sonderdruck Eclipse Magazin Mai 2010: Automatisierte SWTBot-TestsIks Sonderdruck Eclipse Magazin Mai 2010: Automatisierte SWTBot-Tests
Iks Sonderdruck Eclipse Magazin Mai 2010: Automatisierte SWTBot-Tests
 
Test Management mit Visual Studio 2012
Test Management mit Visual Studio 2012Test Management mit Visual Studio 2012
Test Management mit Visual Studio 2012
 
Dev ops testautomatisierer bei Technosoft
Dev ops testautomatisierer bei TechnosoftDev ops testautomatisierer bei Technosoft
Dev ops testautomatisierer bei Technosoft
 
Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Test-driven Development mit TYPO3
Test-driven Development mit TYPO3
 
Eat Your Own Dog Food
Eat Your Own Dog FoodEat Your Own Dog Food
Eat Your Own Dog Food
 
Unit testing mit Javascript
Unit testing mit JavascriptUnit testing mit Javascript
Unit testing mit Javascript
 
Android Entwicklung GTUG München 2009
Android Entwicklung GTUG München 2009Android Entwicklung GTUG München 2009
Android Entwicklung GTUG München 2009
 
Softwaremonitoring mit prometheus
Softwaremonitoring mit prometheusSoftwaremonitoring mit prometheus
Softwaremonitoring mit prometheus
 
Ionic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf Steroiden
 
CI-Ampel für Jenkins mit RaspberryPi und Python
CI-Ampel für Jenkins mit RaspberryPi und PythonCI-Ampel für Jenkins mit RaspberryPi und Python
CI-Ampel für Jenkins mit RaspberryPi und Python
 
Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...
Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...
Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
DevDay 2016 Keynote - Die Evolution agiler Software Entwicklung
DevDay 2016 Keynote - Die Evolution agiler Software EntwicklungDevDay 2016 Keynote - Die Evolution agiler Software Entwicklung
DevDay 2016 Keynote - Die Evolution agiler Software Entwicklung
 

Mehr von Sven Günther

Agile Transitionen mit Kanban - Meetup 20210317
Agile Transitionen mit Kanban - Meetup 20210317Agile Transitionen mit Kanban - Meetup 20210317
Agile Transitionen mit Kanban - Meetup 20210317Sven Günther
 
Was Manager über agile Entwicklungspraktiken wissen müssen
Was Manager über agile Entwicklungspraktiken wissen müssenWas Manager über agile Entwicklungspraktiken wissen müssen
Was Manager über agile Entwicklungspraktiken wissen müssenSven Günther
 
Mit agilen Praktiken SOLIDe Systeme bauen
Mit agilen Praktiken SOLIDe Systeme bauenMit agilen Praktiken SOLIDe Systeme bauen
Mit agilen Praktiken SOLIDe Systeme bauenSven Günther
 
Continuous Integration for iOS Developer
Continuous Integration for iOS DeveloperContinuous Integration for iOS Developer
Continuous Integration for iOS DeveloperSven Günther
 
iOS: Continuous Integration and One Click Deployments
iOS: Continuous Integration and One Click DeploymentsiOS: Continuous Integration and One Click Deployments
iOS: Continuous Integration and One Click DeploymentsSven Günther
 
Pitfalls bei der iOS-Entwicklung
Pitfalls bei der iOS-EntwicklungPitfalls bei der iOS-Entwicklung
Pitfalls bei der iOS-EntwicklungSven Günther
 

Mehr von Sven Günther (6)

Agile Transitionen mit Kanban - Meetup 20210317
Agile Transitionen mit Kanban - Meetup 20210317Agile Transitionen mit Kanban - Meetup 20210317
Agile Transitionen mit Kanban - Meetup 20210317
 
Was Manager über agile Entwicklungspraktiken wissen müssen
Was Manager über agile Entwicklungspraktiken wissen müssenWas Manager über agile Entwicklungspraktiken wissen müssen
Was Manager über agile Entwicklungspraktiken wissen müssen
 
Mit agilen Praktiken SOLIDe Systeme bauen
Mit agilen Praktiken SOLIDe Systeme bauenMit agilen Praktiken SOLIDe Systeme bauen
Mit agilen Praktiken SOLIDe Systeme bauen
 
Continuous Integration for iOS Developer
Continuous Integration for iOS DeveloperContinuous Integration for iOS Developer
Continuous Integration for iOS Developer
 
iOS: Continuous Integration and One Click Deployments
iOS: Continuous Integration and One Click DeploymentsiOS: Continuous Integration and One Click Deployments
iOS: Continuous Integration and One Click Deployments
 
Pitfalls bei der iOS-Entwicklung
Pitfalls bei der iOS-EntwicklungPitfalls bei der iOS-Entwicklung
Pitfalls bei der iOS-Entwicklung
 

iOS-Entwicklung - der agile Weg

  • 1. Sven Günther – it-agile GmbH iOS-Entwicklung – der agile Weg
  • 2. Softwareentwickler seit 1997  Objective-C seit 2007  iOS Entwicklung seit 2009  Entwickler und Coach für agile Softwareentwicklung bei it-agile  Twitter: @iNevs
  • 3.
  • 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.
  • 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
  • 6.
  • 7.
  • 9. git push Jenkins-Logo (c) www.jenkins-ci.org
  • 10. git push Compile Jenkins-Logo (c) www.jenkins-ci.org
  • 11. git push Compile UnitTest Jenkins-Logo (c) www.jenkins-ci.org
  • 12. Akzeptanz- git push Compile UnitTest Test Jenkins-Logo (c) www.jenkins-ci.org
  • 13. Akzeptanz- Beta- git push Compile UnitTest Test Deploym. Jenkins-Logo (c) www.jenkins-ci.org
  • 16. Weiterentwicklung in kleinen Schritten Ergebnisanzeige
  • 17. Weiterentwicklung in kleinen Schritten Ergebnisanzeige Suchparameter
  • 18. Weiterentwicklung in kleinen Schritten Ergebnisanzeige Suchparameter Design
  • 20. Testgetriebene Entwicklung - TDD neue Funktionalität wird durch Test beschrieben Test
  • 21. Testgetriebene Entwicklung - TDD neue Funktionalität wird durch Test beschrieben Test Green Funktionalität wird implementiert
  • 22. Testgetriebene Entwicklung - TDD neue Funktionalität wird durch Test beschrieben Test Funktionalität wird Code wird Refactor Green implementiert aufgeräumt
  • 24. Unit Tests it SenT estingK OCUnit / pple.co m) per.a (develo
  • 25. Unit Tests it SenT estingK (gith G ub.co HUnit OCUnit / pple.co m) m/ga per.a briel/ (develo gh-u nit )
  • 26. Unit Tests it SenT estingK (gith G ub.co HUnit OCUnit / pple.co m) m/ga per.a briel/ (develo gh-u nit ) GTMTest (code.google.com)
  • 27. Unit Tests it SenT estingK (gith G ub.co HUnit OCUnit / pple.co m) m/ga per.a briel/ (develo gh-u nit ) GTMTest (code.google.com)  Treiben Dein Design während der Entwicklung  Geben Dir ein Sicherheitsnetz für Änderungen  Beugen Regression vor  Erlauben Refactorings
  • 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
  • 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
  • 30. OC-Unit - Anatomie eines Unit-Tests
  • 33. Mocking OCMock (ocmock.org)  Stellvertreterobjekte in Tests  dienen als Stellvertreter für reale Objekte  sind essentiell zum Entkoppeln von Abhängigkeiten  Simulieren Interaktionen mit anderen Objekten (z.B. Netzwerk)  Mocks = Stellvertreter die erwartetes Verhalten überprüfen  Stubs = Stellvertreter mit einem definierten Ein- / Ausgabeverhalten
  • 34. Beispiel #import <SenTestingKit/SenTestingKit.h> #import <UIKit/UIKit.h> #import <OCMock/OCMock.h> @interface SmokeTest : SenTestCase @end @implementation SmokeTest -(void) testThatUsesMocks { ! id mock = [OCMockObject mockForClass:[NSString class]]; ! [[[mock stub] andReturn:@"i am a mock"] lowercaseString]; ! ! STAssertEqualObjects(@"i am a mock", [mock lowercaseString], nil); } @end
  • 37. Automatische Akzeptanztests tion UI A utoma Apple m) per.apple.co (develo
  • 38. Automatische Akzeptanztests tion UI A utoma KIF Apple m) (githu per.apple.co b.c om/sq (develo uare /KIF)
  • 39. Automatische Akzeptanztests tion UI A utoma KIF Apple m) (githu per.apple.co b.c om/sq (develo uare /KIF) Frank (github.com/moredip/Frank)
  • 40. Automatische Akzeptanztests tion UI A utoma KIF Apple m) (githu per.apple.co b.c om/sq (develo uare /KIF) Frank (github.com/moredip/Frank)  Testen die fachliche Funktionalität der App  Treiben die fachliche Weiterentwicklung  Akzeptanzkriterien werden durch ProductOwner beschrieben  Tests bilden die Akzeptanzkriterien ab
  • 41. Frank  App wird um HTTP-Server erweitert Abb. (c) github.com/moredip/Frank
  • 42. Frank  App wird um HTTP-Server erweitert  Über FrankDriver wird die UI angesteuert Abb. (c) github.com/moredip/Frank
  • 43. Frank  App wird um HTTP-Server erweitert  Über FrankDriver wird die UI angesteuert  Testscripte werden mit cucumber geschrieben Abb. (c) github.com/moredip/Frank
  • 44. 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
  • 45. 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
  • 46. Cucumber  http://cukes.info/
  • 47. 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
  • 48. 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
  • 49. 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, ...
  • 50. Demo Frank und Cucumber
  • 52. 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
  • 53. 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
  • 54. 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
  • 55. Xcode auf der Console xcodebuild xcodebuild -target "myapp" -configuration "debug" build
  • 58. 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)
  • 59. 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
  • 60.
  • 61. 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/)
  • 62. XCode-Logo (c) www.apple.com git-Logo (c) www.git-scm.com Jenkins-Logo (c) www.jenkins-ci.org
  • 63. XCode-Logo (c) www.apple.com git-Logo (c) www.git-scm.com Jenkins-Logo (c) www.jenkins-ci.org
  • 64. XCode-Logo (c) www.apple.com git-Logo (c) www.git-scm.com Jenkins-Logo (c) www.jenkins-ci.org
  • 65. XCode-Logo (c) www.apple.com git-Logo (c) www.git-scm.com Jenkins-Logo (c) www.jenkins-ci.org
  • 66. XCode-Logo (c) www.apple.com git-Logo (c) www.git-scm.com Jenkins-Logo (c) www.jenkins-ci.org
  • 67. Betabuilder  Ruby-Gem von Luke Redpath  https://github.com/lukeredpath/betabuilder  Distribution-Zertifikate müssen auf CI-Server verfügbar sein
  • 68. 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/
  • 69.
  • 70. Vielen Dank für die Aufmerksamkeit

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n