iOS-Entwicklung - der agile Weg

2.699 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

iOS-Entwicklung - der agile Weg

  1. 1. Sven Günther – it-agile GmbHiOS-Entwicklung –der agile Weg
  2. 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. 3. 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.
  4. 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. Walking Skeleton
  5. 5. Jenkins-Logo (c) www.jenkins-ci.org
  6. 6. git push Jenkins-Logo (c) www.jenkins-ci.org
  7. 7. git push Compile Jenkins-Logo (c) www.jenkins-ci.org
  8. 8. git push Compile UnitTest Jenkins-Logo (c) www.jenkins-ci.org
  9. 9. Akzeptanz-git push Compile UnitTest Test Jenkins-Logo (c) www.jenkins-ci.org
  10. 10. Akzeptanz- Beta-git push Compile UnitTest Test Deploym. Jenkins-Logo (c) www.jenkins-ci.org
  11. 11. Betatester
  12. 12. Weiterentwicklung in kleinen Schritten
  13. 13. Weiterentwicklung in kleinen Schritten Ergebnisanzeige
  14. 14. Weiterentwicklung in kleinen Schritten Ergebnisanzeige Suchparameter
  15. 15. Weiterentwicklung in kleinen Schritten Ergebnisanzeige Suchparameter Design
  16. 16. Testgetriebene Entwicklung - TDD
  17. 17. Testgetriebene Entwicklung - TDD neue Funktionalität wird durch Test beschrieben Test
  18. 18. Testgetriebene Entwicklung - TDD neue Funktionalität wird durch Test beschrieben Test Green Funktionalität wird implementiert
  19. 19. Testgetriebene Entwicklung - TDD neue Funktionalität wird durch Test beschrieben Test Funktionalität wird Code wird Refactor Green implementiert aufgeräumt
  20. 20. Unit Tests
  21. 21. Unit Tests it SenT estingKOCUnit / pple.co m) per.a(develo
  22. 22. Unit Tests it SenT estingK (gith G ub.co HUnitOCUnit / pple.co m) m/ga per.a briel/(develo gh-u nit )
  23. 23. Unit Tests it SenT estingK (gith G ub.co HUnitOCUnit / pple.co m) m/ga per.a briel/(develo gh-u nit ) GTMTest (code.google.com)
  24. 24. 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
  25. 25. 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
  26. 26. 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
  27. 27. OC-Unit - Anatomie eines Unit-Tests
  28. 28. Mocking
  29. 29. Mocking OCMock(ocmock.org)
  30. 30. 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
  31. 31. 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
  32. 32. Konfiguration
  33. 33. Automatische Akzeptanztests
  34. 34. Automatische Akzeptanztests tion UI A utomaApple m) per.apple.co(develo
  35. 35. Automatische Akzeptanztests tion UI A utoma KIFApple m) (githu per.apple.co b.c om/sq(develo uare /KIF)
  36. 36. Automatische Akzeptanztests tion UI A utoma KIFApple m) (githu per.apple.co b.c om/sq(develo uare /KIF) Frank (github.com/moredip/Frank)
  37. 37. 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
  38. 38. Frank  App wird um HTTP-Server erweitert Abb. (c) github.com/moredip/Frank
  39. 39. Frank  App wird um HTTP-Server erweitert  Über FrankDriver wird die UI angesteuert Abb. (c) github.com/moredip/Frank
  40. 40. Frank  App wird um HTTP-Server erweitert  Über FrankDriver wird die UI angesteuert  Testscripte werden mit cucumber geschrieben Abb. (c) github.com/moredip/Frank
  41. 41. 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
  42. 42. 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
  43. 43. Cucumber http://cukes.info/
  44. 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
  45. 45. 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
  46. 46. 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, ...
  47. 47. Demo Frank und Cucumber
  48. 48. Cucumber Reports
  49. 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
  50. 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
  51. 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
  52. 52. Xcode auf der Console xcodebuildxcodebuild -target "myapp" -configuration "debug" build
  53. 53. Makefiles
  54. 54. Makefiles
  55. 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)
  56. 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
  57. 57. 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/)
  58. 58. XCode-Logo (c) www.apple.com git-Logo (c) www.git-scm.comJenkins-Logo (c) www.jenkins-ci.org
  59. 59. XCode-Logo (c) www.apple.com git-Logo (c) www.git-scm.comJenkins-Logo (c) www.jenkins-ci.org
  60. 60. XCode-Logo (c) www.apple.com git-Logo (c) www.git-scm.comJenkins-Logo (c) www.jenkins-ci.org
  61. 61. XCode-Logo (c) www.apple.com git-Logo (c) www.git-scm.comJenkins-Logo (c) www.jenkins-ci.org
  62. 62. XCode-Logo (c) www.apple.com git-Logo (c) www.git-scm.comJenkins-Logo (c) www.jenkins-ci.org
  63. 63. Betabuilder Ruby-Gem von Luke Redpath https://github.com/lukeredpath/betabuilder Distribution-Zertifikate müssen auf CI-Server verfügbar sein
  64. 64. 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/
  65. 65. Vielen Dank für die Aufmerksamkeit

×