Agile Entwicklung für iOS und Android - xpdays.de · © 2015 andrena objects ag 1 Agile Entwicklung für iOS und Android Ilja Mutschnik und Simon Hartmann XPDays Germany 2015
Post on 02-Sep-2019
9 Views
Preview:
Transcript
© 2015 andrena objects ag
1
Agile Entwicklung für iOS und AndroidIlja Mutschnik und Simon Hartmann
XPDays Germany 2015
© 2015 andrena objects ag
2
Agile DevelopmentObjective-C
Swift
Testing
Continuous Integration
Scrum
Clean Code
AppCode
Xcode
Nutzer Feedback
Code Metriken
TDD
Java
Android Studio
Continuous Deployment
© 2015 andrena objects ag
3
Agenda
1.Der App-Markt 1. „There’s an app for that!" 2. Agil für Mobil: Ein Überblick
2.Der Prozess: Wie nutzen wir ihn am besten? 1. UI/UX, Developer, Designer … und der Flow 2. Frühes Testen und die Kundeneinbeziehung 3. Kurze Zyklen: Continuous Integration und Deployment
3.Das Produkt: Wie kommt die Qualität in den Code? 1. Code Metriken 2. Tests und die Teststrategie 3. Refactoring
© 2015 andrena objects ag
4
Agile Entwicklung für iOS und Android
1.Der App-Markt oder „There’s an app for that!" 1. „There’s an app for that!" 2. Agil für Mobil: Ein Überblick
2.Der Prozess: Wie nutzen wir ihn am besten? 1. UI/UX, Developer, Designer … und der Flow 2. Frühes Testen und die Kundeneinbeziehung 3. Kurze Zyklen: Continuous Integration und Deployment
3.Das Produkt: Wie kommt die Qualität in den Code? 1. Code Metriken 2. Tests und die Teststrategie 3. Refactoring
© 2015 andrena objects ag
6
Also: Hauptsache Geschwindigkeit? Nein!
Stellenausschreibung eines großen App-Hersteller:
Skills & Requirements […]
Testing - Honestly, our code coverage is a little lacking. We'd love your help to change this.[…]
© 2015 andrena objects ag
7
Agile Entwicklung für iOS und Android
1.Der App-Markt oder „There’s an app for that!" 1. „There’s an app for that!" 2. Agil für Mobil: Ein Überblick
2.Der Prozess: Wie nutzen wir ihn am besten? 1. UI/UX, Developer, Designer … und der Flow 2. Frühes Testen und die Kundeneinbeziehung 3. Kurze Zyklen: Continuous Integration und Deployment
3.Das Produkt: Wie kommt die Qualität in den Code? 1. Code Metriken 2. Tests und die Teststrategie 3. Refactoring
© 2015 andrena objects ag
8
Der Scrum Flow
SPRINT
2-4 weeks24 hours
Product Backlog
Sprint Backlog
Product Increment
© 2015 andrena objects ag
• Kurze Zyklen • App muss nicht gleich gesamten Umfang haben
(Unterscheidung: public / in-house) • wenige bis keine überflüssigen Funktionen durch
schnelles Feedback • Kommunikation im Team und mit dem Kunden • Wer ist Kunde? Wie können wir mit „ihm“ sprechen? • Keine ausgelagerte Entwicklung
• Continuous Deployment mit hoher Automatisation nutzen
9
Die wichtigsten Aspekte
© 2015 andrena objects ag
• Sehr schnelllebiger Markt
• Technologien • Geräte • Nutzerverhalten • Design
• hoher Anspruch an Qualität und Design • App Store / Google Play als einziger Verkaufskanal (v.a.
iOS)
10
Was sind die Besonderheiten der mobilen Entwicklung?
© 2015 andrena objects ag
11
Ok, und wie machen wir es richtig?
QualitätCode MetrikenRefactoring
Clean Code
Design Patterns…
kurze Entwicklungszyklenenger Kundenkontakt
Scrum
fast feedback iterative Planung
…
Cont. Integration & Deployment
richtige Frameworks und Tools
Extreme Programming
Tests
…
© 2015 andrena objects ag
12
Agile Entwicklung für iOS und Android
1.Der App-Markt oder „There’s an app for that!" 1. „There’s an app for that!" 2. Agil für Mobil: Ein Überblick
2.Der Prozess: Wie nutzen wir ihn am besten? 1. UI/UX, Developer, Designer … und der Flow 2. Frühes Testen und die Kundeneinbeziehung 3. Kurze Zyklen: Continuous Integration und Deployment
3.Das Produkt: Wie kommt die Qualität in den Code? 1. Code Metriken 2. Tests und die Teststrategie 3. Refactoring
© 2015 andrena objects ag
13
User Experience: Developer und Designer
Agile iOS Stewart Gleadow @stewgleadow
© 2015 andrena objects ag
14
User Experience: Developer und Designer
Agile iOS Stewart Gleadow @stewgleadow
© 2015 andrena objects ag
15
Der Anfang: Von der Idee zum Design
Mockup Implementierung…schleife Design 1.0
© 2015 andrena objects ag
17
Es geht besser…
+Sketch
Schnelles UI DesignLive Preview auf realem Device
Klick-Dummy aus Sketch
© 2015 andrena objects ag
18
Agile Entwicklung für iOS und Android
1.Der App-Markt oder „There’s an app for that!" 1. „There’s an app for that!" 2. Agil für Mobil: Ein Überblick
2.Der Prozess: Wie nutzen wir ihn am besten? 1. UI/UX, Developer, Designer … und der Flow 2. Frühes Testen und die Kundeneinbeziehung 3. Kurze Zyklen: Continuous Integration und Deployment
3.Das Produkt: Wie kommt die Qualität in den Code? 1. Code Metriken 2. Tests und die Teststrategie 3. Refactoring
© 2015 andrena objects ag
19
Kundeneinbeziehung
Wie erhalten wir Kundenfeedback?
Direktes FeedbackPersönlicher Kontakt mit PO
Tester „live“ beobachtenFeedbackoption in der App
Store Reviews
Indirektes FeedbackBeta-VerteilungCrashreports
Mobile Analytics
© 2015 andrena objects ag
20
Feedback Frameworks: Wunschkriterien
• Crashreports• Beta-Verteilung• Analytics (je nach Projekt)• Unterstützung von iOS und Android• Kostengünstig
© 2015 andrena objects ag
21
Kundeneinbeziehung
https://www.crashlytics.com/ www.google.com/analytics/mobile/
© 2015 andrena objects ag
22
Crashlytics
Desktop Integration
Beta Verteilung User Statistics + Event tracking
© 2015 andrena objects ag
25
Agile Entwicklung für iOS und Android
1.Der App-Markt oder „There’s an app for that!" 1. „There’s an app for that!" 2. Agil für Mobil: Ein Überblick
2.Der Prozess: Wie nutzen wir ihn am besten? 1. UI/UX, Developer, Designer … und der Flow 2. Frühes Testen und die Kundeneinbeziehung 3. Kurze Zyklen: Continuous Integration und Deployment
3.Das Produkt: Wie kommt die Qualität in den Code? 1. Code Metriken 2. Tests und die Teststrategie 3. Refactoring
© 2015 andrena objects ag
26
Continuous Integration iOS
Xcode Server Jenkins
Einrichtung ++ o
Wartung + o
Anpassung - ++
Automatisches Deployment
++ ++
Git Branches/Tags +/- +/+
Feedback ++ (Xcode Integration)
++
© 2015 andrena objects ag
29
Continuous Delivery iOS: Fastlane platform :ios do before_all do ensure_git_status_clean end
lane :beta do sigh
ipa( configuration: "Beta", scheme: "Wikipedia Beta", )
deliver end
lane :store do snapshot sigh
ipa( configuration: "Wikipedia", scheme: "Wikipedia", ) deliver end
end
© 2015 andrena objects ag
30
Continuous Integration: Android
Vorteile:1. Viele Plugins2. Kostenlos3. Große Community
Jenkins
© 2015 andrena objects ag
31
Agile Entwicklung für iOS und Android
1.Der App-Markt oder „There’s an app for that!" 1. „There’s an app for that!" 2. Agil für Mobil: Ein Überblick
2.Der Prozess: Wie nutzen wir ihn am besten? 1. UI/UX, Developer, Designer … und der Flow 2. Frühes Testen und die Kundeneinbeziehung 3. Kurze Zyklen: Continuous Integration und Deployment
3.Das Produkt: Wie kommt die Qualität in den Code? 1. Code Metriken 2. Tests und die Teststrategie 3. Refactoring
© 2015 andrena objects ag
33
andrena objects: Messung der Qualität mit SQI
Aus den Indikatormetriken wird der Softwarequalitätsindex (SQI) berechnet
https://www.andrena.de/code-assessment
© 2015 andrena objects ag
34
Wichtige Metriken und Tests
Static Analysis
Zyklische Abhängigkeit
UI Tests Code CoverageUnit Tests
Zyklomatische Komplexität Code Duplications
Methodenlänge
© 2015 andrena objects ag
35
Objective C: Jenkins + Toolset
Static Analysis
Zyklische Abhängigkeit
UI Tests Code CoverageUnit Tests
xcodebuild, ocunit2junit
OCLint, Clang, hfcca, objc_dep, Graphviz + Eigenentwicklung
gcovrUIAutomation, Appium, …
© 2015 andrena objects ag
36
Swift: Lokal und auf Xcode Server
SonarQube: ca. 90 Metriken (alle oben) - 5000 EUR Lizenz - (online demo) Tailor: Static Analyzer (26 Regeln) SwiftLint: „A tool to enforce Swift style and conventions.“
Static Analysis
Zyklische Abhängigkeit
UI Tests Code CoverageUnit Tests
Zykl. Komplexität Duplications Methodenlänge
Xcode Xcode Xcode
© 2015 andrena objects ag
37
Android
Static Analysis
Zyklische Abhängigkeit
UI Tests Code CoverageUnit Tests
Zykl. Komplexität Duplications Methodenlänge
Robolectric, JUnit Espresso, Spoon JaCoCo
Android Lint Android Studio
© 2015 andrena objects ag
38
Agile Entwicklung für iOS und Android
1.Der App-Markt oder „There’s an app for that!" 1. „There’s an app for that!" 2. Agil für Mobil: Ein Überblick
2.Der Prozess: Wie nutzen wir ihn am besten? 1. UI/UX, Developer, Designer … und der Flow 2. Frühes Testen und die Kundeneinbeziehung 3. Kurze Zyklen: Continuous Integration und Deployment
3.Das Produkt: Wie kommt die Qualität in den Code? 1. Code Metriken 2. Tests und die Teststrategie 3. Refactoring
© 2015 andrena objects ag
39
Mobile: Wichtige Aspekte beim Testen
• Unterschiedliche Geräte • Test: Mix aus Simulator und echten Geräten • Viele Variablen beim Nutzer
• Netzwerk-Verfügbarkeit • Displaygrößen • OS-Versionen • Hardware-Rechte(!)
© 2015 andrena objects ag
41
Teststrategie: Die mobile Testpyramide
Unit Tests
Beta Tester
autom. UI Tests
Integrations-/Akzeptanztestsz.B. Schnittstellen
Klassen, Methoden
© 2015 andrena objects ag
• Swift 2: @testable • Test-Framework empfehlenswert für
• bessere Lesbarkeit • bessere Strukturierung der Tests • aussagekräftigere Fehlermeldungen
42
Unit Test (iOS)
- XCTAssertTrue(contains(sillyMonkeys, kiki), "Expected sillyMonkeys to contain 'Kiki'")
+ expect(sillyMonkeys).to(contain(kiki))// Nimble
© 2015 andrena objects ag
43
Unit-Tests (iOS): Quick (BDD)
import Quick import Nimble
class TableOfContentsSpec: QuickSpec { override func spec() { describe("the 'Documentation' directory") { it("has everything you need to get started") { let sections = Directory("Documentation").sections expect(sections).to(contain("Installing Quick")) }
context("if it doesn't have what you're looking for") { it("needs to be updated") { let you = You(awesome: true) expect{you.submittedAnIssue}.toEventually(beTruthy()) } } } } }
© 2015 andrena objects ag
45
Unit Test (android): RobolectricProblem: Ausführung der Unit-Tests auf einem Gerät bzw. Emulator dauert sehr lange
Lösung: Robolectric -> Tests laufen auf JVM -> Implementierungen für android.jar-Classen
@RunWith(RobolectricGradleTestRunner.class) public class SomeActivityTest {
private SomeActivity activity;
@Before public void before() { activity = Robolectric.buildActivity(SomeActivity.class).create().get(); } @Test public void buttonClickShouldStartNewActivity() { … Intent intent = Robolectric.shadowOf(activity).peekNextStartedActivity(); … assertEquals(OtherActivity.class.getCanonicalName(), intent.getComponent().getClassName()); } }
© 2015 andrena objects ag
46
Unit Test (android): Mockito und Hamcrest Matchers
@RunWith(RobolectricGradleTestRunner.class) public class SomeActivityTest {
@Mock private DbManager dbManager;
@Before public void before() { MockitoAnnotations.initMocks(this); } @Test public void buttonClickShouldStartNewActivity() { when(dbManager.getEntryForId(„42“)).thenReturn(„Max Mustermann“)
//do something with dbManager mock
assertThat(dbManager.getEntryForId(„42“), is(equalTo(„Max Mustermann“))); verify(dbManager).getEntryForId(Matchers.eq(42)); ;}
© 2015 andrena objects ag
47
UI Test (android): Espresso
Automatische Synchronisation mit UI
Einfache API •auswählen: onView(Matcher<View>) •ausführen: perform(ViewAction) •prüfen: check(ViewAssertion)
Beispiel:
onView(withId(R.id.button)) .perform(click()); onView(withId(R.id.textView)) .check(matches(withText(„abc“)));
© 2015 andrena objects ag
48
Agile Entwicklung für iOS und Android
1.Der App-Markt oder „There’s an app for that!" 1. „There’s an app for that!" 2. Agil für Mobil: Ein Überblick
2.Der Prozess: Wie nutzen wir ihn am besten? 1. UI/UX, Developer, Designer … und der Flow 2. Frühes Testen und die Kundeneinbeziehung 3. Kurze Zyklen: Continuous Integration und Deployment
3.Das Produkt: Wie kommt die Qualität in den Code? 1. Code Metriken 2. Tests und die Teststrategie 3. Refactoring
© 2015 andrena objects ag
51
AppCode (JetBrains)
+ -Sehr gutes Refactoring (ObjC) kein kompletter Workflow
UI anpassbar noch: Kein Refactoring von Swift Code
Plugins
auto imports
Quickfixes
„Code inspections“
© 2015 andrena objects ag
52
IDE: Die Lösung (… hoffentlich bald wieder)
Xcode
Konfiguration Interface Builder
CoreData UI Debugging
UI Tests
+
AppCode
Development Refactoring Debugging
top related