Hausaufgabe: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Langenfeld (Diskussion | Beiträge)
Langenfeld (Diskussion | Beiträge)
 
(88 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
__TOC__
{{TOCRight}}


== Einleitung ==
== Einleitung ==
Zu Beginn des Softwarepraktikums soll sich jeder Teilnehmer mit [[CSharp|C#]], [[MonoGame]] und den dazugehörigen Werkzeugen vertraut machen. Ein guter Startpunkt dafür ist die [[Tutorials|Tutorial-Seite]]. Außerdem soll der erste Anstoß zum selbständigen Recherchieren der benötigten Quellen für das Softwarepraktikum gegeben werden. Aus diesem Grund müssen '''von jedem Teilnehmer''' in der ersten Woche (siehe [[Roadmap]]) verbindliche Hausaufgaben gemacht werden. Diese bestehen aus 5 Aufgaben.
Zu Beginn des Softwarepraktikums soll sich jeder Teilnehmer mit [[CSharp|C#]], [[MonoGame]] und den dazugehörigen Werkzeugen vertraut machen.  
Dazu werden Sie im Laufe dieser Hausaufgabe die Werkzeuge installieren, und damit ein kleines [[MonoGame]]-Programm schreiben.
Die Hausaufgabe muss '''von jedem Teilnehmer''' in der ersten Woche (siehe [[Roadmap]]) verbindlich gemacht werden. <br>
Bitte beachten Sie:


* '''Lesen Sie den Text jeder Aufgabe vollständig durch, bevor Sie mit der Bearbeitung beginnen.'''
* '''Lesen Sie den Text jeder Aufgabe vollständig durch, bevor Sie mit der Bearbeitung beginnen.'''
* '''Bearbeiten Sie die Aufgaben der Reihe nach.'''
* '''Bearbeiten Sie die Aufgaben der Reihe nach''', da diese aufeinander aufbauen.
* '''Beginnen sie nicht erst, wenn die Gruppeneinteilung online ist!''' (Aufgabe 1 lässt sich bereits ohne Gruppeneinteilung erledigen)
* '''Beginnen sie nicht erst, wenn die Gruppeneinteilung online ist!''' (Aufgabe 1 lässt sich bereits ohne Gruppeneinteilung erledigen und kann, falls Probleme auftreten viel Zeit in anspruch nehmen)


== Aufgabe 1: Setup ==  
== Aufgabe 1: Setup ==  
Setzen Sie eine Arbeitsumgebung auf und testen Sie die Zugänge zu den verschiedenen Diensten. Falls Sie mit einem Mac arbeiten, beachten Sie die Informationen zur [[Entwicklung mit einem Mac]].
Setzen Sie eine Arbeitsumgebung auf und testen Sie die Zugänge zu den verschiedenen Diensten.  


=== Arbeitsumgebung ===
=== Arbeitsumgebung ===
Sie finden die relevanten Download-Links unter [[Downloads]].
Im Folgenden sollen Sie ihre Arbeitsumgebung einrichten. Sie können im Sopra beliebige andere Werkzeuge verwenden, müssen aber sicherstellen, dass diese mit den hier vorgestellten Werkzeugen kompatibel sind.
* [[.NET]] 4.7
* [[Visual Studio]] 2019 Community ([https://visualstudio.microsoft.com/de/vs/community/ Download])
* [[MonoGame]] 3.7
** ''Hinweis'': Monogame intalliert in der aktuellen Version noch keine Vorlagen für Visual Studio 2019. Um diese manuell zu installieren, kopieren Sie den Inhalt von [[Datei:MonoGame.zip]] nach <code>C:\Users\<USERNAME>\Documents\Visual Studio 2019\Templates\ProjectTemplates\Visual C#\</code> (dieser Pfad existiert nach der Installation von Visual Studio 2019 Community) oder führen Sie install.bat aus.
* [[Resharper]] (beachten Sie die [[Resharper#Konfiguration|Hinweise zur Konfiguration]])
* Ein [[Git]]-Client ihrer Wahl (Sie werden während der Installation oder später nach einer Emailadresse gefragt werden. Bitte achten Sie darauf die Emailadresse zu verwenden, die sie bei der Anmeldung zum Sopra eingegeben haben. Falls sie bereits einen Git-Client installiert haben, [https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup passen Sie ihre Emailadresse enstprechend an].)
* Wenn Sie auf einem der Poolrechner entwickeln möchten, beachten Sie die Installationshinweise für Poolrechner auf der [[Downloads#Installation_im_Pool|Downloads-Seite]].


=== Dienste ===
* Folgen Sie dem Artikel [[Arbeitsumgebung einrichten]] entsprechend Ihrem Betriebssystem um ihre Entwicklungsumgebung einzurichten.
Um auf die Dienste zugreifen zu können, brauchen Sie einen gültigen Poolaccount.
* Folgen Sie dem Artikel [[Dienste]] um ihre Zugänge zu allen Diensten einzurichten.
==Aufgabe 2: Gitea==
{{RefImg|gitea_setuplabels_done.png|500px|1|Auswahl der vorkonfigurierten Labels.}}
Bereiten Sie ihr [[Gitea]] ([https://git.sopranium.de git.sopranium.de]) auf den Hausaufgabensprint und die Aufgaben ihrer Gruppe vor. Gehen Sie dazu wie folgt vor.


Die folgenden Dienste sollten Sie eingerichtet und getestet haben:
===Gitea vorbereiten===
* Zugang zum [[Gitea]] ihrer Gruppe auf [https://sopragit.informatik.uni-freiburg.de Sopra Git].
Um Gitea in Verbindung mit Scrum verwenden zu können, müssen vorher bestimmte Labels (siehe Abb. 1) für die Issues im Backlog eingerichtet werden. Prüfen Sie, ob diese bereits angelegt wurden. Fall nicht, legen Sie diese an:
* [[GIT#Git für das SOPRA vorbereiten|Einrichten des Git Repository]].
*Klicken Sie auf <code>Issues -> Labels</code>.
* Die Gruppenmailingliste.
*Wenn noch keine Labels eingerichtet wurden, werden Sie gefragt ob ein bereits vorkonfiguriertes Labelset verwendet werden soll. Wählen Sie hier das Set <code>Sopra</code>.
 
*Prüfen sie ob Labels für Priorität und Zeitabschätzung vorhanden sind, wie auf dem Bild zu sehen (Details können variieren). Wenn keine Labels zur Zeitabschätzung und Priorisierung vorhanden sind, löschen Sie alle Labels. Wählen Sie dann wie oben beschrieben das vorkonfigurierte Labelset für das Sopra.
== Aufgabe 2: Gitea ==
{{RefImg|gitea_setuplabels_done.png|500px|2|Auswahl der vorkonfigurierten Labels.}}
Bereiten Sie ihr Gitea auf den Hausaufgabensprint und die Aufgaben ihrer Gruppe vor. Gehen Sie dazu wie folgt vor.
 
=== Gitea vorbereiten ===
Um Gitea in Verbindung mit Scrum verwenden zu können, müssen vorher bestimmte Labels für die Items im Backlog eingerichtet werden.
* Klicken Sie auf <code>Issues -> Labels</code>.
* Wenn noch keine Labels eingerichtet wurden, werden Sie gefragt ob eines der vorkonfigurierten Menge von Labels verwendet werden soll. Wählen Sie hier das vorkonfigurierte Set <code>Sopra</code>.
* Prüfen sie ob Labels für Priorität und Zeitabschätzung vorhanden sind, wie auf dem Bild zu sehen (Details können variieren). Wenn keine Labels zur Zeitabschätzung und Priorisierung vorhanden sind, löschen Sie alle Labels. Wählen Sie dann wie oben beschrieben das vorkonfigurierte Labelset für das Sopra.
<br clear="all">
<br clear="all">


=== Sprint für Hausaufgabe anlegen ===
===Sprint für Hausaufgabe anlegen===
{{RefImg|gitea_firstsprintmilestone.png|500px|2|Den Hausaufgabensprint erstellen.}}
{{RefImg|gitea_firstsprintmilestone.png|500px|2|Den Hausaufgabensprint erstellen.}}
Prüfen sie ob in Gitea ein Sprint für die Hausaufgabe angelegt wurde.
Prüfen sie ob in Gitea ein Sprint für die Hausaufgabe angelegt wurde. Falls nicht, legen Sie den entsprechenden Sprint (Milestone in Gitea) an:
* Klicken Sie auf den Reiter <code>Issues -> Milestones</code>.
*Klicken Sie auf den Reiter <code>Issues -> Meilensteine</code>.
* Falls kein Sprint (Milestone) für die Hausaufgabe angezeigt wird, legen Sie einen Milesstone mit dem Namen <code>Sprint 00 (Hausaufgabe)</code> an.
*Falls kein Sprint (Milestone) für die Hausaufgabe angezeigt wird (siehe Abb. 2), legen Sie einen Milesstone mit dem Namen <code>Sprint 00 (Hausaufgabe)</code> an.
**Verwenden Sie das Datum für das Ende des Sprints das Abgabedatum auf der [[Hauptseite]].
**Verwenden Sie das Datum für das Ende des Sprints das Abgabedatum auf der [[Hauptseite]].
<br clear="all">
<br clear="all">


=== User Stories für Aufgabe 3 erstellen ===
===Issues für Aufgabe 3 erstellen===
{{RefImg|Firstusrstry.png|500px|13|Eine User Story anlegen.}}
{{RefImg|Firstusrstry.png|500px|3|Ein Issue anlegen.}}
Prüfen Sie ob für die Hausaufgabe bereits alle Userstories existieren. Wenn nicht, legen Sie diese an.
*Klicken Sie auf <code>Issues -> Neues Issue</code>
* Klicken Sie auf den Reiter <code>Issues</code>.
*Tragen sie als Titel <code>Scrum, Gitea und Git verstehen</code> ein.
* Prüfen Sie ob bereits eine User Story mit dem Titel <code>Student <NAME> soll Scrum, Gitea und Git verstehen</code> und Label <code>User Story</code> existiert.
*Tragen sie im Textfeld darunter die ausführliche Beschreibung <code>Scrum, Gitea und Git verstehen um effizient arbeiten zu können</code> ein.
** Wenn nicht legen Sie eine entsprechende Userstory an indem Sie den weiteren Punkten folgen:
* Weisen Sie dem Issue eine hohe Priorität über das Label <code>priority high</code> zu, indem Sie auf das Zahnrad neben dem Schrifzug ''Label'' drücken und die entsprechenden Label auswählen.
*# Klicken Sie <code>Neuer Issue</code>.
*Weisen Sie dem Sprint (Meilenstein) ''Sprint 00 (Hausaufgabe)'' zu.
*# Tragen sie als Titel <code>Student <NAME> soll Scrum, Gitea und Git verstehen</code> ein.
*Drücken sie auf <code>Issue Erstellen</code>.
*# Tragen sie im Textfeld darunter die User Story <code>Student <NAME> soll Scrum, Gitea und Git verstehen um effizient arbeiten zu können.</code> ein.
Hinweis: Die Tickets die Sie im Folgenden erstellen sind um ihre Aufgaben zu tracken. Sollten bereits Tickets mit den selben Titeln von einem anderen Gruppenmitglied existieren, legen Sie trotzdem neue Tickets für sich selbst an (und schließen sie später auch nur diese).
*# Weisen Sie die Label <code>user story</code> und hohe Priorität über das Label <code>high</code> zu , indem Sie auf das Zahnrad neben dem Schrifzug ''Label'' drücken und die entsprechenden Label auswählen.
*# Weisen Sie dem Sprint (Meilenstein) ''Hausaufgabe'' zu.
*# Drücken sie auf <code>Issue Erstellen</code>.


=== User Story für Aufgabe 4 erstellen ===
=== Issues für Aufgabe 4 erstellen===


Erstellen Sie wie in den vorhergehenden Aufgaben beschrieben, eine User Stories für Aufgabe 4
Erstellen Sie wie in den vorhergehenden Aufgaben beschrieben, die Issues für Aufgabe 4:
* Titel <code>Student <NAME> soll die Clean Code Development Texte lesen</code> mit User Story <code>Student <NAME> soll die Clean Code Development Texte lesen, um besseren Code schreiben zu können.</code>
*Titel <code>Clean Code Development Texte lesen</code> mit der Beschreibung <code>Clean Code Development Texte lesen um zu verstehen wie man Code schreibt, der verständlich und lesbar ist.</code>
* Titel <code>Student <NAME> soll den Usability Artikel lesen</code> mit User Story <code>Student <NAME> soll den Usability Artikel lesen, um von vornherein Usabilityprobleme zu vermeiden.</code>
* Titel <code>Usability Artikel lesen</code> mit Beschreibung <code>Usability Artikel lesen um zu verstehen wie man Usabilityprobleme im Spiel von vornherein vermeiden kann.</code>
* Titel <code>Student <NAME> soll die Dokumentation Texte lesen</code> mit User Story <code>Student <NAME> soll die Dokumentation Texte lesen, um seinen Code sinvoll dokumentieren zu können.</code>
*Titel <code>Dokumentation Texte lesen</code> mit Beschreibung <code>Dokumentation Texte lesen um den eigenen Code sinvoll dokumentieren zu können.</code>


=== User Story für Aufgabe 5 erstellen ===
===Issues für Aufgabe 5 erstellen===
Erstellen Sie wie in den vorhergehenden Aufgaben beschrieben, eine User Story für Aufgabe 5
Erstellen Sie wie in den vorhergehenden Aufgaben beschrieben, das Issue für Aufgabe 5:
* Titel <code>Student <NAME> soll ein MonoGame Programm schreiben</code> mit User Story <code>Student <NAME> soll das in Aufgabe 5 beschriebene Programm schreiben, um seine Entwicklungswerkzeuge zu testen.</code>
*Titel <code>MonoGame Programm schreiben</code> mit Beschreibung <code>Programm wie in Aufgabe 5 beschrieben schreiben um die Entwicklungswerkzeuge zu testen.</code>


=== Tasks akzeptieren ===
===Issues zuweisen===
{{RefImg|gitea_hausaufgabe_tasks_assigned.png|500px|13|User Stories für die Hausaufgabe, vom Studenten akzeptiert und mit Zeitschätzung.}}
{{RefImg|gitea_hausaufgabe_tasks_assigned.png|500px|4|Issues für die Hausaufgabe, vom Studenten akzeptiert und mit Zeitschätzung.}}
Bevor Sie mit den Aufgaben beginnen, sollten Sie sich die entsprechendn User Stories zuweisen.
Bevor Sie mit den Aufgaben beginnen, sollten Sie sich die entsprechenden Issues zuweisen (siehe Abb. 4).
* Wählen Sie eine ihrer Stories aus dem Sprintbacklog (<code>Issues -> Milestones -> Hausaufgabe</code>) aus, indem Sie auf den Titel des Tasks klicken.
*Wählen Sie eines ihrer Issues aus dem Sprintbacklog (<code>Issues -> Milestones -> Sprint 00 (Hausaufgabe)</code>) aus, indem Sie auf den Titel des Issues klicken.
* Geben sie eine Abschätzung wie lange es dauern wird die Story nach der Definition of Done umzusetzten. Weisen Sie das Label <code>est: 1</code> um die Abschätzung zu geben, dass eine Stunde Arbeit benötigt wird um die User Story umzusetzten. Wenn sie vermuten, dass Sie mehr als eine Stunde benötigen, wählen Sie einen entsprechend höheren Wert aus.  
*Geben sie eine Abschätzung wie lange Sie benötigen werden um den Issue nach der Definition of Done umzusetzten. Weisen Sie das Label <code>est: 1</code> um die Abschätzung zu geben, dass es insgesamt eine Stunde Arbeit benötigt wird. Wenn sie vermuten, dass Sie mehr als eine Stunde benötigen, wählen Sie einen entsprechend höheren Wert aus.
* Weisen Sie sich dem Task zu, indem Sie auf das Zahnrad neben dem Schriftzug ''Zuständig'' klicken, und ihren Benutzernamen auswählen.  
* Weisen Sie sich dem Issue zu, indem Sie auf das Zahnrad neben dem Schriftzug ''Zuständig'' klicken, und ihren Benutzernamen auswählen.
Aktzeptieren Sie so alle Tasks die sie in den vorhergehenden Aufgaben erstellt haben. Akzeptieren Sie auch den Task zur Aufgabe 5 falls dieser schon existierte.
Weisen Sie so alle Tasks die sie in den vorhergehenden Aufgaben erstellt haben zu. Weisen Sie sich auch den Issue zu Aufgabe 5 zu, falls dieser schon existierte.


Es ist nicht nötig einen Kommentar zu schreiben, alle Änderungen an Labels und zugewiesenen Personen werden sofort übernommen und in der Historie der User Story eingetragen.
Beachten Sie, dass es nicht nötig für jede Änderung einen Kommentar zu schreiben. Alle Änderungen an Labels und zugewiesenen Personen werden sofort übernommen und in der Historie des Issues eingetragen.


=== Überprüfen der Tasks ===
=== Überprüfen der Issues===


Bevor Sie mit der Arbeit zu beginnen, prüfen Sie noch einmal ob alle Userstories im Sprintbacklog vorhanden sind.
Bevor Sie mit der Arbeit beginnen, prüfen Sie noch einmal ob alle Issues für Ihre Aufgaben im Sprintbacklog vorhanden sind.
* Klicken sie auf den Reiter <code>Issues -> Meilensteine -> Hausaufgabe</code>
* Klicken sie auf den Reiter <code>Issues -> Meilensteine -> Sprint 00 (Hausaufgabe)</code>
* Schränken Sie die Anzeige auf ihnen zugewiesene Stories ein, indem sie unter <code>Label ⯆</code> <code>User Story</code> wählen, und unter <code>Zuständig </code> ihren Usernamen. Prüfen Sie ob alle Stories vorhanden sind.
* Schränken Sie die Anzeige auf die Ihnen zugewiesenen Issues ein, indem sie unter <code>Zuständig</code> ihren Usernamen wählen. Prüfen Sie ob alle Issues vorhanden sind.
* Erstellen Sie eventuell nicht vorhandene Userstories und Tasks wie in den vorhergehenden Aufgaben beschrieben.
* Erstellen Sie eventuell nicht vorhandene Issues wie in den vorhergehenden Aufgaben beschrieben.


== Aufgabe 3: Scrum und Gitea verstehen ==
==Aufgabe 3: Scrum und Gitea verstehen==


* Recherchieren Sie, was [[Scrum]] ist und wie Scrum funktioniert.
* Recherchieren Sie, was [[Scrum]] ist und wie Scrum funktioniert.
* Lesen Sie außerdem den Wikipedia-Artikel zu [http://de.wikipedia.org/wiki/User_Story User Stories].
*Lesen Sie außerdem den Wikipedia-Artikel zu [http://de.wikipedia.org/wiki/User_Story User Stories].
* Machen Sie sich mit den anderen Funktionen von [[Gitea]] vertraut und lesen Sie den Artikel [[Scrum und Gitea]]
* Machen Sie sich mit den anderen Funktionen von [[Gitea]] vertraut und lesen Sie den Artikel [[Ablauf|Scrum im Sopra]]
* Sollte es Fragen zum Vorgehen (Scrum und Gitea) geben, schreiben Sie diese als Kommentar in ihre User Story, damit eventuelle Fragen schnell geklärt werden können (Kommentarfeld unter <code>Issues -> Meilensteine -> Hausaufgabe -> Student <NAME> soll Scrum, Gitea und Git verstehen</code>).
*Sollte es Fragen zum Vorgehen (Scrum und Gitea) geben, schreiben Sie diese als Kommentar in ihr Issue in Gitea, damit eventuelle Fragen schnell geklärt werden können (Kommentarfeld unter <code>Issues -> Meilensteine -> Sprint 00 (Hausaufgabe) -> Scrum, Gitea und Git verstehen</code>; vergessne Sie nicht ihren Tutor und/oder die Dozenten per  <code>@</code>  zu erwähnen, damit diese die Frage auch sehen).
* Lesen sie die Artikel [[GIT|Git]] und [[GitWorkflow| Git Workflow]]
*Lesen sie die Artikel [[GIT|Git]] und [[GitWorkflow| Git Workflow]]
** [[Git#Repository clonen|Klonen]] sie das Gruppenrepository.
**Richten Sie sich den Zugang zu ihrem Gruppenrepository ein, indem Sie in [[Gitea]] ein [[Gitea#HTTPS Kennwort einrichten|HTTPS Kennwort einrichten]] oder einen [[Gitea#SSH Key hinzufügen|SSH Key hinzufügen]].
** Schreiben Sie Ihren Namen in die dafür vorgesehene Zeile in <code>README.md</code>. Verwenden Sie hierfür nicht den Editor in Gitea, sondern editieren sie die Datei in ihrem lokalen Git-Repository. Falls es bereits einen Termin für das Gruppentreffen gibt, tragen Sie diesen auch ein.
**[[Git#Repository klonen|Klonen]] sie das Gruppenrepository.
** [[Git#Änderungen an einer Datei| Committen]] sie ihre Änderungen. Benutzen sie die Commitnachricht <code>Added Name to Readme.md (closes <ticketnummer>)</code> um den entsprechenden Task in Gitea [[Git#Git und Gitea | per Commitnachricht zu schließen]].
**Öffnen Sie dort die Datei <code>README.md</code> und fügen Sie ihren Namen an der dafür vorgesehenen Stelle hinzu (Verwenden Sie hierfür '''nicht''' den Editor in Gitea, sondern eine lokale Kopie des Repositories wie in dieser Aufgabe beschrieben).
** [[Git#Änderungen in das remote Repository laden (pushen)| Synchronisieren]] sie ihre Änderungen mit dem Server. Beachten halten Sie sich dabei an [[GitWorkflow#Tägliche Arbeit Synchronisieren| den vorgeschlagenen Git-Workflow]]. Es it gut möglich, dass dabei Konflikte entstehen, beachten sie hierzu [[Git#Konflikte lösen| die Anleitung zum Konflikte lösen in Git]].
**[[Git#Änderungen an einer Datei| Committen]] sie ihre Änderungen: Benutzen sie die Commitnachricht <code>Added name to README.md (closes #<issue-nummer>)</code> um das entsprechende Issue in Gitea [[Git#Git und Gitea | per Commitnachricht zu schließen]].
* Sollte es noch keine <code>.gitignore</code>-Datei in Ihrem Repository geben, erstellen Sie in ihrem Repository eine entsprechende Datei ([[Git#Dateien Ignorieren]]), sodass temporäre Dateien von Visual Stuidio und Verzeichnisse für den Compileroutput von Git ignoriert werden. Comitten Sie diese Datei und pushen Sie diese ebenfalls. Eine gute Vorlage finden Sie unter [https://github.com/github/gitignore/blob/master/VisualStudio.gitignore Github].
**[[Git#Änderungen in das remote Repository laden (pushen)| Synchronisieren]] sie ihre Änderungen mit dem Server. Halten Sie sich dabei and [[GitWorkflow#Tägliche Arbeit Synchronisieren| den empfohlenen Git-Workflow]]. Es it gut möglich, dass durch den Commit konflikte entstehen: Beachten sie hierzu [[Git#Konflikte lösen| die Anleitung zum Konflikte lösen in Git]], und lösen Sie die entstehenden Konflikte sinvoll auf.
*Sollte es noch keine <code>.gitignore</code>-Datei in Ihrem Repository geben, erstellen Sie in ihrem Repository eine entsprechende Datei ([[Git#Dateien Ignorieren]]), sodass temporäre Dateien von Visual Stuidio und Verzeichnisse für den Compileroutput von Git ignoriert werden. Comitten Sie diese Datei und pushen Sie diese ebenfalls. Eine gute Vorlage finden Sie unter [https://github.com/github/gitignore/blob/master/VisualStudio.gitignore Github].
 
'''Hinweis''': Achten Sie darauf, dass die in ihrem [[Git]] eingestellte Emailadresse mit der in Gitea eingestellten Emailadesse übereinstimmt, da Ihnen sonst keine Commits zugeordnet werden können (siehe [[Formalien]]).


'''Hinweis''': Achten Sie darauf, dass die in ihrem [[Git]] eingestellte Emailadresse mit der in Gitea eingestellten Emailadesse übereinstimmt, da Ihnen sonst keine Commits zugeordnet werden können.
'''Hinweis:''' Prüfen sie ihre Änderungen bevor sie diese per push mit dem server synchronisieren: prüfen Sie ob sie ausversehen ungewollte Dateien in den Commit aufgenommen haben und ob die Commitnachricht auch dem Inhalt entspricht. Sollten Sie im Verlauf des Projekts Codedateien mergen, prüfen Sie immer, ob das Programm nach dem Merge noch kompiliert/funktioniert.


== Aufgabe 4: Texte lesen ==  
==Aufgabe 4: Texte lesen==  
Lesen Sie sich die folgenden Artikel durch, und kommentieren Sie ihr entsprechendes Ticket:
Lesen Sie sich die folgenden Artikel durch, und kommentieren Sie ihr entsprechendes Issue:
* Lesen Sie [[CleanCode|Clean Code Development]]  
*Lesen Sie [[CleanCode|Clean Code Development]]  
** Beschreiben Sie in einem Kommentar zum entsprechenden Task ein Cleancodeprinzip und wieso Sie es für das Sopra für besonders wichtig erachten.
**Beschreiben Sie in einem Kommentar zum entsprechenden Issue ein Cleancodeprinzip und wieso Sie es für das Sopra für besonders wichtig erachten.
* Lesen Sie [[Dokumentation]]
* Lesen Sie [[Dokumentation]]
* Lesen Sie [[UsabilityForGames|Usability-Prinzipien beim Spieldesign]]  
*Lesen Sie [[UsabilityForGames|Usability-Prinzipien beim Spieldesign]]  
** Beschreiben Sie in einem Kommentar zum entsprechenden Task ein Usabilityprinzip und wieso Sie es für das Sopra für besonders wichtig erachten.
**Beschreiben Sie in einem Kommentar zum entsprechenden Issue ein Usabilityprinzip und wieso Sie es für das Sopra für besonders wichtig erachten.
 
=== User Stories bearbeiten ===
Bearbeiten sie die Aufgaben und tragen Sie entsprechende Zeiten in die User Stories ein. Besonders bei Programmieraufgaben ist dies sinnvoll, da so eine Historie der Bearbeitung und der verbrauchten Zeit erstellt wird. Dies hilft nicht nur Ihnen bei der Planung weiterer Aufgaben und Abschätzung der dafür benötigten Zeit, sondern dient auch als Nachweis für Ihre kontinuierliche Mitarbeit (siehe [[Formalien]]).


'''Achtung''': Geben Sie Acht beim Zeit eintragen, da Sie die Summe nachträglich nur nach oben verändern können.
===Issues bearbeiten===
Bearbeiten sie die Aufgaben und tragen Sie entsprechende Zeiten in die Issues in Gitea ein (im Menü rechts, <code>Zeiterfassung starten</code>). Besonders bei Programmieraufgaben ist dies sinnvoll, da so eine Historie der Bearbeitung und der verbrauchten Zeit erstellt wird. Dies hilft nicht nur Ihnen bei der Planung weiterer Aufgaben und Abschätzung der dafür benötigten Zeit, sondern dient auch als Nachweis für Ihre kontinuierliche Mitarbeit (siehe [[Formalien]]).


=== User Stories schließen ===
===Issues schließen===
Wenn Sie mit einer Aufgabe fertig sind, sollten Sie Ihren entsprechenden User Stories schließen. Gehen Sie ähnlich wie beim Akzeptieren einer Story vor und drücken Sie auf den Button ''Schließen''.
Wenn Sie mit einer Aufgabe fertig sind, sollten Sie Ihren entsprechenden Issues schließen. Gehen Sie ähnlich wie beim Akzeptieren einer Story vor und drücken Sie auf den Button ''Schließen''. Beachten Sie bei Aufgaben die zu denen Sie etwas comitten, dass Sie das Issue auch über die [[Git#Git und Gitea |Commitnachricht schließen können]].


Vergessen Sie nicht die Zeit, die Sie für den Task benötigt haben, einzutragen (falls Sie das noch nicht gemacht haben).
Vergessen Sie nicht die Zeit, die Sie für den Task benötigt haben, einzutragen (falls Sie das noch nicht gemacht haben).


== Aufgabe 5: Programm schreiben ==  
==Aufgabe 5: Programm schreiben==  
[[Datei:homework_final.jpg|thumb|right|Abbildung 14: Das fertige Programm könnte so aussehen.]]
[[Datei:homework_final.jpg|thumb|right|Abbildung 5: Das fertige Programm könnte so aussehen.]]
Bevor Sie mit dieser Aufgabe beginnen, sollten Sie Ihren entsprechenden User Story akzeptieren.
Erstellen Sie ein [[MonoGame]] Programm, welches die folgenden Eigenschaften erfüllt:  
 
===Funktionale Anforderungen===
Erstellen Sie ein [[MonoGame]] Programm, welches die folgenden Eigenschaften erfüllt:
[[Datei:unilogo.png|right|thumb|Abbildung 6: Das Uni-Logo]]
=== Funktionale Anforderungen ===
[[Datei:background.png|right|thumb|Abbildung 7: Hintergrundgrafik]]
[[Datei:unilogo.png|right|thumb|Abbildung 15: Das Uni-Logo]]
*Das Programm zeichnet eine Hintergrundgrafik in einem MonoGame-Fenster.
[[Datei:background.png|right|thumb|Abbildung 16: Hintergrundgrafik]]
*Vor dieser Hintergrundgrafik rotiert ein Uni-Logo um den Bildschirmmittelpunkt.
* Das Programm zeichnet eine Hintergrundgrafik in einem MonoGame-Fenster.
**Das Logo muss transparent sein, d.h. es dürfen keine weißen Ränder der verwendeten Grafik sichtbar sein. Außerdem muss durch alle nicht-schwarzen Stellen des Logos hindurchgesehen werden können.
* Vor dieser Hintergrundgrafik rotiert ein Uni-Logo um den Bildschirmmittelpunkt.
**Das Logo muss korrekt skaliert sein, damit es vollständig in den sichtbaren Bereich hinein passt.
** Das Logo muss transparent sein, d.h. es dürfen keine weißen Ränder der verwendeten Grafik sichtbar sein. Außerdem muss durch alle nicht-schwarzen Stellen des Logos hindurchgesehen werden können.
**Das Logo darf während der Bewegung nicht über die Ränder des sichtbaren Bereiches hinausragen. (Größenveränderung des Fensters ist zu vernachlässigen. Es gilt die Größe des Fensters bei Programmaufruf.)
** Das Logo muss korrekt skaliert sein, damit es vollständig in den sichtbaren Bereich hinein passt.
*Innerhalb des [[MonoGame]]-Fensters wird ein Maus-Cursor angezeigt.
** Das Logo darf während der Bewegung nicht über die Ränder des sichtbaren Bereiches hinausragen. (Größenveränderung des Fensters ist zu vernachlässigen. Es gilt die Größe des Fensters bei Programmaufruf.)
* Innerhalb des [[MonoGame]]-Fensters wird ein Maus-Cursor angezeigt.<br />'''Hinweis, falls Sie mit einer virtuellen Maschine arbeiten, in der Windows installiert ist:''' Normalerweise wird der Mauszeiger in MonoGame Fenstern standardmäßig ausgeblendet, wenn man ihn nicht explizit aktiviert. Beim Arbeiten mit einer virtuellen Maschine kann es jedoch sein, dass der Mauszeiger im Fenster immer angezeigt wird. In diesen Fällen wird nicht bemerkt, dass man den Mauszeiger eigentlich hätte anschalten müssen. Um sicher zu stellen, dass die Anforderung erfüllt ist, testen Sie Ihr Programm sicherheitshalber noch einmal an einem der Poolrechner unter Windows, um einen möglichen Punktabzug an dieser Stelle in der Hausaufgabe auszuschließen.
* Wenn der Benutzer mit der Maus innerhalb des Fensters klickt, soll ein Sound abhängig von der Position des Cursors abgespielt werden:
* Wenn der Benutzer mit der Maus innerhalb des Fensters klickt, soll ein Sound abhängig von der Position des Cursors abgespielt werden:
** Befindet sich der Cursor über dem Logo, soll ein Ton A erklingen.
**Befindet sich der Cursor über dem Logo, soll ein Ton A erklingen.
** Befindet sich  der Cursor nicht über dem Logo, soll ein Ton B erklingen.
**Befindet sich  der Cursor nicht über dem Logo, soll ein Ton B erklingen.
** Ton A und Ton B müssen verschieden sein.
** Ton A und Ton B müssen verschieden sein.


=== Randbedingungen ===
[[Kategorie:Code-Beispiele]]
Die [[Anforderungen#Randbedingungen|Randbedingungen]] müssen erfüllt werden. Insbesondere muss Ihre Abgabe komplett frei von [[Resharper]]-Fehlern und Warnungen sein. Die zu verwendenden Settings sind die der finalen Abgabe (<tt>Softwarepraktikum-final.DotSettings</tt>).


==== ReSharper-Hinweise ====
=== Ressourcen===
Beim Erstellen eines [[MonoGame]]-Projekts wird eine Variable, <tt>mGraphics</tt> von MonoGame angelegt, welche augenscheinlich initial nicht verwendet wird. Das heißt, sie wird innerhalb des Quelltextes nicht gelesen. Die Variable wird jedoch intern von der MonoGame-Engine verwendet und darf nicht gelöscht werden, da sonst wichtige Grafikschnittstellen nicht gefunden werden und das Programm abstürzt.
Damit das Erstellen von Grafiken ignoriert werden kann, gibt es hier die beiden Beispieldateien aus der Einführungsveranstaltung:
*[[Medium:Unilogo.png|Das Uni-Logo]]
*[[Medium:Background.png|Hintergrundgrafik]]


Es kann sein, dass die Hausaufgabe programmiert werden kann, ohne dass man diese Variable jemals irgendwo verwenden muss. Dies führt dazu, dass [[Resharper|ReSharper]] eine Fehlermeldung bzgl. einer unbenutzten Variable im Projekt ausgibt.
Als Audiodateien können beliebige, kurze, Dateien verwendet werden. Die beiden aus der Einführungsveranstaltung bekannten Waves gibt es hier:
 
*[[Datei:logo_hit.wav|Das Logo wird getroffen]]
Um ReSharper-Konformität der Hausaufgabe unter diesen Bedingungen herzustellen, sind mehrere Möglichkeiten denkbar:
*[[Datei:logo_miss.wav|Das Logo wird nicht getroffen]]
# Verwenden der mGraphics Variable bei der Erstellung eines Sprite-Batches. Es ist möglich, den SpriteBatch, auf dem das Uni-Logo gezeichnet wird, mit<br /><source lang="csharp">someSpriteBatch = new SpriteBatch(mGraphics.GraphicsDevice);</source> zu initialisieren.
# Hinzufügen einer ReSharper-Ausnahme für die Variable <tt>mGraphics</tt>. Eine Ausnahme für diese Variable ist die einzige Ausnahme, die wir akzeptieren.


[[Kategorie:Code-Beispiele]]
===Abgabe===
Bitte verwenden Sie zur finalen [[Abgabe#Hausaufgabe|Abgabe]] der Hausaufgabe das [[GIT|Git]]-Repository ihrer Gruppe. Der Programmier-Teil der Hausaufgabe muss der komplette Projektordner (ab dem Verzeichnis, das die Projektdatei  <code>*.sln</code>  enthält) abgegeben werden. Sie sollten dazu einfach das Projekt in das Gruppenrepository unter <code>/abgabe/hausaufgabe/<username>/</code> comitten.


=== Ressourcen ===
Bitte vergewissern Sie sich vorher noch einmal, ob eine entsprechende [[Git#Dateien Ignorieren|.gitignore Datei]] angelegt ist, damit auschließlich relevante Projektdateien (z.B.: die Solution und Codedateien) aber keine temporären Dateien im Repository eingecheckt werden.
Damit das Erstellen von Grafiken ignoriert werden kann, gibt es hier die beiden Beispieldateien aus der Einführungsveranstaltung:
* [[:Media:unilogo.png|Das Uni-Logo]]
* [[:Media:background.png|Hintergrundgrafik]]


Als Audiodateien können beliebige, kurze, Dateien verwendet werden. Die beiden aus der Einführungsveranstaltung bekannten Waves gibt es hier:
==Aufgabe 6: Abgabe finalisieren==
* [[Datei:logo_hit.wav|Das Logo wird getroffen]]
* [[Datei:logo_miss.wav|Das Logo wird nicht getroffen]]


=== Abgabe ===
Wenn Sie in Ihrer Gruppe die Aufgaben als letztes abschließen (d.h. Sie den letzten Issue im Sprintbacklog schließen) fällt Ihnen die Aufgabe zu, den Sprit für Ihre Gruppe abzuschießen ([[GitWorkflow#Sprint Abschließen|vgl. Sprint Abschließen]]):  
Bitte verwenden Sie zur finalen [[Abgabe#Hausaufgabe|Abgabe]] der Hausaufgabe das [[GIT|Git]]-Repository ihrer Gruppe: {{:Abgabe/Hausaufgabe}}


== Abgabe Finalisieren ==
{{RefImg|gitea_mergehomework.png|300px|12|Einen Pullrequest erstellen.}}
Wenn Sie in Ihrer Gruppe die Aufgaben als letztes abschließen (d.h. Sie den letzten offenen User Story im Sprint schließen fällt erledigen Sie noch folgende Aufgabe.




Der Fortschritt der während des Sprints erziehlt wurde (Inkrement) muss auf den <code>release</code> branch übtertragen werden, damit trotz weiterer Arbeit immer eine auslieferbare Version verfügbar ist.
Der Fortschritt der während des Sprints erzielt wurde (Inkrement) muss auf den <code>release</code> branch übertragen werden, damit trotz weiterer Arbeit immer eine auslieferbare Version verfügbar ist. In den auf die Hausaufgabe folgenden Sprints gehört dies zu den aufgaben des Product owners.  
* Schließen Sie das Sprintbacklog (<code>Issues -> Meilensteine -> Hausaufgabe -> Schießen</code>).
*Schließen Sie das Sprintbacklog (<code>Issues -> Meilensteine -> Sprint 00 (Hausaufgabe) -> Schießen</code>).
* Erstellen sie einen [[Gitea#Pullrequest|Pullrequest]], sodass der aktuelle Stand von <code>dev</code> nach <code>master</code> kopiert werden kann wird. Gehen Sie wie folgt vor:
*Erstellen sie einen [[Gitea#Pullrequest|Pullrequest]] (siehe Abb. 8), sodass der aktuelle Stand von <code>main</code> nach <code>release</code> übertragen werden kann. Gehen Sie wie folgt vor:
** Klicken Sie in Gitea auf den Reiter <code>Code -> Branch: master</code>.
**Klicken Sie in Gitea auf den Reiter <code>Code -> Branch: main</code>.
** Drücken Sie auf den grünen Button neben dem Branch-dropdown.
**Drücken Sie auf den Button <code>Neuer Pull-Request</code>.
** Prüfen Sie im folgenden Dialog, dass als Ziel <code>release</code> und als pullen von <code>master</code> gewählt sind. Geben Sie dem Pullrequest den Titel ''Hausaufgabe''.  
**Prüfen Sie im folgenden Dialog, dass als Ziel <code>release</code> und als pullen von <code>main</code> gewählt sind. Geben Sie dem Pullrequest den Titel ''Hausaufgabe''. Ihnen werden daraufhin alle Änderungen die mit dem Pull-Request vom  <code>main</code>  auf den <code>release</code> -Branch übertragen werden sollen angezeigt.
** Drücken Sie auf <code>Pullrequest Erstellen</code>.
**Drücken Sie auf <code>Pullrequest Erstellen</code>.
** Gitea wird feststellen, dass <code>master</code> automatisch in <code>release</code> gemerged werden kann. Ein weiteres Drücken auf <code>Pull-Request Zusammenführen</code> öffnet ein Kommentarfenster, noch einmal drücken schließt den Pull-Request ab.
**Gitea wird feststellen, dass es zwischen <code>main</code> und <code>release</code> keine Konflikte gibt, und der Merge automatisch durchgeführt werden kann. Ein weiteres Drücken auf <code>Pull-Request Zusammenführen</code> öffnet ein Kommentarfenster, noch einmal drücken schließt den Pull-Request ab.


Die Änderungen die Sie und ihre Gruppe während des Hausaufgabensprints gemacht haben, wurden nun in den <code>release</code>-branch übertrangen.
Die Änderungen die Sie und ihre Gruppe während des Hausaufgabensprints gemacht haben, befinden sich nun auch auf dem <code>release</code>-Branch.


=== Hinweise ===
===Hinweise===
* Falls Sie Probleme beim Starten der Anwendung haben, schauen Sie zuerst in die [[FAQ]]. Ein oft auftretendes Problem ist z.B. die Fehlermeldung [[FAQ/Entwicklung/XNA#Wenn_ich_mein_Spiel_starten_will.2C_erhalte_ich_die_Fehlermeldung_.22No_suitable_graphics_card_found..22|"No suitable graphics card found"]].
*Falls Sie Probleme beim Starten der Anwendung haben, schauen Sie zuerst in die [[FAQ]] und in das [https://discourse.sopranium.de Discourse].
* Möglicherweise wird bei Ihnen kein Sound abgespielt, obwohl dies Ihrer Einschätzung nach eigentlich der Fall sein sollte. Prüfen Sie in diesem Fall, ob die Installation der [https://www.microsoft.com/en-us/download/details.aspx?id=35 DirectX Runtime] das Problem behebt.
*Möglicherweise wird bei Ihnen kein Sound abgespielt, obwohl dies Ihrer Einschätzung nach eigentlich der Fall sein sollte. Prüfen Sie in diesem Fall, ob die Installation der [https://www.microsoft.com/en-us/download/details.aspx?id=35 DirectX Runtime] das Problem behebt.


[[Kategorie:Organisation]]
[[Kategorie:Organisation]]
[[Kategorie:Entwurf]]
[[Kategorie:Entwurf]]

Aktuelle Version vom 15. Oktober 2024, 09:28 Uhr

Einleitung

Zu Beginn des Softwarepraktikums soll sich jeder Teilnehmer mit C#, MonoGame und den dazugehörigen Werkzeugen vertraut machen. Dazu werden Sie im Laufe dieser Hausaufgabe die Werkzeuge installieren, und damit ein kleines MonoGame-Programm schreiben. Die Hausaufgabe muss von jedem Teilnehmer in der ersten Woche (siehe Roadmap) verbindlich gemacht werden.
Bitte beachten Sie:

  • Lesen Sie den Text jeder Aufgabe vollständig durch, bevor Sie mit der Bearbeitung beginnen.
  • Bearbeiten Sie die Aufgaben der Reihe nach, da diese aufeinander aufbauen.
  • Beginnen sie nicht erst, wenn die Gruppeneinteilung online ist! (Aufgabe 1 lässt sich bereits ohne Gruppeneinteilung erledigen und kann, falls Probleme auftreten viel Zeit in anspruch nehmen)

Aufgabe 1: Setup

Setzen Sie eine Arbeitsumgebung auf und testen Sie die Zugänge zu den verschiedenen Diensten.

Arbeitsumgebung

Im Folgenden sollen Sie ihre Arbeitsumgebung einrichten. Sie können im Sopra beliebige andere Werkzeuge verwenden, müssen aber sicherstellen, dass diese mit den hier vorgestellten Werkzeugen kompatibel sind.

  • Folgen Sie dem Artikel Arbeitsumgebung einrichten entsprechend Ihrem Betriebssystem um ihre Entwicklungsumgebung einzurichten.
  • Folgen Sie dem Artikel Dienste um ihre Zugänge zu allen Diensten einzurichten.

Aufgabe 2: Gitea

Abbildung 1: Auswahl der vorkonfigurierten Labels.

Bereiten Sie ihr Gitea (git.sopranium.de) auf den Hausaufgabensprint und die Aufgaben ihrer Gruppe vor. Gehen Sie dazu wie folgt vor.

Gitea vorbereiten

Um Gitea in Verbindung mit Scrum verwenden zu können, müssen vorher bestimmte Labels (siehe Abb. 1) für die Issues im Backlog eingerichtet werden. Prüfen Sie, ob diese bereits angelegt wurden. Fall nicht, legen Sie diese an:

  • Klicken Sie auf Issues -> Labels.
  • Wenn noch keine Labels eingerichtet wurden, werden Sie gefragt ob ein bereits vorkonfiguriertes Labelset verwendet werden soll. Wählen Sie hier das Set Sopra.
  • Prüfen sie ob Labels für Priorität und Zeitabschätzung vorhanden sind, wie auf dem Bild zu sehen (Details können variieren). Wenn keine Labels zur Zeitabschätzung und Priorisierung vorhanden sind, löschen Sie alle Labels. Wählen Sie dann wie oben beschrieben das vorkonfigurierte Labelset für das Sopra.


Sprint für Hausaufgabe anlegen

Abbildung 2: Den Hausaufgabensprint erstellen.

Prüfen sie ob in Gitea ein Sprint für die Hausaufgabe angelegt wurde. Falls nicht, legen Sie den entsprechenden Sprint (Milestone in Gitea) an:

  • Klicken Sie auf den Reiter Issues -> Meilensteine.
  • Falls kein Sprint (Milestone) für die Hausaufgabe angezeigt wird (siehe Abb. 2), legen Sie einen Milesstone mit dem Namen Sprint 00 (Hausaufgabe) an.
    • Verwenden Sie das Datum für das Ende des Sprints das Abgabedatum auf der Hauptseite.


Issues für Aufgabe 3 erstellen

Abbildung 3: Ein Issue anlegen.
  • Klicken Sie auf Issues -> Neues Issue
  • Tragen sie als Titel Scrum, Gitea und Git verstehen ein.
  • Tragen sie im Textfeld darunter die ausführliche Beschreibung Scrum, Gitea und Git verstehen um effizient arbeiten zu können ein.
  • Weisen Sie dem Issue eine hohe Priorität über das Label priority high zu, indem Sie auf das Zahnrad neben dem Schrifzug Label drücken und die entsprechenden Label auswählen.
  • Weisen Sie dem Sprint (Meilenstein) Sprint 00 (Hausaufgabe) zu.
  • Drücken sie auf Issue Erstellen.

Hinweis: Die Tickets die Sie im Folgenden erstellen sind um ihre Aufgaben zu tracken. Sollten bereits Tickets mit den selben Titeln von einem anderen Gruppenmitglied existieren, legen Sie trotzdem neue Tickets für sich selbst an (und schließen sie später auch nur diese).

Issues für Aufgabe 4 erstellen

Erstellen Sie wie in den vorhergehenden Aufgaben beschrieben, die Issues für Aufgabe 4:

  • Titel Clean Code Development Texte lesen mit der Beschreibung Clean Code Development Texte lesen um zu verstehen wie man Code schreibt, der verständlich und lesbar ist.
  • Titel Usability Artikel lesen mit Beschreibung Usability Artikel lesen um zu verstehen wie man Usabilityprobleme im Spiel von vornherein vermeiden kann.
  • Titel Dokumentation Texte lesen mit Beschreibung Dokumentation Texte lesen um den eigenen Code sinvoll dokumentieren zu können.

Issues für Aufgabe 5 erstellen

Erstellen Sie wie in den vorhergehenden Aufgaben beschrieben, das Issue für Aufgabe 5:

  • Titel MonoGame Programm schreiben mit Beschreibung Programm wie in Aufgabe 5 beschrieben schreiben um die Entwicklungswerkzeuge zu testen.

Issues zuweisen

Abbildung 4: Issues für die Hausaufgabe, vom Studenten akzeptiert und mit Zeitschätzung.

Bevor Sie mit den Aufgaben beginnen, sollten Sie sich die entsprechenden Issues zuweisen (siehe Abb. 4).

  • Wählen Sie eines ihrer Issues aus dem Sprintbacklog (Issues -> Milestones -> Sprint 00 (Hausaufgabe)) aus, indem Sie auf den Titel des Issues klicken.
  • Geben sie eine Abschätzung wie lange Sie benötigen werden um den Issue nach der Definition of Done umzusetzten. Weisen Sie das Label est: 1 um die Abschätzung zu geben, dass es insgesamt eine Stunde Arbeit benötigt wird. Wenn sie vermuten, dass Sie mehr als eine Stunde benötigen, wählen Sie einen entsprechend höheren Wert aus.
  • Weisen Sie sich dem Issue zu, indem Sie auf das Zahnrad neben dem Schriftzug Zuständig klicken, und ihren Benutzernamen auswählen.

Weisen Sie so alle Tasks die sie in den vorhergehenden Aufgaben erstellt haben zu. Weisen Sie sich auch den Issue zu Aufgabe 5 zu, falls dieser schon existierte.

Beachten Sie, dass es nicht nötig für jede Änderung einen Kommentar zu schreiben. Alle Änderungen an Labels und zugewiesenen Personen werden sofort übernommen und in der Historie des Issues eingetragen.

Überprüfen der Issues

Bevor Sie mit der Arbeit beginnen, prüfen Sie noch einmal ob alle Issues für Ihre Aufgaben im Sprintbacklog vorhanden sind.

  • Klicken sie auf den Reiter Issues -> Meilensteine -> Sprint 00 (Hausaufgabe)
  • Schränken Sie die Anzeige auf die Ihnen zugewiesenen Issues ein, indem sie unter Zuständig ihren Usernamen wählen. Prüfen Sie ob alle Issues vorhanden sind.
  • Erstellen Sie eventuell nicht vorhandene Issues wie in den vorhergehenden Aufgaben beschrieben.

Aufgabe 3: Scrum und Gitea verstehen

  • Recherchieren Sie, was Scrum ist und wie Scrum funktioniert.
  • Lesen Sie außerdem den Wikipedia-Artikel zu User Stories.
  • Machen Sie sich mit den anderen Funktionen von Gitea vertraut und lesen Sie den Artikel Scrum im Sopra
  • Sollte es Fragen zum Vorgehen (Scrum und Gitea) geben, schreiben Sie diese als Kommentar in ihr Issue in Gitea, damit eventuelle Fragen schnell geklärt werden können (Kommentarfeld unter Issues -> Meilensteine -> Sprint 00 (Hausaufgabe) -> Scrum, Gitea und Git verstehen; vergessne Sie nicht ihren Tutor und/oder die Dozenten per @ zu erwähnen, damit diese die Frage auch sehen).
  • Lesen sie die Artikel Git und Git Workflow
  • Sollte es noch keine .gitignore-Datei in Ihrem Repository geben, erstellen Sie in ihrem Repository eine entsprechende Datei (Git#Dateien Ignorieren), sodass temporäre Dateien von Visual Stuidio und Verzeichnisse für den Compileroutput von Git ignoriert werden. Comitten Sie diese Datei und pushen Sie diese ebenfalls. Eine gute Vorlage finden Sie unter Github.

Hinweis: Achten Sie darauf, dass die in ihrem Git eingestellte Emailadresse mit der in Gitea eingestellten Emailadesse übereinstimmt, da Ihnen sonst keine Commits zugeordnet werden können (siehe Formalien).

Hinweis: Prüfen sie ihre Änderungen bevor sie diese per push mit dem server synchronisieren: prüfen Sie ob sie ausversehen ungewollte Dateien in den Commit aufgenommen haben und ob die Commitnachricht auch dem Inhalt entspricht. Sollten Sie im Verlauf des Projekts Codedateien mergen, prüfen Sie immer, ob das Programm nach dem Merge noch kompiliert/funktioniert.

Aufgabe 4: Texte lesen

Lesen Sie sich die folgenden Artikel durch, und kommentieren Sie ihr entsprechendes Issue:

  • Lesen Sie Clean Code Development
    • Beschreiben Sie in einem Kommentar zum entsprechenden Issue ein Cleancodeprinzip und wieso Sie es für das Sopra für besonders wichtig erachten.
  • Lesen Sie Dokumentation
  • Lesen Sie Usability-Prinzipien beim Spieldesign
    • Beschreiben Sie in einem Kommentar zum entsprechenden Issue ein Usabilityprinzip und wieso Sie es für das Sopra für besonders wichtig erachten.

Issues bearbeiten

Bearbeiten sie die Aufgaben und tragen Sie entsprechende Zeiten in die Issues in Gitea ein (im Menü rechts, Zeiterfassung starten). Besonders bei Programmieraufgaben ist dies sinnvoll, da so eine Historie der Bearbeitung und der verbrauchten Zeit erstellt wird. Dies hilft nicht nur Ihnen bei der Planung weiterer Aufgaben und Abschätzung der dafür benötigten Zeit, sondern dient auch als Nachweis für Ihre kontinuierliche Mitarbeit (siehe Formalien).

Issues schließen

Wenn Sie mit einer Aufgabe fertig sind, sollten Sie Ihren entsprechenden Issues schließen. Gehen Sie ähnlich wie beim Akzeptieren einer Story vor und drücken Sie auf den Button Schließen. Beachten Sie bei Aufgaben die zu denen Sie etwas comitten, dass Sie das Issue auch über die Commitnachricht schließen können.

Vergessen Sie nicht die Zeit, die Sie für den Task benötigt haben, einzutragen (falls Sie das noch nicht gemacht haben).

Aufgabe 5: Programm schreiben

Abbildung 5: Das fertige Programm könnte so aussehen.

Erstellen Sie ein MonoGame Programm, welches die folgenden Eigenschaften erfüllt:

Funktionale Anforderungen

Abbildung 6: Das Uni-Logo
Abbildung 7: Hintergrundgrafik
  • Das Programm zeichnet eine Hintergrundgrafik in einem MonoGame-Fenster.
  • Vor dieser Hintergrundgrafik rotiert ein Uni-Logo um den Bildschirmmittelpunkt.
    • Das Logo muss transparent sein, d.h. es dürfen keine weißen Ränder der verwendeten Grafik sichtbar sein. Außerdem muss durch alle nicht-schwarzen Stellen des Logos hindurchgesehen werden können.
    • Das Logo muss korrekt skaliert sein, damit es vollständig in den sichtbaren Bereich hinein passt.
    • Das Logo darf während der Bewegung nicht über die Ränder des sichtbaren Bereiches hinausragen. (Größenveränderung des Fensters ist zu vernachlässigen. Es gilt die Größe des Fensters bei Programmaufruf.)
  • Innerhalb des MonoGame-Fensters wird ein Maus-Cursor angezeigt.
  • Wenn der Benutzer mit der Maus innerhalb des Fensters klickt, soll ein Sound abhängig von der Position des Cursors abgespielt werden:
    • Befindet sich der Cursor über dem Logo, soll ein Ton A erklingen.
    • Befindet sich der Cursor nicht über dem Logo, soll ein Ton B erklingen.
    • Ton A und Ton B müssen verschieden sein.

Ressourcen

Damit das Erstellen von Grafiken ignoriert werden kann, gibt es hier die beiden Beispieldateien aus der Einführungsveranstaltung:

Als Audiodateien können beliebige, kurze, Dateien verwendet werden. Die beiden aus der Einführungsveranstaltung bekannten Waves gibt es hier:

Abgabe

Bitte verwenden Sie zur finalen Abgabe der Hausaufgabe das Git-Repository ihrer Gruppe. Der Programmier-Teil der Hausaufgabe muss der komplette Projektordner (ab dem Verzeichnis, das die Projektdatei *.sln enthält) abgegeben werden. Sie sollten dazu einfach das Projekt in das Gruppenrepository unter /abgabe/hausaufgabe/<username>/ comitten.

Bitte vergewissern Sie sich vorher noch einmal, ob eine entsprechende .gitignore Datei angelegt ist, damit auschließlich relevante Projektdateien (z.B.: die Solution und Codedateien) aber keine temporären Dateien im Repository eingecheckt werden.

Aufgabe 6: Abgabe finalisieren

Wenn Sie in Ihrer Gruppe die Aufgaben als letztes abschließen (d.h. Sie den letzten Issue im Sprintbacklog schließen) fällt Ihnen die Aufgabe zu, den Sprit für Ihre Gruppe abzuschießen (vgl. Sprint Abschließen):


Der Fortschritt der während des Sprints erzielt wurde (Inkrement) muss auf den release branch übertragen werden, damit trotz weiterer Arbeit immer eine auslieferbare Version verfügbar ist. In den auf die Hausaufgabe folgenden Sprints gehört dies zu den aufgaben des Product owners.

  • Schließen Sie das Sprintbacklog (Issues -> Meilensteine -> Sprint 00 (Hausaufgabe) -> Schießen).
  • Erstellen sie einen Pullrequest (siehe Abb. 8), sodass der aktuelle Stand von main nach release übertragen werden kann. Gehen Sie wie folgt vor:
    • Klicken Sie in Gitea auf den Reiter Code -> Branch: main.
    • Drücken Sie auf den Button Neuer Pull-Request.
    • Prüfen Sie im folgenden Dialog, dass als Ziel release und als pullen von main gewählt sind. Geben Sie dem Pullrequest den Titel Hausaufgabe. Ihnen werden daraufhin alle Änderungen die mit dem Pull-Request vom main auf den release -Branch übertragen werden sollen angezeigt.
    • Drücken Sie auf Pullrequest Erstellen.
    • Gitea wird feststellen, dass es zwischen main und release keine Konflikte gibt, und der Merge automatisch durchgeführt werden kann. Ein weiteres Drücken auf Pull-Request Zusammenführen öffnet ein Kommentarfenster, noch einmal drücken schließt den Pull-Request ab.

Die Änderungen die Sie und ihre Gruppe während des Hausaufgabensprints gemacht haben, befinden sich nun auch auf dem release-Branch.

Hinweise

  • Falls Sie Probleme beim Starten der Anwendung haben, schauen Sie zuerst in die FAQ und in das Discourse.
  • Möglicherweise wird bei Ihnen kein Sound abgespielt, obwohl dies Ihrer Einschätzung nach eigentlich der Fall sein sollte. Prüfen Sie in diesem Fall, ob die Installation der DirectX Runtime das Problem behebt.