Dienstag, 27. September 2016

September 2016 - Projektmethode Scrum

Im 7. Semester bearbeiten wir in der Schule das Modul "223 - Applikationen objektorientiert realisieren". Wir lernen dort nicht nur, wie man eine Anwendung auf Basis von C# schreibt, sondern auch, wie man mit dem Vorgehensmodell Scrum arbeitet.


Scrum ist eine Projektmethode oder auch Vorgehensmodell genannt zur agilen Softwareentwicklung. Agile Softwareentwicklung bedeutet, dass die Software flexibel ist, dass die Funktionstüchtigkeit sowie die Zusammenarbeit mit dem Kunden im Vordergrund stehen, Dokumentationen und Befolgung des ursprünglichen Plans aber zugunsten funktionierender Software eher in den Hintergrund rücken. Aus diesem Grund besteht Scrum nur aus wenigen Regeln. Diese definieren die Begriffe Aktivitäten, Artefakte und Rollen, später mehr dazu.

Der Ansatz von Scrum beruht darauf, dass viele Entwicklungsprojekte viel zu komplex sind, um schon im Voraus in einem vollumfänglichen Plan definiert zu werden. Ein wesentlicher Teil der Anforderungen und der Lösungsansätze ist zu Beginn meist unklar. Solche Unklarheiten lassen sich beseitigen, indem Zwischenergebnisse erzeugt werden. Anhand dieser lassen sich die fehlenden Anforderungen einfacher und effizienter finden und umsetzen.
Ein langfristiger Plan existiert dennoch und nennt sich Product Backlog. Dieser wird permanent verfeinert und verbessert. Der Detailplan wird Sprint Backlog genannt. Für jeden Zyklus (Sprint) wird ein neuer erstellt, damit die Projektplanung auf das Wesentliche konzentriert wird.
Scrum ist eine empirische Methode, das heisst es sind folgende drei Grundsätze zu beachten: Transparenz, Überprüfung und Anpassung. Transparenz bedeutet, dass alle Fortschritte und Hindernisse regelmässig für alle sichtbar gemacht werden. Die Überprüfung definiert, dass in regelmässigen Abständen Produktfunktionalitäten geliefert und das Produkt wie auch das Vorgehen beurteilt werden. Die Anpassung hält offen, dass Anforderungen an das Produkt, Pläne und Vorgehen nicht ein für alle Mal festgelegt, sondern kontinuierlich detailliert und angepasst werden können. Durch ein solches Vorgehen wird die Komplexität der Aufgabe natürlich nicht reduziert, aber sie wird in kleinere und weniger komplexe Bestandteile zerlegt, in die Inkremente.
Das Hauptziel von Scrum besteht darin, eine schnelle und kostengünstige Entwicklung von hochwertigen Produkten zu ermöglichen. Dabei werden keine Lasten- oder Pflichtenhefter geführt. Anforderungen werden stattdessen in Form von Eigenschaften aus Anwendersicht formuliert. Die Liste der Anforderungen ergibt das Product Backlog. Diese Anforderungen werden Stück für Stück in zwei bis vier Wochen langen Intervallen (Sprints) umgesetzt.
Scrum ist für Teams einer geringen Grösse bis etwa maximal zehn Personen geeignet. Grössere Entwicklungsprojekte benötigen ein weitergehendes Vorgehen, das die Koordination mehrerer Teams organisieren kann.


Rollen

In Scrum sind drei verschiedene Rollen definiert: Der Product Owner, das Entwicklungsteam und der Scrum Master. Alle Beteiligten dieser Rollen ergeben zusammen das Scrum Team. Neben diesen Rollen, die für die Software zuständig sind, gibt es noch die Stakeholder. Diese sind Beteiligte wie z.B. der Auftraggeber und können den Fortschritt und die Zwischenergebnisse einsehen, da diese transparent sind. Stakeholder dürfen bei den meisten Aktivitäten zuhören.

Der Product Owner ist verantwortlich für die Eigenschaften und den wirtschaftlichen Erfolg des Produkts. Er legt fest, welche Eigenschaften das Produkt am Ende eines Sprints haben muss. Er allein entscheidet über das Produkt, seine Eigenschaften und die Reihenfolge der Implementierung und muss somit die Balance zwischen Eigenschaften, Kosten und Auslieferungszeitpunkt im Blick behalten.
Der Product Owner hält regelmässig Rücksprache mit den Stakeholdern, um auf deren Wünsche eingehen zu können.

Das Entwicklungsteam ist für die Lieferung der Produktfunktionalitäten (Eigenschaften) in der vom Product Owner gewünschten Reihenfolge zuständig. Es muss die vereinbarten Qualitätsstandards einhalten, ist aber frei in der Umsetzung der gewünschten Funktionalitäten. Das Entwicklungsteam sollte in der Lage sein, die Ziele der jeweiligen Sprints möglichst ohne äussere Abhängigkeiten zu erreichen. Deshalb ist es von grossem Vorteil, wenn das Team interdisziplinär besetzt ist. Das Entwicklungsteam besteht aus drei bis neun Mitglieder. Es muss gross genug sein, um alle benötigten Kompetenzen zu vereinigen. Je grösser das Team, desto grösser der Koordinierungsaufwand.

Der Scrum Master ist dafür verantwortlich, dass das Vorgehensmodell Scrum gelingt. Er führt die Regeln von Scrum ein und überprüft deren Einhaltung.  Er gehört zwar meist nicht dem Entwicklungsteam an, arbeitet aber mit diesem zusammen. Er leitet die Treffen und muss sich um die Behebung von Störungen und Hindernissen kümmern. Hindernisse können von mangelnder Infrastruktur über schlechte Kommunikation und Zusammenarbeit bis hin zu persönlichen Konflikten im Entwicklungsteam reichen. Der Scrum Master ist eine dienende Führungskraft, der keine Arbeitsanweisungen an einzelne Teammitglieder vergibt, sondern für den Prozess und die Beseitigung von Hindernissen verantwortlich ist.

Folgende Personen sind als Stakeholder definiert:

- Kunde/Auftraggeber
- Anwender
- Management


Artefakte

In Scrum existieren drei verschiedene Artefakte:

Product Backlog:
Das Product Backlog ist eine Auflistung der Anforderungen an das Produkt. Es ist dynamisch und wird permanent weiterentwickelt. Verantwortlich für das Product Backlog ist der Product Owner. Er muss das Product Backlog pflegen und sich die Priorisierung der Eigenschaften vornehmen.
Das Product Backlog ist nicht vollständig, da zu Beginn eines Projekts meist nicht alle Anforderungen bekannt sind. Die Priorisierung erfolgt unter Gesichtspunkten wie wirtschaftlicher Nutzen, Risiko und Notwendigkeit.
Anforderungen im Product Backlog werden fachlich und anwenderorientiert definiert. Die Formulierung der Produkteigenschaften wird meist in User Stories umgesetzt und diese werden dann Product Backlog Item (PBI) genannt.

Sprint Backlog:
Im Sprint Backlog sind die zu erledigenden Aufgaben eines Sprints aufgeführt. Es umfasst einige der PBI's aus dem Product Backlog und unterteilt diese in Tasks.
Um es für alle Teammitglieder sichtbar zu machen, wird meist ein Taskboard genutzt.

Product Increment
Das Produktinkrement ist das Ergebnis aller PBI's, die während des aktuellen und allen vorangegangenen Sprints fertiggestellt wurden. Am Ende jedes Sprints muss sich das neue Produktinkrement in einem nutzbaren Zustand befinden.


Sprint

Der Sprint ist ein Arbeitsabschnitt, bei dem ein Inkrement einer Produktanforderung implementiert wird. Die Dauer eines Sprints umfasst ein bis vier Wochen. Alle Sprints haben idealerweise die gleiche Länge, um so dem Projekt einen Takt zu geben. Der Sprint ist zu Ende, wenn die Zeit um ist und wird nie verlängert. Des Weiteren sind keine Änderungen während eines Sprints erlaubt, die das Sprintziel beeinflussen. Der Sprint kann jedoch jederzeit durch den Product-Owner abgebrochen werden.

Aktivitäten 

Ein Sprint setzt sich aus folgenden Aktivitäten zusammen: 

Sprint Planning:
Am Anfang des Sprints wird definiert, was entwickelt wird und wie die Arbeit erledigt wird. Die Sprint Planung dauert maximal zwei Stunden pro Sprint-Woche.

Daily Scrum:
Zu Beginn jedes Arbeitstages trifft sich bei einem maximal 15-minütigen Daily Scrum das Entwicklerteam. Zweck des Daily Scrums ist der Informationsaustausch, um einen Überblick des aktuellen Stands der Arbeiten zu bekommen und dient nicht zur Lösung von Problemen.
Der Scrum Master und der Product Owner nehmen häufig an der Sitzung teil, sind jedoch nicht aktiv beteiligt.

Sprint-Review:
Am Ende eines Sprints steht das Sprint-Review. Hier wird vom Scrum Team das Inkrement überprüft und das Product Backlog bei Bedarf angepasst. Das Ergebnis wird vom Entwicklungsteam präsentiert und es wird geprüft, ob das Ziel erreicht wurde. Das Scrum Team bespricht mit den Stakeholdern die Ergebnisse und was es als Nächstes zu tun gibt.

Sprint-Retroperspektive:
Auch ein Teil der nach Beendigung eines Sprints ausgeführt wird. Hierbei überprüft das Scrum Team seine bisherige Arbeitsweise, um sie in Zukunft effizienter machen zu können. Der Scrum Master unterstützt das Team dabei, gute Praktiken und Verbesserungen zu finden, die im nächsten Sprint umgesetzt werden sollen.

Product Backlog Refinement (Backlog Grooming):
Das Product Backlog Refinement ist ein fortlaufender Prozess, bei dem der Product Owner zusammen mit dem Entwicklungsteam das Product Backlog weiterentwickelt.
Oft gibt es auch solche Treffen mit ausgewählten Stakeholdern, um die Anforderungen im Product Backlog besser beschreiben zu können.

Donnerstag, 8. September 2016

August 2016 - Raspberry Pi

Allgemeines

Raspberry Pi -Logo
Raspberry Pi ist der Name einer Serie von Einplatinencomputern im Kreditkartenformat. Ein Einplatinencomputer (manchmal auch Entwicklerboard genannt) ist im Grundsatz ein meist sehr kleines Mainboard mit allen benötigten Hardwareteilen direkt daraufgelötet, um einen vollwertigen PC darzustellen.
Entwickelt wurde der Computer von der britischen "Raspberry Pi Foundation". Der im Vergleich zu normalen Personal Computern sehr einfach aufgebaute Rechner wurde mit dem Ziel entwickelt, jungen Menschen Programmier- und Hardwarekenntnisse auf eine einfachere Weise näher zu bringen. Daher wurde auch der Verkaufspreis niedrig gehalten, der je nach Modell um die 40 - 50 CHF beträgt.

Den Raspberry Pi gibt es mittlerweile in der 3. regulären Version, daneben gibt es noch andere Varianten, welche meist performantere oder aber nur abgespecktere Versionen sind.
Es existiert ein grosses Angebot an verschiedenem Zubehör sowie auch an verfügbarer Software. Das reicht von Kameramodulen über verschiedene Sensoren bis hin zu kapazitiven Multi-Touch-Touchscreens. Aufgrund dieses vielfältigen Angebots gibt es viele verschiedene Einsatzmöglichkeiten für den Einplatinencomputer. Häufig wird er als Mediacenter genutzt, da seit der ersten Version eine HDMI-Schnittstelle mit einer Videoausgabe von 1080p inbegriffen ist. Als Betriebssystem kommt meist eine Linux-Distribution teils mit und teils ohne grafische Oberfläche - je nach Verwendung - zum Einsatz.
Als internes Boot-Medium wird eine wechselbare (Micro)SD-Karte verwendet. Direkte Schnittstellen für Festplattenlaufwerke sind zwar keine vorhanden es zwar keine, jedoch gibt es auch seit der ersten Version mindestens einen USB-Anschluss, worüber problemlos Speichermedien angeschlossen werden können.




Hardware

Raspberry Pi 3

Den Raspberry Pi gibt es in verschiedenen Versionen, die hier aufgeführt sind:

-Compute Module
-Zero
-Modell A
-Modell A+
-Modell B
-Modell B+
- Raspberry Pi 2 Modell B
- Raspberry Pi 3 Modell B



Die Hardware des Raspberry Pi's wurde im Laufe der Zeit immer weiter verbessert. Angefangen mit dem Prozessor: In den frühen Versionen des Computers war der Prozessor mit 700 MHz getaktet und hatte nur einen einzigen Kern. In der zweiten Version arbeitete er mit 900 MHz und vier Kernen. Aktuell, mit dem Raspberry Pi 3, ist ein 4-Kern 1,2 GHz Prozessor verbaut. Allen Versionen gleich ist die Architektur des Prozessors, hier wurde ARM verwendet.
Ähnlich wie der Prozessor wurde der Arbeitsspeicher immer besser. Anfänglich hatte der Computer 256 MB DDR2-SDRAM verbaut. Bei der neusten Version ist es bereits 1 GB desselben Speichers.
Wie schon erwähnt, wird als nichtflüchtiger Speicher eine SD-Karte verwendet. Bei früheren Versionen wurde ein normaler SD-Kartenleser verbaut, heute sind aber oftmals (nur noch) MicroSD-Kartenleser verfügbar.
Um externe Hardware anzuschliessen, stellt der Raspberry Pi herkömmliche USB-2.0-Schnittstellen zur Verfügung. Seit der zweiten Version sind es zwei und ab der dritten Version vier nicht unabhängige USB-Schnittstellen.
In den früheren Versionen des Computers hatte er noch keine Netzwerkanschlüsse verbaut, erst seit dem "Modell B" der ersten Version ist ein LAN-Anschluss dazugekommen. Seit der dritten Version sind zudem eine 2,4GHz-WLAN und eine Bluetooth 4.1 Schnittstelle verbaut.
Bereits seit den Anfängen des Raspberrys ist eine GPIO-Schnittstelle verbaut. GPIO-Schnittstellen sind frei programmierbare Ein- und Ausgabeanschlüsse. Viele der Zubehörteile werden über diese Schnittstelle mit dem Computer verbunden.
Das Audiosignal wird grundsätzlich über den HDMI-Port ausgegeben. Die regulären Versionen besitzen aber auch einen 3,5mm-Klinkenanschluss.



Betriebssystem


Das Betriebssystem des Raspberry Pi befindet sich auf der (Micro)SD-Karte. Empfohlen wird das auf Debian-Linux basierende Raspbian. Diese Distribution wurde speziell für das Raspberry Pi entwickelt. Die Raspberry Pi Foundation erstellt immer auf Basis der neusten Version dieser Distribution ein eigenes Image mit passender Firmware für die Raspberry-Pi-Modelle.
Verschiedene weitere Linux Distributionen wie Ubuntu, Kali Linux, CentOS etc., die auf ARM-Prozessoren lauffähig sind, können auf den Rechner installiert werden. Auch befindet sich die Portierung von Android im Gange. Eine lauffähige Beta-Version ist bereits verfügbar. 

Windows ist grundsätzlich nicht für das Raspberry Pi verfügbar, da die einzige auf ARM-basierte Version (Windows 8 RT) mindestens 1 GB Arbeitsspeicher benötigt. Zwar hätte das neuste Raspberry nun genügend Arbeitsspeicher, da Microsoft aber schon vor dessen Entwicklung eine Windows 10 Variante für das Raspberry ankündigte, wäre eine Windows 8 RT Version nicht mehr sehr sinnvoll gewesen. Zu beachten gilt, dass die Windows Version für das Raspberry Pi, Windows 10 IoT (Internet of  Things) momentan noch nicht über einen klassischen Desktop verfügt und auch die gewohnten Desktop-Anwendungen nicht kompatibel sein werden.


Die Installation des Betriebssystems gestaltet sich je nachdem sehr einfach. Entscheidet man sich für z.B. Raspbian, kann man praktischerweise auf einen Bootloader namens NOOBS zurückgreifen. Mit NOOBS kann das gewünschte Betriebssystem (falls verfügbar) ausgewählt und mit nur einem Kick installiert werden. Alternativ kann natürlich auch manuell ein Betriebssystem installiert werden, was aber umständlicher ist.



Desktop - Aktuelle Version von Raspbian (Jessie)



Übertaktung

Da der Raspberry Pi im Vergleich zu herkömmlichen PCs nicht sehr viel Leistung aufbringt, ist es manchmal von Vorteil, ihn zu übertakten. Da die Raspberry Pi Foundation eine Verringerung der Lebensdauer bei Übertaktung fürchtete, wurde der Prozessor zunächst mit einem speziellen Bit ausgestattet, welches bei Übertaktung unwiderruflich gesetzt wird. Sobald der Prozessor übertaktet wurde, erlosch die Garantie.
Nachdem jedoch ausführliche Tests gezeigt hatten, dass sich ein Übertakten bis zu 1GHz kaum auf die Lebensdauer auswirkt, wurde mit einem Treiber-Update die Möglichkeit erschaffen, sowohl Prozessor sowie Speicher und GPU ohne Garantieverlust zu übertakten. Frequenz und Spannung wird nur dann erhöht, wenn die Leistung gebraucht wird und die Temperatur unter 85°Celsius liegt.
Das vorhin genannte Bit wird immer noch gesetzt, sobald stärker als empfohlen übertaktet wird.