ZHAW Zürcher Hochschule für Angewandte Wissenschaften
Bachelorstudium Informatik
Semesterarbeit
Dozent: Beat Seeliger
Herbstsemester 2013

iPlanningPoker

Cyril Gabathuler, cyril.gabathuler@icloud.com
14. November 2013

Inhaltsverzeichnis

    Zusammenfassung

    Das Ziel dieser Semesterarbeit war die Erstellung einer App für das iPhone und das iPad. Die App wurde entwickelt, um das Planning Poker digital und drahtlos stattfinden zu lassen.

    Mehrere iPhones können sich drahtlos mit einem iPad verknüpfen. Die Teilnehmer können auf dem iPhone eine Karte mit Storypoints auswählen und diese an das iPad übermitteln. Haben sich alle Teilnehmer für einen Wert entschieden, werden diese auf dem iPad angezeigt. Danach kann eine neue Runde begonnen werden und die Teilnehmer können sich wieder für eine Karte entscheiden.

    Planning Poker wird in der agilen Projektmethode Scrum verwendet, um Anforderungen in deren Komplexität zu schätzen. Die App wurde entwickelt, um bekannte Probleme zu vereinfachen. Dieses Ziel wurden erreicht.

    Ein aufwendiger, aber auch spannender, Teil war die Umsetzung der Kommunikation zwischen den iPhones und dem iPad. Da diese drahtlos stattfindet, können verschiedenste Fehlerquellen auftauchen. Es wurde auch ein eigenes Kommunikationsprotokoll entwickelt, welches bereits einige Fehlerquellen auschliessen sollte.

    Einleitung

    Ausgangslage

    Das Planning Poker ist ein Bestandteil der agilen Projektmethode Scrum. Viele Teams kennen die Probleme des Planning Pokers:

    Diese Punkte sollen mit der App angegangen werden, um ein flüssigeres Ablaufen des Prozesses zu fördern.

    Ziele der Arbeit

    Es soll eine universelle App entwickelt werden. Dies erlaubt es, die App sowohl auf dem iPhone wie auch auf dem iPad einzusetzen. Zur Unterstützung der Kommunikation zwischen den iPhones und dem iPad wird das Apple eigene Framework GameKit eingesetzt. Das Framework GameKit wird verwendet, da es bereits eine grundlegende Funktion für die Verknüpfung von verschiedenen iOS Geräten bereitstellt.

    Das vorrangige Ziel ist es, mit der App unkomplizierte eine Verbindung sowie die Kommunikation zwischen mehreren mobile Geräten erfolgreich herzustellen.

    Das iPad wird dabei als "Server" agieren und die Verbindung mit den iPhones aufbauen. Der User hat dann die Möglichkeit, auf dem iPhone eine Karte auszuwählen. Die Karte wird dann verdeckt auf dem iPad angezeigt. Sobald alle User eine Karte gewählt haben, werden die Karten auf dem iPad aufgedeckt und eine neue Runde kann beginnen.

    Aufgabenstellung

    Folgende Aufgabenstellungen wurden definiert:

    Projektmanagement

    Projektplanung

    Der folgende Projektplan gibt einen Überblick über den Ablauf des Projekts und dessen wichtigsten Meilensteine.

      April Mai Juni Juli September Oktober
    Freigabe der Arbeit ◆ 19.04.13                                
    Kick-Off-Meeting   ◆ 25.04.13                              
    Umsetzung          
    Dokumentation            
    Design-Review                   ◆ 26.06.13              
    Abgabe der Arbeit                                   ◆ 19.10.13
    Projektplanung

    Angepasste Planung

    Die Semesterarbeit wurde um einen Monat verlängert, da ich geschäftlich sehr viel zu tun hatte. Die Projektplannung wurde entsprechend angepasst.

      April Mai Juni Juli September Oktober November
    Freigabe der Arbeit ◆ 19.04.13                                        
    Kick-Off-Meeting   ◆ 25.04.13                                      
    Umsetzung          
    Dokumentation            
    Design-Review                   ◆ 26.06.13                      
    Abgabe der Arbeit                                             ◆ 19.11.13
    Angepasste Projektplanung

    Die Abschlusspräsentation wird nach Abgabe der Semesterarbeit durchgeführt.

    Aufwand

    Laut Reglement sollte der Aufwand für die Fertigstellung der Semesterarbeit mindestens 120 Stunden betragen. Entsprechend wurde die Planung darauf ausgelegt.

    Beschreibung Soll Ist
    Projekt aufsetzen 3h 2.5h
    Kick-Of-Meeting 1h 1h
    Design-Review 3h 2h
    Schlusspräsentation 2h 2h
    Requirements Engineering iOS App 4h 3h
    Bearbeitung GameKit API 4h 5h
    Internetsuche nach GameKit 2h 2h
    Definition Netzwerkverkehrs 2h 4h
    Continuous Integration 3h 4h
    Integration GameKit in App 2h 1.5h
    Client/Server Kommunikation 22h 30h
    Client GUI 11h 8h
    Server GUI 11h 10h
    Testing 10h 15h
    Dokumentation 32h 40h
    Reserve 8h 0h
    Total 120h 130h
    Soll / Ist Vergleich Aufwand

    Der Ist-Aufwand ist ein wenig höher als anfangs geplant. Die Aufwände für die Kommunikation zwischen den Clients und dem Server ist höher ausgefallen als geplant. Das Schreiben der Dokumentation hat ebenfalls mehr Zeit benötigt als vorgesehen.

    Dokumentation

    Die Dokumentation wurde ausschliesslich in HTML und CSS geschrieben. Das Inhalts- und das Abbildungsverzeichnis wurden dynamisch mit JavaScript generiert. Um die Seite auch korrekt ausdrucken zu können, wurde die Software Prince verwendet, welche HTML-Seiten in PDFs umwandelt. Dadurch konnte diese Dokumentation, gleich wie der Source-Code der Applikation, mit der Versionsverwaltungssoftware Git verwaltet und über den Online-Service GitHub geteilt werden.

    Sourcecode

    Der Sourcecode der iOS App wurde ebenfalls mit der Versionsverwaltungssoftware Git verwaltet und kann über den Online-Service GitHub abgerufen werden.

    Open Source

    Ich habe mich, in Absprache mit Beat Seeliger, entschieden den Sourcecode wie auch die Dokumentation als Open Source zur Verfügung zu stellen. Als Lizenz wurde die MIT License gewählt.

    Die GitHub Repositories sind unter diesen zwei Adressen zu finden:

    Planning Poker

    Planning Poker ist ein Schätzverfahren, welches in der agilen Projektmethode Scrum zum Einsatz kommt.

    Mit Hilfe von Planning Poker wird die Komplexität von User Stories (Requirements) geschätzt. Das Schätzen wird mit Hilfe von Spielkarten realisiert. Diese lehnen sich typischerweise an die Werte der Fibonacci-Folge an: 1, 2, 3, 5, 8, 13, 20, 40, 100. Optional gibt es noch Karten mit dem Wert 0, einem Fragezeichen (unsicher) und einer Kaffeetasse (Pause). Die Fibonacci-Folge wurde gewählt, um aufzuzeigen, dass komplexe User Stories schwieriger zu schätzen sind. Dies führt zu einer ungenaueren Schätzung.

    Das Prinzip ist simpel. Jede User Story wird besprochen und offene Fragen werden untereinander geklärt. Sind keine weiteren Fragen mehr vorhanden, entscheidet sich jeder Entwickler, verdeckt, für eine Spielkarte. Haben sich alle Teilnehmer für eine Karte entschieden, werden die Karten gemeinsam aufgedeckt. Durch die verdeckte Karte wird der Einfluss von anderen Teilnehmer minimiert und es muss eine eigene Entscheidung gefällt werden.

    Beispielhaftes Kartendeck

    Anforderungen an die iOS App

    Features

    Das UI der App soll minimalistisch gehalten werden. Die wichtigsten Funktionalitäten der App sind der einfache Verbindungsaufbau zwischen den iPhones und dem iPad, das einfache Auswählen eines Kartenwertes auf dem iPhone und die Darstellung der gewählten Werte auf dem iPad.

    Es wurde ein Mockup erstellt, um die Vision klarer darzustellen.

    Mockup

    Um dem User ein einheitliches Erlebnis zu bieten, wird eine universelle App erstellt. Dies bedeutet, die App kann sowohl auf dem iPhone wie auch auf dem iPad ausgeführt werden. Es wird dynamisch entschieden, welche Inhalte auf welchem Gerät angezeigt werden sollen.

    User Interface

    Die Auswahl der Karten wird mit Hilfe des Coverflows Paradigma dargestellt. Coverflow wird auf dem iPhone z.B. für die Albumauswahl innerhalb der Musik App verwendet. Der User wird die Möglichkeit haben, zwischen den verschiedenen Kartenwerten hin und her zu wischen. Hat er sich für einen Wert entschieden, kann er die Karte selektieren und der Wert wird zum iPad übertragen.

    Auf dem iPad ähnelt die Darstellung einem Tisch. Die verschiedenen angemeldeten User werden mit ihrem Namen angezeigt.

    Use Cases

    Die App beinhaltet zwei wichtige Use Cases, welche im Diagramm abgebildet worden sind.

    Use Cases

    Anforderungsübersicht

    Die Anforderungen wurden direkt aus den Use Cases bzw. von den Befragungs-, Kreativitäts- und Beobachtungstechnik abgeleitet. Die Beobachtungstechnik wurde während diverser Planning Pokers eingesetzt, um direkt vor Ort die wichtigsten Anforderungen heraus zu filtern. Mittels der Kreativitätstechnik wurden vor allem Anforderung für ein möglichst innovatives UI erstellt.

    Vorlage

    Alle Anforderungen wurden anhand folgender Vorlage erstellt

    # RXX
    Name Name der Anforderung
    System Für welches System die Anforderung umgesetzt wird (iPad oder iPhone)
    Priorität Prioritäten können niedrig, mittel oder hoch sein
    Beschreibung Eine kurze Zusammenfassung der Anforderung
    Vorbedingungen Auflistung allfälliger Vorbedingungen
    Akzeptanz Tests Die zu erfüllenden Akzeptanz Tests
    Querbezug Auflistung allfälliger Querbezüge
    RXX: Name des Requirements

    Anforderungen

    # R01
    Name Planning Poker starten
    System iPad
    Priorität hoch
    Beschreibung Der Scrum Master startet ein neues Planning Poker auf seinem iPad
    Vorbedingungen Es muss mindestens ein iPhone eines Teilnehmers mit dem iPad verbunden sein. Siehe R07
    Akzeptanz Tests AT01: Starten eines Planning Pokers
    Querbezug -
    R01: Planning Poker starten
    # R02
    Name Verfügbare iPhones anzeigen
    System iPad
    Priorität mittel
    Beschreibung Das iPad zeigt alle iPhones an, welche sich mit dem iPad verbunden haben
    Vorbedingungen Die iPhones müssen sich mit einem iPad verbinden. Siehe R07
    Akzeptanz Tests AT02: Anzeige verbundenen iPhones
    Querbezug -
    R02: Verfügbare iPhones anzeigen
    # R03
    Name Karten anzeigen
    System iPad
    Priorität mittel
    Beschreibung Das iPad zeigt die gewählten Karten der Teilnehmer aufgedeckt an
    Vorbedingungen - Das iPhone muss die Karte dem iPad übermittelt haben und das iPad muss die Karten empfangen haben. Siehe R08 und R04
    - Alle Teilnehmer müssen eine Karte ausgewählt haben. Siehe R10
    Akzeptanz Tests AT05: Karten aufdecken
    Querbezug Beispielhaft im Mockup zu sehen
    R03: Karten anzeigen
    # R04
    Name Karten empfangen
    System iPad
    Priorität mittel
    Beschreibung Dem iPad werden drahtlos die Karten der verschiedenen Teilnehmer zugestellt
    Vorbedingungen Es muss mindestens ein iPhone eines Teilnehmers mit dem iPad verbunden sein. Siehe R07
    Akzeptanz Tests AT04: Auswählen einer Karte
    Querbezug -
    R04: Karten empfangen
    # R05
    Name Karte schicken
    System iPhone
    Priorität mittel
    Beschreibung Die ausgewählte Karte des Teilnehmers wird drahtlos zu dem verbundenen iPad übertragen
    Vorbedingungen - Das iPhone muss mit einem iPad verbunden sein. Siehe R07
    - Der Teilnehmer muss eine Karte ausgewählt haben. Siehe R08
    Akzeptanz Tests AT04: Auswählen einer Karte
    Querbezug -
    R05: Karte schicken
    # R06
    Name Verfügbares iPad anzeigen
    System iPhone
    Priorität mittel
    Beschreibung Das verfügbare iPad wird mit seinem Name dargestellt
    Vorbedingungen Das iPad muss sich im Verbindungsmodus befinden
    Akzeptanz Tests AT01: Starten eines Planning Pokers
    Querbezug -
    R06: Verfügbare iPads anzeigen
    # R07
    Name iPad auswählen
    System Teilnehmer
    Priorität mittel
    Beschreibung Aus einer Liste aller verfügbaren iPads muss ein iPad ausgewählt werden, mit welchem sich das iPhone verbinden sollte
    Vorbedingungen Es muss nach verfügbaren iPads gesucht worden sein. Siehe R06
    Akzeptanz Tests AT01: Starten eines Planning Pokers
    Querbezug -
    R07: iPad auswählen
    # R08
    Name Karte auswählen
    System Teilnehmer
    Priorität mittel
    Beschreibung Es muss eine Karte aus einer Liste ausgewählt werden. Die Karten haben die Werte 0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, ? und ein Bild einer Kaffeetasse
    Vorbedingungen Das iPhone muss mit einem iPad verbunden sein. Siehe R07
    Akzeptanz Tests AT04: Auswählen einer Karte
    Querbezug Im Kapitel Planning Poker wird Bezug auf die Werte der Karten genommen
    R08: Karte auswählen
    # R09
    Name Verdecktes Wählen
    System iPhone
    Priorität mittel
    Beschreibung Dem Teilnehmer soll es möglich sein, seine Karte so verdeckt wie möglich zu wählen. Sollten andere Teilnehmer den gewählten Wert sehen, könnten diese unnötig beeinflusst werden
    Vorbedingungen -
    Akzeptanz Tests AT03: Erfolgreiche Verbindung
    Querbezug -
    R09: Verdecktes Wählen
    # R10
    Name Aufdecken der Karten
    System iPad
    Priorität mittel
    Beschreibung Die Karten dürfen auf dem iPad erst aufgedeckt werden, sobald alle Teilnehmer sich für einen Wert entschieden haben
    Vorbedingungen -
    Akzeptanz Tests AT04: Auswählen einer Karte
    Querbezug -
    R10: Aufdecken der Karten
    # R11
    Name Drahtlose Verbindung
    System iPad & iPhone
    Priorität mittel
    Beschreibung Die Verbindung zwischen den verschiedenen Geräten ist drahtlos. Die Technologie (Bluetooth oder WLAN) spielt dabei keine Rolle
    Vorbedingungen -
    Akzeptanz Tests AT03: Erfolgreiche Verbindung
    Querbezug -
    R11: Drahtlose Verbindung
    # R12
    Name Schnelle und einfache Verbindung
    System iPad & iPhone
    Priorität mittel
    Beschreibung Der Verbindungsaufbau zwischen dem iPad und dem iPhone soll einfach und schnell vonstatten gehen. Der Teilnehmer sollte möglichst keine Eingaben tätigen müssen
    Vorbedingungen Die Verbindung muss drahtlos hergestellt werden. Siehe R11
    Akzeptanz Tests AT03: Erfolgreiche Verbindung
    Querbezug -
    R12: Schnelle und einfache Verbindung
    # R13
    Name Coverflow UI
    System iPhone
    Priorität tief
    Beschreibung Die Karten sollen auf dem iPhone UI mittels dem Paradigma Coverflow dargestellt werden
    Vorbedingungen -
    Akzeptanz Tests -
    Querbezug Siehe Mockup
    R13: Fächer UI
    # R14
    Name Pokertisch UI
    System iPhone
    Priorität tief
    Beschreibung Die Teilnehmer, wie auch deren Karten, sollen auf dem iPad mittels einem Pokertisch dargestellt werden
    Vorbedingungen -
    Akzeptanz Tests -
    Querbezug Siehe Mockup
    R13: Pokertisch UI

    Architektur

    Systemumfeld (System- und Kontextabgrenzung)

    Das System besteht aus einer iOS App, welche sowohl auf einem iPhone wie auch auf einem iPad installiert werden kann. Je nach Kontext erfüllt die App andere Aufgaben bzw. wird von einer anderen Zielperson verwendet. Die iPhones und das iPad kommunizieren drahtlos miteinander.

    System- und Kontextabgrenzung

    Prozess Systemkontext "Verbindungsaufbau"

    1. Der Scrum Master startet die App auf dem iPad und versetzt das iPad in den "Verbindungsmodus".
    2. Das iPad sucht nach iPhones, welche sich mit einem iPad verbinden möchten.
    3. Der Teilnehmer startet die App auf dem iPhone und sucht nach einem iPad. Sobald ein iPad gefunden worden ist, verbindet sich das iPhone automatisch mit dem iPad.
    4. Das iPad zeigt alle verbundenen iPhones an.
    5. Der Scrum Master startet das Planning Poker.

    Prozess Systemkontext "Karte wählen"

    1. Die Teilnehmer wählen eine Karte auf dem iPhone aus.
    2. Die iPhones senden den Kartenwert an das iPad.
    3. Sobald alle Teilnehmer eine Karte gewählt haben, zeigt das iPad den gewählten Kartenwert der Teilnehmer einzeln an.

    Aufbau

    Die Applikation wird in verschiedene Teile gegliedert. Die Gruppe ViewControllers sorgt für die Darstellung der Daten innerhalb eines UIs auf dem iPad, wie auch auf dem iPhone. Die Gruppe Connection sorgt sich um die Verbindung zwischen einem iPad und verschiedenen iPhones. In der Gruppe DataModel werden die Daten beschrieben, welche zwischen dem iPad und den iPhones ausgetauscht werden.

    Klassendiagramm

    Testing

    Akzeptanz Testing

    Die Akzeptanz Tests werden anhand der Requirements definiert und haben daher eine direkte Verbindung zu den Requirements.

    Vorlage

    Alle Akzeptanz Tests wurden anhand folgender Vorlage erstellt.

    # ATXX
    Name Name des Tests
    Status Erfüllt oder nicht erfüllt
    Geprüfte Anforderungen Anforderungen, welche durche diese Akzeptanz Tests geprüft werden
    Aktivität Aktivität, welche ausgeführt werden soll
    Soll Verhalten Erwartetes Verhalten
    Ist Verhalten Eingetroffenes Verhalten
    ATXX: Name des Tests

    Akzeptanz Tests

    # AT01
    Name Starten eines Planning Pokers
    Status ✓ Erfüllt
    Geprüfte Anforderungen R01, R06, R07
    Aktivität Der Scrum Master startet auf einem iPad die App. Innerhalb der App startet er eine neue Planning Session
    Soll Verhalten - Die App startet ohne Probleme
    - Es ist möglich, eine neue Planning Session zu starten
    - Das iPad befindet sich im Verbindungsmodus und erscheint auf den anderen iPhones
    Ist Verhalten Die App startet ohne Probleme auf. Nachdem ein neues Planning Poker begonnen worden ist, erscheint der Name des iPads auf den iPhones
    AT01: Starten einer Planning Session
    # AT02
    Name Anzeige verbundener iPhones
    Status ✓ Erfüllt
    Geprüfte Anforderungen R02
    Aktivität Teilnehmer starten die App auf dem iPhone. Danach sollen sie sich mit dem iPhone auf das iPad verbinden
    Soll Verhalten - Die App startet ohne Probleme
    - Es ist möglich, eine neue Planning Session zu starten
    - Das iPhone kann sich mit einem iPad verbinden
    - Sobald ein iPhone mit dem iPad verbunden ist, erscheint es in einer Listenübersicht auf dem iPad
    Ist Verhalten Der Teilnehemer startet die App auf dem iPhone. Das iPhone sucht nach einem iPad und findet dieses. Das iPhone verbindet sich mit dem iPad und der Name des iPhones erscheint in der Liste auf dem iPad
    AT02: Anzeige verbundenen iPhones
    # AT03
    Name Erfolgreiche Verbindung
    Status ✓ Erfüllt
    Geprüfte Anforderungen R09, R11, R12
    Aktivität Sobald alle zu verknüpfenden iPhones in der Listendarstellung des iPads erschienen sind, wird eine neue Session gestartet
    Soll Verhalten - Die Session wird initiiert
    - Auf dem iPhone wird ein UI zur Auswahl der Storypoints angezeigt
    - Auf dem iPad erscheint ein UI, welches die Möglichkeit bietet, die Storypoints der verschiedenen Teilnehmer anzuzeigen
    Ist Verhalten Sobald sich alle iPhones verbunden haben, startet der Scrum Master eine Runde Planning Poker. Auf dem iPad erscheint ein UI, das einem Tisch ähnelt. Die Teilnehmer erhalten ein UI zur Auswahl einer Karte
    AT03: Erfolgreiche Verbindung
    # AT04
    Name Auswählen einer Karte
    Status ✓ Erfüllt
    Geprüfte Anforderungen R04, R05, R08, R10
    Aktivität Der Teilnehmer soll sich für eine Karte entscheiden und diese auswählen
    Soll Verhalten - Das iPhone zeigt visuell an, welche Karte ausgewählt worden ist
    - Die Karte wird auf dem iPad verdeckt angezeigt
    Ist Verhalten Sobald ein Teilnehmer sich für eine Karte entschieden hat wird diese in grün dargestellt. Auf dem iPad ist der Wert der Karte nicht ersichtlich
    AT04: Auswählen einer Karte
    # AT05
    Name Karten aufdecken
    Status ✓ Erfüllt
    Geprüfte Anforderungen R03
    Aktivität Solange sich noch nicht alle Teilnehmer für eine Karte entschieden haben, dürfen die Kartenwerte auf dem iPad nicht ersichtlich sein. Es sollen nun alle Teilnehmer eine Karte wählen
    Soll Verhalten
    - Alle Teilnehmer haben eine Karte gewählt
    - Die Karten werden auf dem iPad aufgedeckt, sobald alle Teilnehmer eine Karte gewählt haben
    - Zu jedem Teilnehmer wird der gewählte Kartenwert angezeigt
    Ist Verhalten Haben alle Teilnehmer eine Karte ausgewählt, werden diese auf dem iPad angezeigt
    AT05: Karten aufdecken

    Übersicht Abnahme Akzeptanz Tests

    # Name Erfüllt
    AT01 Starten einer Planning Session
    AT02 Anzeige verbundener iPhones
    AT03 Erfolgreiche Verbindung
    AT04 Auswählen einer Karte
    AT05 Karten aufdecken
    Übersicht der Akzeptanz Tests

    Unit Testing

    Die App wird mittels dem Integrationsserver Jenkins bei jedem Change neu gebaut. Vor dem Erstellen der App werden alle Unit Tests ausgeführt. Dafür wird das Open-Source Tool xctool verwendet.

    Unit Tests wurden pro Package durchgeführt. Nachfolgend eine Übersicht der Tests und deren Resultate.

    Resultat Unit Test

    Die Unit Tests stellen sicher, dass die verschiedenen Zustände zu bestimmten Zeitpunkten in der App gesetzt sind. Diese Zustände werdem im Kapitel 10, Umsetzung der iOS App, genauer erläutert.

    Analyse GameKit API

    Einführung

    GameKit ist eine Sammlung von API's die für Spielentwickler entworfen worden ist. Diese API's bieten unter anderem die Möglichkeit, eine Peer-to-Peer bzw. Client Server Verbindung, auch GKSession gennant, aufzubauen. Dies wird nicht nur im Zusammenhang mit Spielen gebraucht und wird von verschiedensten App Typen eingesetzt.

    Apple hat diesen Zustand bemerkt und bietet mit iOS7 diese API's unabhängig von GameKit an. Die neugeschaffenen API's werden unter dem "Multipeer Connectivity" Framework zusammengefasst. Die neuen API's bieten genau die gleiche Funktionalität, haben aber verschiedene Bereiche vereinfacht. Im Gegenzug wurden die GKSession Klassen auf "deprecated" gesetzt und werden in naher Zukunft entfernt.

    iPlanningPoker basiert noch auf den GKSession Klassen, da die Entwicklung vor der Veröffentlichung von iOS7 begonnen hat. Eine Migration auf das neue Framework ist möglich und wird nach dem Abschluss der Arbeit vorangetrieben.

    Der wichtigste Punkt weshalb dieses Framework gewählt wurde, ist der Vorteil, dass sich die App nicht für einen Kommunikationskanal entscheiden muss. Es wird automatisch vom Framework entschieden, ob sich nun die Geräte via Bluetooth oder WLAN miteinander verbinden. Das Auffinden, wie auch das Anpreisen der Geräte geschieht über einen Abstraktionslayer. Für diese Tasks wird innerhalb von GameKit der Apple Service Bonjour verwendet.

    Bonjour Overview

    GKSession und GKSessionDelegate

    Um die Klasse GKSession zu instanzieren ist es notwendig, sich für einen Modus zu entscheiden. Dieser bestimmt wie sich die Klasse verhalten soll. Zur Verfügung stehen drei verschiedene Modi.

    
        typedef enum {
           GKSessionModeServer,
           GKSessionModeClient,
           GKSessionModePeer,
        } GKSessionMode;
    

    Die Werte GKSessionModeClient und GKSessionModeServer stehen für eine Client Server Verbindung. Eine Client Server Verbindung unterhält nur Verbidungen zwischen den Clients und dem Server.

    Client Server Verbindungen

    Im Gegensatz dazu steht die Peer-to-Peer Verbindung GKSessionModePeer, bei welcher alle beteiligten Endgeräte miteinander kommunizieren.

    Peer-to-Peer Verbindungen

    Da iPlanningPoker in einem Client-Server Modus funktioniert, wurde entschieden, die Klasse GKSession in den Modi "GKSessionModeServer" und "GKSessionModeClient" zu instanzieren. Intern in der GKSession, welche für einen Entwickler nicht sichtbar ist, wird immer noch ein Peer-to-Peer Netzwerk verwendet.
    Die iOS API's arbeiten stark nach dem Delegation Pattern. Das Protokoll GKSessionDelegate wird implementiert, um auf Events reagieren zu können. Typische Events sind:

    Typische Methoden

    Der Abschnitt behandelt die wichtigsten Methoden der GameKit API, welche in diesem Projekt verwendet worden sind. Um eine vollständige Übersicht zu erhalten, empfiehlt sich die Dokumentation von Apple.

    Client

    Diese Instanzmethode wird verwendet um den Client zu instanzieren. Die sessionID wird als Konstante verwendet, damit alle Clients mit dem gleichen Server kommunizieren können. Der displayName ist der Gerätename und der sessionMode erhält den Wert des Enums "GKSessionModeClient".

    
    - (id)initWithSessionID:(NSString *)sessionID displayName:(NSString *)name
    sessionMode:(GKSessionMode)mode
    

    Mit dieser Methode wird eine Verbindung zum Server aufgebaut. Dabei ist die peerId eine eindeutige UUID, welche den Server identifiziert. Das Timeout wird mittels einer Konstante gesteuert.

    
    - (void)connectToPeer:(NSString *)peerID withTimeout:(NSTimeInterval)timeout
    

    Um Daten an den Server senden zu können, in diesem Fall den Kartenwert, werden diese in einer speziellen Klasse aufbereitet. Das Kapitel Netzwerkverkehr behandelt dieses Thema im Detail.
    Das peers Array enthalten nur einen Eintrag, die UUID des Servers. Weiter kann entschieden werden, in welchem Modus die Daten geschickt werden sollen. Wir verwenden den Wert GKSendDataReliable des Enums. Diese Einstellung gewährleistet, dass mehrmals versucht wird die Daten zu schicken und nicht sofort nach dem ersten Fehlversuch die Übertragung abbricht.

    
    - (BOOL)sendData:(NSData *)data toPeers:(NSArray *)peers
    withDataMode:(GKSendDataMode)mode error:(NSError **)error
    

    Server

    Um einen Server zu instanzieren muss der Enumwert von sessionMode auf "GKSessionModeServer" gesetzt werden. Dies ist der wichtigste Unterschied zum Client.

    
    - (id)initWithSessionID:(NSString *)sessionID displayName:(NSString *)name
    sessionMode:(GKSessionMode)mode
    

    Um Daten an alle Clients zu senden, wird eine unterschiedliche Methode verwendet. Diese Methode erlaubt es, Daten an alle verbundenen Clients zu senden.

    
    - (BOOL)sendDataToAllPeers:(NSData *)data withDataMode:(GKSendDataMode)mode
    error:(NSError **)error
    

    Netzwerkverkehr

    Die Übertragung der Daten findet mit bereitgestellten APIs von GameKit statt. Die Struktur der zu übertragenden Daten kann frei gewählt werden, auf welche nun eingegangen wird.

    Die Kommunikation zwischen den verschiedenen iPhones und dem iPad ist wohl definiert. Die Daten werden in sogenannten Paketen zwischen dem Server und den Clients ausgetauscht. Diese Pakete haben einen klar strukturierten Header, auf welchen nun näher eingegangen wird.

    Paket Struktur

    Ein typischer Header in der App besteht aus 10 Bytes, gefolgt von dem Payload, den eigentlichen Daten.

    Aufbau der Packete

    Beispiel Paket

    Nehmen wir das Beispiel einer SignIn-Response. Da es das erste Packet ist, wird die Nummer 1 vergeben. Dies entspricht dem Wert 0x0001. Es handelt sich um einen SignIn-Response, daher wird der Packettyp auf 0x02 gesetzt. Folgendes Bild zeigt das komplette Packet, welches versendet wird.

    Beispiel einer SignIn-Response

    Umsetzung der iOS App

    Entwicklungsumgebung

    Workflow iOS Entwicklung

    Xcode

    Xcode ist die von Apple angebotene IDE zur Entwicklung von iOS und Mac Applikationen. Xcode bietet Möglichkeiten, die entwickelte App auf einem Simulator wie auch auf einem realen iOS Gerät zu testen. Als VCS unterstützt Xcode Git und SVN. In diesem Projekt wird Git verwendet
    (Schritt 1).

    GitHub

    Der Source-Code wird auf GitHub in einem öffentlichen Repository gehalten. Jenkins wird informiert, sobald ein neuer Change gepusht worden ist (Schritt 2).

    Jenkins CI

    Jenkins wird verwendet, um die App kontinuierlich zu bauen. Wurde ein Change auf Github veröffentlicht, wird ein Jenkins Job durchloffen. Der Job besteht aus zwei Teilen. Zuerst werden die Unittests angestossen. Sind alle Unittests erfolgreich ausgeführt worden, wird das Artefakt gebildet. Das Artefakt ist ein IPA File, welches sich auf iOS Geräten installieren lässt
    (Schritt 3).

    Sequenzdiagramm / Zustandsmaschine

    Nachfolgend wird ein typischer Ablauf innerhalb der App durch ein Sequenzdiagramm dargestellt. Die App wurde mit Hilfe einer Zustandsmaschine entwickelt. Entsprechend wurden im Sequenzdiagramm die verschiedenen Zustände erwähnt.

    Die App enthält zwei verschiedene Typen von Zustandsmaschinen. Für den ersten Teil der App, den eigentlichen Verbindungsaufbau, wird eine Ereignisgetriebene-Zustandsmaschine verwendet. Im zweiten Teil, der Kommunikation zwischen den Clients und dem Server, wird eine klassische Zustandsmaschine verwendet.

    Sequenzdiagramm

    Die einzelnen Schritte der App werden nachfolgend erläutert und die verschiedenen Zustände detailliert erklärt.

    Verbindungsaufbau

    Öffnet man die App auf dem iPhone, wird dem User folgender Screen präsentiert. Die App befindet sich zu diesem Zeitpunkt im Zustand ClientStateIdle.

    Startscreen auf dem iPhone

    Die iPad App verhält sich sehr ähnlich. Dem User wird ebenfalls ein Startscreen präsentiert. Die App auf dem iPad befindet sich im Zustand ServerStateIdle.

    Startscreen auf dem iPad

    Im nächsten Schritt möchte sich der User zu einem neuen Planning Poker hinzufügen. Dabei hat er die Möglichkeit, den Namen seines iPhones zu bestimmen. Standardmässig wird der Gerätename verwendet.

    Verbindungsscreen auf dem iPhone

    Ist der User mit dem Namen zufrieden, versucht sich die App mit einem iPad zu verbinden. Zu diesem Zeitpunkt befindet sich die App im Zustand ClientStateLookingForServers.

    iPhone sucht nach einem iPad

    Der Scrum Master startet ein neues Planning Poker auf dem iPad. Dabei wird ihm eine (leere) Tabelle präsentiert. Das iPad befindet sich nun im Verbindungsmodus und ist für die iPhones sichtbar. Alle iPhones, welche sich erfolgreich mit dem iPad verbunden haben, werden in dieser Tabelle dargestellt. Die App befindet sich im Status ServerStateAcceptingConnections.

    iPad wartet auf zusätzliche Teilnehmer

    Das iPhone erhält ein Ereignis, welches ihm mitteilt, dass ein iPad gefunden worden ist. Das iPhone stellt nun eine Verbindung her. Die App befindet sich im Zustand ClientStateConnecting.
    Wurde eine erfolgreiche Verbindung mit dem iPad hergestellt, erhält das iPhone wiederum ein Ereignis, welches die Verbindung zum iPad bestätigt. Dies führt zum Zustand ClientStateConnected. Nun wird auf ein SignIn-Request gewartet. Die App befindet sich im Zustand PlanningPokerCardsWaitingForSignIn.

    iPhone wartet auf den SignIn-Request

    Planning Poker starten

    Haben sich alle Teilnehmer mit dem iPad verbunden, initiiert der Scrum Master das eigentliche Planning Poker. Das iPad ist ab diesem Zeitpunkt nicht mehr auffindbar und der Zustand wird auf ServerStateStopAcceptingNewConnections gesetzt.
    Jedem verbundenen iPhone wird ein SignIn-Request geschickt. Zu diesem Zeitpunkt befindet sich die App im Zustand PlanningPokerDeckWaitingForSignIn. Haben alle iPhones mit einer SignIn-Response geantwortet, wird ein Ready-Kommando geschickt und folgendes UI angezeigt. Die App befindet sich nun im Zustand PlanningPokerDeckWaitingForCardValues. Das iPad ist nun bereit für ein Planning Poker.

    Hauptscreen des iPads

    Wie bereits erwähnt, erhält das iPhone ein SignIn-Request vom iPad. Das iPhone antwortet mit einer SignIn-Response und geht in den Zustand PlanningPokerCardsWaitingForReady über. Danach wird vom iPad das erwähnte Ready-Kommando gesendet. Dies führt zum Zustand PlanningPokerCardsChooseCardValue und folgendes UI erscheint auf dem iPhone.

    Teilnehmer kann eine Karte wählen

    Karte auswählen

    Nun können die Teilnehmer eine Karte auf dem iPhone wählen. Der Wert der Karte wird auf das iPad übertragen. Sollte sich ein Teilnehmer doch noch für eine andere Karte entscheiden, kann er dies tun, solange noch nicht alle anderen Teilnehmer eine Karte ausgewählt haben. Dies ist der Grund, wieso die App in diesem Schritt im Status PlanningPokerCardsChooseCardValue verbleibt.

    Teilnehmer hat eine Karte gewählt

    Haben sich alle Teilnehmer für eine Karte entschieden, geht die App in den Zustand PlanningPokerDeckShowCardValues über und die Karten der einzelnen Teilnehmer werden auf dem iPad angezeigt. Den iPhones wird ebenfalls mitgeteilt, dass nun die Karten dargestellt werden.

    Die Karten der Teilnehmer werden angezeigt

    Sobald die Karten auf dem iPad dargestellt werden, wird dies dem iPhone mitgeteilt. Das UI wird deaktiviert und eine Kartenauswahl ist für den Moment nicht mehr möglich. Die App befindet sich im Zustand PlanningPokerCardsWaitingForNextRound.

    Keine Kartenwahl mehr möglich

    Neue Runde starten

    Soll eine neue Runde gestartet werden, schickt das iPad den iPhones ein entsprechendes Kommando. Die Kartenwerte auf dem iPad verschwinden und das UI auf dem iPhone wird wieder aktiviert. Das iPhone befindet sich wieder im Zustand PlanningPokerDeckWaitingForCardValues und die iPhones im Zustand PlanningPokerCardsChooseCardValue. Es kann eine neue Runde gespielt werden.

    Fazit

    Es war spannend eine so komplexe iOS App zu entwickeln. Was mich erfreut, ist die Tatsache, dass alle definierten Ziele erreichten wurden:

    Das Requirements Engineering konnte optimal und zielführend durchgeführt werden. Es war hilfreich, dass ich bereits die Vorlesung von Herrn Bachmann besucht habe, welche sich exakt dieser Theamtik widmete.

    Es gab im Internet leider nicht viele hilfreiche Quellen, dafür war aber die Dokumentation von Apple ausgezeichnet. Spannend war auch, dass Apple mit iOS7 genau die von mir verwendetet API aus GameKit herausgelöst hat. Dies ist eine logische Evolution dieser API. Ich kann mir vorstellen, dass solche Apps in Zukunft immer beliebter werden und noch in einer grösseren Anzahl erscheinen werden.

    Das Schreiben eines eigenen Netzwerkprotokolls war eine Herausforderung. Wir haben bisher im Studium wenig auf diesem Level gemacht, aber ich denke, die erarbeitete Lösung hat die Anforderungen erfüllt. Ausserden ist das Protokoll erweiterbar, was ein persönliches Ziel bei der Definition des Protokolls war. Es war äusserst spannend wieder mal mit Bits, Bytes und Hex zu arbeiten.

    Dass eine voll funktionsumfassende App entstanden ist, erfüllt mich mit Stolz. Mit iOS7 wurd ein flaches UI eingeführt, was mir mit meinen bescheidenen Designfähigkeiten in die Hände spielte. Das simple UI passt ausserordentlich gut zu iOS7 und vereinfacht das Arbeiten mit der App.< br/> Der nächste Schritt nach der Abgabe der Semsterarbeit, wird die Veröffentlichung der App im AppStore sein. Ich erhoffe mir, dass auch weitere Teams von dieser App profitieren können. In unserem Team wird die App bereits eingesetzt und hat uns das Leben vereinfacht.

    Insgesamt kann ich sagen, dass die Semesterarbeit viel Spass und Schweiss bereitet hat. Der Aufwand der Dokumentation darf nie unterschätzt werden, was ich bei meiner nächsten Arbeit besser berücksichtigen werde. Ein gutes Projektmanagment fördert den reibungslosen Ablauf der Arbeit, dies werde ich weiterhin so machen werden.

    Viel Spass beim nächsten Planning Poker!

    Anhang

    Glossar

    API: Application Programming Interface, bezeichnet die Schnittstelle, über welche der Client Daten vom Server abruft.

    Client: Ein Anwendungsprogramm, welches auf dem Gerät des Benutzers läuft und meist mit einem Server kommuniziert.

    Server: Eine Komponente, welche verschiedene Requests von Clients erhält und auf diese reagieren kann.

    UI: Kurzschreibweise für User Interface. Das Aussehen einer Applikation.

    Enum: Ein Aufzählungstyp mit einer endlichen Menge an konstanten Typen.

    UUID: Steht für Universally Unique Identifier. In diesem Projekt eine eindeutige Nummer für einen Client.

    Byte: Ein Byte besteht aus 8 Bit. Es ist eine Masseinheit in der Informatik

    Hexadezimalsystem: Dieses Stellwertsystem wird zur Basis 16 dargestellt. Im Unteschied zum Dezimalsystem, welches zur Basis 10 dargestellt wird.

    SVN: Ist eine Software zur Versionsverwaltung von Dateien von Apache.

    Git: Ebenfalls eine Software zur Versionsverwaltung. Wurde ursprünglich für Linux entwickelt. Der grösste Unteschied zu SVN ist die dezentrale Verwaltung des Sourcecodes.

    Artefakt: Ist das Ergebnis eines Buildprozesses. Es ist die fertige Software, welche auf Endgärten installiert werden kann.

    Literaturverzeichnis

    Stephen G. Kochan: Programming in Objective-C 2.0(5. Auflage), 2013, 978-0321887283, Amsterdam: Addison-Wesley Longman

    Ken Schwaber, Mike Beedle: Agile Software Development with Scrum, 2001, 978-0130676344

    Quellenverzeichnis

      Abbildungsverzeichnis