Hausaufgabe: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Zur Navigation springen Zur Suche springen
(48 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 47: Zeile 47:
<br clear="all">
<br clear="all">


=== User Stories für Aufgabe 4 erstellen ===
=== User Stories für Aufgabe 3 erstellen ===
 
{{RefImg|gitea_hausaufgabe_tasks.png|500px|13|User Stories für die Hausaufgabe wurden erstellt.}}
Prüfen Sie ob für die Hausaufgabe bereits alle Userstories existieren. Wenn nicht, legen Sie diese an.  
Prüfen Sie ob für die Hausaufgabe bereits alle Userstories existieren. Wenn nicht, legen Sie diese an.  
* Klicken Sie auf den Reiter <code>Issues</code>.
* Klicken Sie auf den Reiter <code>Issues</code>.
* Prüfen Sie ob bereits ein Item <code>Student <NAME> soll Git und Gitea bedienen können um produktiv arbeiten zu können.</code> existiert und mit <code>user story</code> getaggt ist.  
* Prüfen Sie ob bereits eine User Story <code>Student <NAME> soll Scrum, Gitea und Git verstehen um effizient arbeiten zu können.</code> existiert und mit <code>user story</code> getaggt ist.  
** Wenn nicht legen Sie eine entsprechende Userstory an indem Sie den weiteren Punkten folgen:  
** Wenn nicht legen Sie eine entsprechende Userstory an indem Sie den weiteren Punkten folgen:  
*# Klicken Sie <code>Neuer Issue</code>.
*# Klicken Sie <code>Neuer Issue</code>.
*# Tragen sie als Titel <code>Student <NAME> soll Git und Gitea bedienen können, damit er/sie in Zukunft produktiver arbeitet.</code> ein.
*# Tragen sie als Titel <code>Student <NAME> soll Scrum, Gitea und Git verstehen um effizient arbeiten zu können.</code> ein.
*# 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 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.
*# Weisen Sie dem Sprint (Meilenstein) ''Hausaufgabe'' zu.
*# Drücken sie auf <code>Issue Erstellen</code>.
*# Drücken sie auf <code>Issue Erstellen</code>.
* Fügen Sie außerdem noch die beiden User Stories:
 
** <code>Student <NAME> soll die Texte verstehen um eine gutes Spiel entwickeln zu können.</code> und
=== User Story für Aufgabe 4 erstellen ===
** <code>Student <NAME> soll ein MonoGame Programm schreiben um zu prüfen ob alles funktioniert.</code> auf dieselbe Art hinzu.
 
<br clear="all">
Erstellen Sie wie in den vorhergehenden Aufgaben beschrieben, eine User Stories für Aufgabe 4
* <code>Student <NAME> soll die Clean Code Development Texte lesen, um besseren Code schreiben zu können.</code>
* <code>Student <NAME> soll den Usability Artikel lesen, um von vornherein Usabilityprobleme zu vermeiden.</code>
* <code>Student <NAME> soll die Dokumentation Texte lesen, um seinen Code sinvoll dokumentieren zu können.</code>


=== User Story für Aufgabe 5 erstellen ===
=== User Story 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, eine User Story für Aufgabe 5
* <code>Jeder Student soll das in Aufgabe 5 beschriebene Programm schreiben.</code>
* <code>Jeder Student soll das in Aufgabe 5 beschriebene Programm schreiben, um seine Entwicklungswerkzeuge zu testen.</code>
<br clear="all">


=== Tasks akzeptieren ===
=== Tasks akzeptieren ===
{{RefImg|gitea_hausaufgabe_tasks_assigned.png|500px|13|User Stories 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.
* Wählen Sie eine ihrer Stories aus dem Sprintbacklog (<code>Issues -> Milestones -> Hausaufgabe</code>) aus, indem Sie auf den Titel des Tasks klicken.
* Geben sie eine Abschätzung wie lange Sie brauchen werden um die Story nach der Definition of Done umzusetzten. Weisen Sie das Label <code>estimate: 1</code> zu um eine Abschätzung von einer Stunde zu geben. 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.
Aktzeptieren Sie so alle Tasks die sie in den vorhergehenden Aufgaben erstellt haben.


Bevor Sie mit den Aufgaben beginnen, sollten Sie die entsprechenden Tasks akzeptieren.
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.
* Wählen Sie einen ihrer Tasks aus dem Sprintbacklog (<code>Issues -> Milestones -> Hausaufgabe</code>) aus, indem Sie auf den Titel des Tasks klicken.
* Weisen Sie das Label <code>estimate: 1</code> zu, um eine Zeitabschätzung zu geben, wie lange Sie für diese Aufgabe brauchen werden. Wenn sie vermuten, Sie benötigen mehr als eine Stunde, 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.
Die Änderungen werden sofort gespeichert (es ist nicht nötig einen Kommentar zu schreiben). Aktzeptieren Sie so alle Tasks die sie in den vorhergehenden Aufgaben erstellt haben.  
<br clear="all">


=== Überprüfen der Tasks ===
=== Überprüfen der Tasks ===
{{RefImg|gitea_hausaufgabe_tasks.png|500px|13|Tasks und Userstories für die Hausaufgabe.}}
 
Bevor Sie mit der Arbeit zu beginnen, prüfen Sie noch einmal ob alle Tasks und Userstories im Sprintbacklog vorhanden sind.
Bevor Sie mit der Arbeit zu beginnen, prüfen Sie noch einmal ob alle Userstories im Sprintbacklog vorhanden sind.
* Klicken sie auf den Reiter <code>Issues -> Meilensteine -> Hausaufgabe</code>
* Klicken sie auf den Reiter <code>Issues -> Meilensteine -> Hausaufgabe</code>
* Schränken Sie die Anzeige auf Userstories ein, indem Sie den Button <code>Label ⯆</code> drücken und das Label <code>user story</code> auswählen. Prüfen Sie ob alle Userstories vorhanden sind.
* 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 ihnen zugewiesene Tasks ein, indem sie unter <code>Label ⯆</code> <code>alle Labels</code> wählen, und unter <code>Zuständig ⯆</code> ihren Usernamen. Prüfen Sie ob alle Tasks vorhanden sind.
* Erstellen Sie eventuell nicht vorhandene Userstories und Tasks wie in den vorhergehenden Aufgaben beschrieben.
* Erstellen Sie eventuell nicht vorhandene Userstories und Tasks wie in den vorhergehenden Aufgaben beschrieben.


Zeile 90: Zeile 92:
* 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 [[Scrum und Gitea]]
* Beschreiben Sie in einem Kommentar  zu Task ''Student <username> soll 'Scrum' verstehen'' (Kommentarfeld unter <code>Issues -> Meilensteine -> Hausaufgabe -> Student <username> soll 'Scrum' verstehen</code>) kurz und prägnant wie Scrum funktioniert, und wie Scrum im SoPra auf Gitea realisiert wird.
* 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 um effizient arbeiten zu können.</code>).
* Schließen Sie danach den Task.
* Lesen sie die Artikel [[GIT|Git]] und [[GitWorkflow| Git Workflow]]
** [[Git#Repository clonen|Klonen]] sie das Gruppenrepository.
** 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#Ä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]].
** [[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]].


== 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 Ticket:
* Lesen Sie [[CleanCode|Clean Code Development]]  
* Lesen Sie [[CleanCode|Clean Code Development]]  
** Beschreiben Sie in einem Kommentar zum entsprechenden Task ein Cleancodeprinzip das noch keiner aus ihrer Gruppe beschrieben hat.
** Beschreiben Sie in einem Kommentar zum entsprechenden Task 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 das noch keiner aus ihrer Gruppe beschrieben hat.
** Beschreiben Sie in einem Kommentar zum entsprechenden Task ein Usabilityprinzip und wieso Sie es für das Sopra für besonders wichtig erachten.
* Lesen sie die Artikel [[GIT|Git]] und [[GitWorkflow| Git Workflow]]
** [[Git#Repository clonen|Klonen]] sie das Gruppenrepository.
** Schreiben Sie Ihren Namen (und falls noch nicht eingetragen den Termin für das Gruppentreffen) in die <code>README.md</code>. Verwenden Sie hierfür nicht den Editor in Gitea, sondern editieren sie die Datei in ihrem lokalen Git-Repository.
** [[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]].
** [[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]].


=== Tasks bearbeiten ===
=== User Stories bearbeiten ===
Bearbeiten sie die Tasks und tragen Sie entsprechende Zeiten in den Tickets 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]]).
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.
'''Achtung''': Geben Sie Acht beim Zeit eintragen, da Sie die Summe nachträglich nur nach oben verändern können.


=== Tasks schließen ===
=== User Stories schließen ===
Wenn Sie mit einer Aufgabe fertig sind, sollten Sie Ihren entsprechenden Task schließen. Gehen Sie ähnlich wie beim Akzeptieren eines Tasks vor und drücken Sie auf den Button ''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''.


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).
Zeile 118: Zeile 119:
== 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 14: Das fertige Programm könnte so aussehen.]]
Bevor Sie mit dieser Aufgabe beginnen, sollten Sie Ihren entsprechenden Task akzeptieren.  
Bevor Sie mit dieser Aufgabe beginnen, sollten Sie Ihren entsprechenden User Story akzeptieren.  


Erstellen Sie ein [[MonoGame]] Programm, welches die folgenden Eigenschaften erfüllt:
Erstellen Sie ein [[MonoGame]] Programm, welches die folgenden Eigenschaften erfüllt:
Zeile 161: Zeile 162:
Bitte verwenden Sie zur finalen [[Abgabe#Hausaufgabe|Abgabe]] der Hausaufgabe das [[GIT|Git]]-Repository ihrer Gruppe: {{:Abgabe/Hausaufgabe}}
Bitte verwenden Sie zur finalen [[Abgabe#Hausaufgabe|Abgabe]] der Hausaufgabe das [[GIT|Git]]-Repository ihrer Gruppe: {{:Abgabe/Hausaufgabe}}


=== Abgabe Finalisieren ===
== Abgabe Finalisieren ==
{{RefImg|gitea_mergehomework.png|300px|12|Einen Pullrequest erstellen.}}
{{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 Task (nicht Userstory) im Sprint schließen, müssen Sie noch folgende Schritte ausführen.
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.  
* Schließen Sie alle Userstories für die entsprechende Tasks abgeschlossen wurden (da alle Tasks geschlossen sind, sollten das alle Userstories sein).
 
* Schließen Sie das Sprintbacklog (<code>Issues -> Meilensteine -> Sprint<nummer> -> Schießen</code>).
 
* Erstellen sie einen [[Gitea#Pullrequest|Pullrequest]], sodass der aktuelle Stand von <code>dev</code> nach <code>master</code> gemerged wird. Gehen Sie wie folgt vor:
Der Fortschritt der während des Sprints erziehlt wurde (Inkement) muss auf den <code>release</code> branch übtertragen werden, damit trotz weiterer Arbeit immer eine auslieferbare Version verfügbar ist.
** Klicken Sie in Gitea auf den Reiter <code>Code -> Branch: dev</code>.
* Schließen Sie das Sprintbacklog (<code>Issues -> Meilensteine -> 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:
** Klicken Sie in Gitea auf den Reiter <code>Code -> Branch: master</code>.
** Drücken Sie auf den grünen Button neben dem Branch-dropdown.
** Drücken Sie auf den grünen Button neben dem Branch-dropdown.
** Prüfen Sie im folgenden Dialog, dass als Ziel <code>master</code> und als pullen von <code>dev</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>master</code> gewählt sind. Geben Sie dem Pullrequest den Titel ''Hausaufgabe''.  
** Drücken Sie auf <code>Pullrequest Erstellen</code>.
** Drücken Sie auf <code>Pullrequest Erstellen</code>.
** Gitea wird feststellen, dass <code>dev</code> automatisch in <code>master</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 <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.


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


=== Hinweise ===
=== Hinweise ===

Version vom 12. April 2019, 13:26 Uhr

Einleitung

Zu Beginn des Softwarepraktikums soll sich jeder Teilnehmer mit C#, MonoGame und den dazugehörigen Werkzeugen vertraut machen. Ein guter Startpunkt dafür ist die 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.

  • Lesen Sie den Text jeder Aufgabe vollständig durch, bevor Sie mit der Bearbeitung beginnen.
  • Bearbeiten Sie die Aufgaben der Reihe nach.
  • Beginnen sie nicht erst, wenn die Gruppeneinteilung online ist! (Aufgabe 1 lässt sich bereits ohne Gruppeneinteilung erledigen)

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.

Arbeitsumgebung

Sie finden die relevanten Download-Links unter Downloads.

Dienste

Um auf die Dienste zugreifen zu können, brauchen Sie einen gültigen Poolaccount.

Die folgenden Dienste sollten Sie eingerichtet und getestet haben:

Aufgabe 2: Gitea

Abbildung 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 Issues -> Labels.
  • 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 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: Das Formular für die Erstellung eines neuen Milestones.

Prüfen sie ob in Gitea ein Sprint für die Hausaufgabe angelegt wurde.

  • Klicken Sie auf den Reiter Issues -> Milestones.
  • Falls kein Sprint (Milestone) für die Hausaufgabe angezeigt wird, legen Sie einen Milesstone mit dem Namen Hausaufgabe an.
    • Verwenden Sie das Datum für das Ende des Sprints die Abgabe auf der Roadmap.


User Stories für Aufgabe 3 erstellen

Abbildung 13: User Stories für die Hausaufgabe wurden erstellt.

Prüfen Sie ob für die Hausaufgabe bereits alle Userstories existieren. Wenn nicht, legen Sie diese an.

  • Klicken Sie auf den Reiter Issues.
  • Prüfen Sie ob bereits eine User Story Student <NAME> soll Scrum, Gitea und Git verstehen um effizient arbeiten zu können. existiert und mit user story getaggt ist.
    • Wenn nicht legen Sie eine entsprechende Userstory an indem Sie den weiteren Punkten folgen:
    1. Klicken Sie Neuer Issue.
    2. Tragen sie als Titel Student <NAME> soll Scrum, Gitea und Git verstehen um effizient arbeiten zu können. ein.
    3. Weisen Sie die Label user story und hohe Priorität über das Label high zu , indem Sie auf das Zahnrad neben dem Schrifzug Label drücken und die entsprechenden Label auswählen.
    4. Weisen Sie dem Sprint (Meilenstein) Hausaufgabe zu.
    5. Drücken sie auf Issue Erstellen.

User Story für Aufgabe 4 erstellen

Erstellen Sie wie in den vorhergehenden Aufgaben beschrieben, eine User Stories für Aufgabe 4

  • Student <NAME> soll die Clean Code Development Texte lesen, um besseren Code schreiben zu können.
  • Student <NAME> soll den Usability Artikel lesen, um von vornherein Usabilityprobleme zu vermeiden.
  • Student <NAME> soll die Dokumentation Texte lesen, um seinen Code sinvoll dokumentieren zu können.

User Story für Aufgabe 5 erstellen

Erstellen Sie wie in den vorhergehenden Aufgaben beschrieben, eine User Story für Aufgabe 5

  • Jeder Student soll das in Aufgabe 5 beschriebene Programm schreiben, um seine Entwicklungswerkzeuge zu testen.

Tasks akzeptieren

Abbildung 13: User Stories 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.

  • Wählen Sie eine ihrer Stories aus dem Sprintbacklog (Issues -> Milestones -> Hausaufgabe) aus, indem Sie auf den Titel des Tasks klicken.
  • Geben sie eine Abschätzung wie lange Sie brauchen werden um die Story nach der Definition of Done umzusetzten. Weisen Sie das Label estimate: 1 zu um eine Abschätzung von einer Stunde zu geben. 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.

Aktzeptieren Sie so alle Tasks die sie in den vorhergehenden Aufgaben erstellt haben.

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.

Überprüfen der Tasks

Bevor Sie mit der Arbeit zu beginnen, prüfen Sie noch einmal ob alle Userstories im Sprintbacklog vorhanden sind.

  • Klicken sie auf den Reiter Issues -> Meilensteine -> Hausaufgabe
  • Schränken Sie die Anzeige auf ihnen zugewiesene Stories ein, indem sie unter Label ⯆ User Story wählen, und unter Zuständig ⯆ ihren Usernamen. Prüfen Sie ob alle Stories vorhanden sind.
  • Erstellen Sie eventuell nicht vorhandene Userstories und Tasks 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 und Gitea
  • 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 Issues -> Meilensteine -> Hausaufgabe -> Student <NAME> soll Scrum, Gitea und Git verstehen um effizient arbeiten zu können.).
  • Lesen sie die Artikel Git und Git Workflow
    • Klonen sie das Gruppenrepository.
    • Schreiben Sie Ihren Namen in die dafür vorgesehene Zeile in README.md. 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.
    • Committen sie ihre Änderungen. Benutzen sie die Commitnachricht Added Name to Readme.md (closes <ticketnummer>) um den entsprechenden Task in Gitea per Commitnachricht zu schließen.
    • Synchronisieren sie ihre Änderungen mit dem Server. Beachten halten Sie sich dabei an den vorgeschlagenen Git-Workflow. Es it gut möglich, dass dabei Konflikte entstehen, beachten sie hierzu die Anleitung zum Konflikte lösen in Git.

Aufgabe 4: Texte lesen

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

  • Lesen Sie 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.
  • Lesen Sie Dokumentation
  • Lesen Sie 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.

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.

User Stories 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.

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 14: 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

Abbildung 15: Das Uni-Logo
Abbildung 16: 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.
    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:
    • 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.

Randbedingungen

Die 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 (Softwarepraktikum-final.DotSettings).

ReSharper-Hinweise

Beim Erstellen eines MonoGame-Projekts wird eine Variable, mGraphics 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.

Es kann sein, dass die Hausaufgabe programmiert werden kann, ohne dass man diese Variable jemals irgendwo verwenden muss. Dies führt dazu, dass ReSharper eine Fehlermeldung bzgl. einer unbenutzten Variable im Projekt ausgibt.

Um ReSharper-Konformität der Hausaufgabe unter diesen Bedingungen herzustellen, sind mehrere Möglichkeiten denkbar:

  1. Verwenden der mGraphics Variable bei der Erstellung eines Sprite-Batches. Es ist möglich, den SpriteBatch, auf dem das Uni-Logo gezeichnet wird, mit
    someSpriteBatch = new SpriteBatch(mGraphics.GraphicsDevice);
    
    zu initialisieren.
  2. Hinzufügen einer ReSharper-Ausnahme für die Variable mGraphics. Eine Ausnahme für diese Variable ist die einzige Ausnahme, die wir akzeptieren.

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: Abgabe/Hausaufgabe

Abgabe Finalisieren

Abbildung 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 (Inkement) muss auf den release branch übtertragen werden, damit trotz weiterer Arbeit immer eine auslieferbare Version verfügbar ist.

  • Schließen Sie das Sprintbacklog (Issues -> Meilensteine -> Hausaufgabe -> Schießen).
  • Erstellen sie einen Pullrequest, sodass der aktuelle Stand von dev nach master kopiert werden kann wird. Gehen Sie wie folgt vor:
    • Klicken Sie in Gitea auf den Reiter Code -> Branch: master.
    • Drücken Sie auf den grünen Button neben dem Branch-dropdown.
    • Prüfen Sie im folgenden Dialog, dass als Ziel release und als pullen von master gewählt sind. Geben Sie dem Pullrequest den Titel Hausaufgabe.
    • Drücken Sie auf Pullrequest Erstellen.
    • Gitea wird feststellen, dass master automatisch in release gemerged 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, wurden nun in den release-branch übertrangen.

Hinweise

  • Falls Sie Probleme beim Starten der Anwendung haben, schauen Sie zuerst in die FAQ. Ein oft auftretendes Problem ist z.B. die Fehlermeldung "No suitable graphics card found".
  • 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.