---
tags: Project, School
---
# Tic Tac Node! Projektdokumentation
---
### WORK IN PROGRESS
---
# 1 Einleitung
Die folgende Dokumentation schildert den Ablauf des Programmierprojekts im Rahmen des Unterrichts von Herrn Homm in der 12ITO auf den Beruflichen Schulen Groß-Gerau.
Das Projekt ist Teil unserer Fachinformatikerausbildung.
## 1.1 Projektbeschreibung
Im Rahmen des Unterrichts haben wir von Herrn Homm den Auftrag bekommen ein Spiel zu entwickeln.
Das Spiel soll einen Mehrspielermodus enthalten.
Die Kommunikation soll über einen dezidierten Server stattfinden.
Zur Bedienung des Spiels ist eine Grafische Benutzeroberfläche vorzusehen.
Die Programmiersprache C# ist mit einzubeziehen.
## 1.2 Projektziele
Das Ziel des Projekts ist es eine Plattformunabhängige Version des Spiels "Tic Tac Toe" zu entwickeln.
Hierzu wird eine Serveranwendung zur Verwaltung der Kommunikation entwickelt.
Der Spieler kann mittels einer Webanwendung Plattformunabhängig auf die Anwendung zugreifen.
Desweiteren wird eine Windows Anwendung bereitgestellt.
Der Spieler soll die Möglichkeit erhalten mittels eines Chats mit seinen Kontrahenten zu kommunzieren.
Die Gegnervermittlung erfolgt automatisch und zufällig.
Der Spieler erhält die Möglichkeit einen Benutzernamen festzulegen. Außerdem soll es möglich sein seinen Gegner zum erneuten Spiel herauszufordern.
## 1.3 Projektumfeld
Auftraggeber des Projektes ist Herr Homm.
Das Projekt dient zu Übungszwecken und ist ein Leistungsnachweis des ersten Halbjahres in der Oberstufe zur Ausbildung zum Fachinformatiker. Das Team besteht aus je 2 Anwendungsentwicklern und Systemintegratoren.
## 1.4 Projektbegründung
Es sollen die im Rahmen des Unterrichts erlernten Inhalte verwendet werden, um Praxiserfahrung in der Programmierung mit C# und der Entwicklung von Grafischen Benutzeroberflächen für das Windows Betriebssystem zu sammeln.
# 2 Projektplanung
## 2.1 Projektphasen
Für die Umsetzung des Projektes stand dem Team ein Zeitraum vom 27. August 2019 bis zum 17. Dezember 2019 zur Verfügung. Da das Team abgesehen von der Deadline am 17. Dezember in der Zeitplanung frei war setzte es sich einen konkreten Zeitrahmen von 30 Arbeitstagen zu je 8 Stunden. Dieser wurde vor Projektbeginn auf verschiedene Phasen unterteilt:
1. Analysephase: 1 Tag
2. Entwurfsphase: 3 Tage
3. Implementierungsphase: 20 Tage
4. Evaluation: 2 Tage
5. Erstellen der Projektdokumentation: 4 Tage
# 2.2 Ressourcenplanung
Die verwendeten Ressourcen sind in [A1](#A1-Verwendete-Ressourcen) aufgelistet. Es wurden hauptsächlich kostenlose Open Source Frameworks verwendet um Kosten zu sparen.
# 2.3 Entwicklungsprozess
Durch die recht grob umrissenen Anforderungen und den großzügigen Zeitrahmen haben wir eine Methodik gesucht die es uns ermöglicht Flexibel zu agieren und die Zeit möglichst Effizient zu nutzen. Wir haben uns für das sogenannte Extreme Programming entschieden. Diese Methode setzt auf kurze Iterationszyklen und einen kurzen Entwurfsprozess zu beginn des Projekts. Sie zählt zur Familie der Agilen Entwicklungsmethoden.
So standen wichtige Kernfunktionen wie die Kommunikation zwischen Client und Server an erster Stelle während anschließend in ständiger Rücksprache mit dem Team neue Funktionen hinzugefügt wurden. Es ist eine Art Programmieren auf Sicht.
Da die Ausmaße und die Komplexität des Projekts überschaubar sind verzichteten wir auf das Prinzip der Testgetriebenen Softwareentwicklung.
---
# 3 Analysephase
---
# 3.1 Ist-Analyse
Das Projekt stellt eine Neuentwicklung da.
# 3.2 Wirtschaftlichkeitsanalyse
Das Projekt dient reinen Übungszwecken und ist daher nicht unter dem Gesichtspunkt der Wirtschaftlichkeit zu betrachten.
### 3.2.1 Projektkosten
Wir gehen von einem Stundenschnitt von 100 Stunden pro Person sowie einem Stundenlohn von 8€ aus. Es Fallen keine Kosten für Ressourcen an.
Entwicklungskosten 4 x Auszubildende a 100 Stunden = 3200€
# 4 Entwurfsphase
## 4.1 Zielplattform
Wie bereits im Abschnitt [Projektziele](#1.2-Projektziele) erwähnt, soll das Projekt die Plattformunabhängigkeit erfüllen. Um dies zu erreichen haben wir uns für die Entwicklung einer Webanwendung entschieden. Um die Anforderung der Einbeziehung von C# zu erfüllen wurde eine Desktop Anwendung für Windows auf Basis dieser Programmiersprache entwickelt.
Wir haben uns nach kurzer Recherche für das SocketIO Framework zur Gewährleistung der Multiplayer Funktionalität entschieden. SocketIO ermöglicht uns eine einfache Ressourcenschonende Verwaltung beliebig vieler Teilnehmern. Daraus ergab sich die Verwendung von JavaScript als Programmiersprache für den Server beziehungsweise NodeJS als Serverseitige Laufzeitumgebung. ExpressJS ist für die Verwaltung der ein und ausgehenden HTTP Requests zuständig.
## 4.2 Architekturdesign
Das Projekt basiert auf einer Client-Server Architektur. Die Spielelogik sowie der Verbindungsaufbau wird vom Server bewerkstelligt. Außerdem liefert er bei Verbindungsaufbau über einen Webbrowser die Webanwendung aus und stellt auch den Download des Windows Clients bereit. Der Client stellt das User Interface zur Bedienung der Anwendung zur Verfügung.
## 4.3 Benutzeroberfläche
Die Benutzeroberfläche soll die Bedienung möglichst einfach gestalten. Daher haben wir uns für eine relativ einfache Struktur entschieden. Im Kopf der Anwendung befinden sich die Bedienelemente für den Start der Spielersuche beziehungsweise das Verlassen des Spiels
# Anlagen
### A1 Verwendete Ressourcen
#### Hardware:
* MacBook Pro (2018)
* Amazon EC2 Instanz
#### Software:
* MacOS 10.15 - *Betriebssystem*
* Visual Studio Code - *Code Editor*
* Visual Studio 2017 - *IDE*
* GitHub - *Versionskontrollsystem*
* NodeJS - *Serverseitige JavaScript Laufzeitumgebung*
* NPM - *Paketverwaltung für NodeJS*
* SocketIO - *Framework zur Verwaltung der Serververbindungen*
* Express - *Framework zur Verwaltund von HTTP Requests*
* Bootstrap - *CSS Bibliothek*
* WPF - *Windows UI Framework*
#### Programmier- und Gestaltungssprachen:
* C#
* XAML
* JavaScript
* HTML
* CSS
#### Personal:
* 2 Anwendungsentwickler
* 2 Systemintegratoren