Hausaufgabe: Unterschied zwischen den Versionen

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


== Einleitung ==
== Einleitung ==
Zu Beginn des Softwarepraktikums soll sich jeder Teilnehmer mit [[CSharp|C#]], [[XNA]] 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 schrieben.
Die Hausaufgabe muss '''von jedem Teilnehmer''' in der ersten Woche (siehe [[Roadmap]]) verbindliche 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 erst, wenn die [[Gruppeneinteilung]] online ist'''.
* '''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.  
Setzen Sie eine Arbeitsumgebung auf und testen Sie die Zugänge zu den verschiedenen Diensten.  


Mindestens die folgenden Werkzeuge (die Sie auf unserer [[Downloads]]-Seite finden) sollten Sie installiert und konfiguriert haben:
=== Arbeitsumgebung ===
* [[.NET]] 4.5
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.
* [[Visual Studio]] 2010
* [[Resharper]] 7
* [[XNA]] Framework 4.0
* Ein [[Subversion|SVN]]-Client ihrer Wahl
 
Um auf die Dienste zugreifen zu können, brauchen Sie einen gültigen Poolaccount. Außerdem müssen Sie für die Dienste ein sog. [https://support.informatik.uni-freiburg.de/cgi/support/fawmgr.cgi?wpassword:de WWW-Passwort einrichten].
 
Die folgenden Dienste sollten Sie getestet haben:
* Zugang zu ihrem SVN-Repository
* Zugang zum Trac ihrer Gruppe
* Die Gruppenmailingliste
 
Erstellen Sie außerdem einen Account für das [https://sopra.informatik.uni-freiburg.de/sopraboard Sopra-Forum].
 
Die Adressen dieser Dienste finden sich auf der [[Gruppeneinteilung]]sseite.
 
== Aufgabe 2: Trac ==
Erstellen Sie für die Bearbeitung der [[# Aufgabe 3: Scrum und Trac verstehen|Aufgabe 3]] Tasks im Trac Ihrer Gruppe. Gehen Sie dazu wie folgt vor.
 
=== Neues Feld "Spent Time" anlegen ===
{{RefImg|trac_new_field.png|600px|1|Neues Feld anlegen.}}
Legen Sie ein neues Feld für die verbrauchte Arbeitszeit, "Spent Time", an, sollte es noch nicht vorhanden sein:
* Klicken Sie in der oberen Navigationsleiste auf "Admin".
* Klicken Sie in der linken Leiste auf "Fields".
* Fügen Sie ein neues Feld mit den folgenden Eigenschaften hinzu:
** Name: spent_time
** Type: Text
** Label: Spent Time
** Default value: 0
<br clear="all">
 
=== Editieren der vorhandenen Typen ===
{{RefImg|trac_edit_types.png|600px|2|Vorhandene Typen bearbeiten.}}
Fügen Sie das neu erstellte Feld, "Spent Time", dem Tickettyp "task", "bug", "story" und "requirement" hinzu, sollte dies noch nicht getan sein:
* Klicken Sie in der oberen Navigationsleiste auf "Admin".
* Klicken Sie in der linken Leiste auf "Types".
* Klicken Sie auf den Type "task".
* Aktivieren Sie den Haken bei "Spent Time" und speichern Sie den Typ.
* Verfahren Sie analog bei dem Typ "bug".
* Tragen Sie außerdem unter "Calculate properties" die folgende Zeile ein:
** total_spent_time = sum:get_outgoing.spent_time
* Gehen Sie für die Typen "requirement" und "story" genauso vor, d.h. aktivieren Sie den Haken bei "Spent Time" und tragen Sie unter "Calculate Properties" dieselben Werte wie bei Typ "bug" ein.
<br clear="all">


=== Product und Sprint Backlog für "Hausaufgabe" anlegen ===
* Folgen Sie dem Artikel [[Arbeitsumgebung einrichten]] entsprechend Ihrem Betriebssystem um ihre Entwicklungsumgebung einzurichten.
* Folgen Sie dem Artikel [[Virtuelles Treffen#Funktionstest von Sound und Video|Virtuelles Treffen]] um auszuprobieren, ob sie ohne technische Probleme an einem Gruppentreffen teilnehmen können.


{{RefImg|trac_product_backlog.png|600px|3|Administrationsmenü für Product Backlog.}}
* Folgen Sie dem Artikel [[Dienste#Erstbenutzung|Dienste]] um ihre Zugänge zu allen Diensten einzurichten.
Prüfen Sie, ob in Ihrem Trac bereits ein Backlog "''Product Backlog''" und ein Backlog "''Sprint Backlog''" angelegt wurde. Falls nein, legen Sie diese folgendermaßen an:
* Klicken Sie in der oberen Navigationsleiste auf "Admin".
* Klicken Sie in der linken Leiste auf "Backlogs".
* Geben Sie auf der rechten Seite den Namen "Product Backlog" ein und klicken Sie auf "Add and edit".
* Wählen Sie auf der nächsten Seite den Scope "''global''" und "''Include Planned Tickets''", sowie die Ticket Types "Requirement" und "User Story" aus und speichern Sie die aktuellen Einstellungen.
* Rufen Sie das Product Backlog erneut auf, indem Sie auf den Namen klicken. Stellen Sie unter "Column Preferences" folgende Eigenschaften ein (siehe auch Abbildung 1):
** "Business Value", Order=0
** "Importance", Order=2
** "Story Points", Order=3
** Geben Sie bei der Eigenschaft "Story Points" zusätzlich die Alternative "Total Story Points" an.
* Legen Sie ein neues Sprint Backlog, "Sprint Backlog", an, genauso, wie Sie das Product Backlog angelegt haben. Wählen Sie als Scope "''sprint''" aus und setzen Sie den Haken bei "''Include Planned Tickets''". Wählen Sie alle Ticket Types aus. Speichern Sie das Backlog.
* Rufen Sie das eben angelegte Sprint Backlog erneut auf und stellen Sie unter "Column Preferences" folgende Eigenschaften ein:
** "Owner", Order=1
** "Remaining Time", Order=0
** "Resources", Order=2
** Geben Sie außerdem bei "Remaining Time" als Alternative "Total Remaining Time" an.
<br clear="all">


=== Hinzufügen der verbrauchten Zeit zum Backlog ===
== Aufgabe 2: Gitea ==
{{RefImg|trac_add_spent_time.png|600px|4|Hinzufügen der verbrauchten Zeit zum Product Backlog.}}
{{RefImg|gitea_setuplabels_done.png|500px|1|Auswahl der vorkonfigurierten Labels.}}
Fügen Sie der Ansicht des Product und Sprint Backlogs die verbrauchte Zeit hinzu, falls diese noch nicht angezeigt wird:
Bereiten Sie ihr Gitea auf den Hausaufgabensprint und die Aufgaben ihrer Gruppe vor. Gehen Sie dazu wie folgt vor.
* Klicken Sie in der oberen Navigationsleiste auf "Admin".
* Klicken Sie in der linken Leiste auf "Backlogs".
* Wählen Sie das Product Backlog aus, indem Sie darauf klicken.
* Setzen Sie den Haken bei "Spent Time", wählen Sie als Alternative "Total Spent Time" und geben Sie eine beliebige Order, im Falle des Product Backlogs z.B. 4, an.
* Speichern Sie die vorgenommenen Änderungen ab.
* Verfahren Sie genauso für das Sprint Backlog.
<br clear="all">


=== Milestone für Hausaufgabe anlegen ===
=== Gitea vorbereiten ===
{{RefImg|trac_new_milestone.png|600px|5|Das Formular für die Erstellung eines neuen Milestones.}}
Um Gitea in Verbindung mit Scrum verwenden zu können, müssen vorher bestimmte Labels (siehe Abb. 1) für die Items im Backlog eingerichtet werden.
Prüfen Sie, ob in Ihrem Trac bereits ein Milestone für die Hausaufgabe angelegt ist:
* Klicken Sie auf <code>Issues -> Labels</code>.
* Klicken Sie in der oberen Navigationsleiste auf "Admin".
* 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>.
* Klicken Sie in der linken Leiste auf "Milestones".
* 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.
* Falls noch kein Milestone für die Hausaufgabe angelegt ist, legen Sie diesen an. Verwenden Sie das Datum der Abgabe (siehe [[Roadmap]], Datumsformat beachten!).
<br clear="all">
<br clear="all">


=== Sprint für Hausaufgabe anlegen ===
=== Sprint für Hausaufgabe anlegen ===
{{RefImg|trac_new_sprint.png|600px|6|Das Formular zum Anlegen eines neuen Sprints.}}
{{RefImg|gitea_firstsprintmilestone.png|500px|2|Den Hausaufgabensprint erstellen.}}
Prüfen Sie, ob in Ihrem Trac bereits ein Sprint für die Hausaufgabe angelegt wurde (Admin -> Sprints). Falls nein, legen Sie diesen folgendermaßen an:
Prüfen sie ob in Gitea ein Sprint für die Hausaufgabe angelegt wurde.
* Klicken Sie in der oberen Navigationsleiste auf "Admin".
* Klicken Sie auf den Reiter <code>Issues -> Milestones</code>.
* Klicken Sie in der linken Leiste auf "Sprints".
* 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.
* Fügen Sie einen neuen Sprint mit Namen "Sprint Hausaufgabe", Milestone "Hausaufgabe", Start Date <heute> und End Date <Abgabezeitpunkt> hinzu. Beachten Sie dabei das Datumsformat.
**Verwenden Sie das Datum für das Ende des Sprints das Abgabedatum auf der [[Hauptseite]].
* Beachten Sie, dass Trac anzeigt, dass der Sprint am folgenden Montag endet, falls Sie einen Tag an einem Wochenende als Endzeitpunkt angegeben haben. Das liegt daran, dass in Arbeitstagen (Montag-Freitag) gerechnet wird. Der verbindliche Abgabezeitpunkt der Hausaufgabe ist in der [[Roadmap]] angegeben.
<br clear="all">
<br clear="all">


=== Requirement für die Hausaufgabe anlegen ===
=== User Stories für Aufgabe 3 erstellen ===
{{RefImg|trac_new_requirement.png|600px|7|Neues Requirement anlegen.}}
{{RefImg|Firstusrstry.png|500px|3|Eine User Story anlegen.}}
Prüfen Sie, ob in Ihrem Trac bereits das Requirement "Hausaufgaben machen" im Product Backlog angelegt ist. Falls nein, legen Sie dieses an.
Prüfen Sie ob für die Hausaufgabe bereits alle Items existieren. Wenn nicht, legen Sie diese an.  
* Klicken Sie am linken Rand auf "Product Backlog" und überprüfen Sie eventuell vorhandene Requirements.
* Klicken Sie auf den Reiter <code>Issues</code>.
* Klicken Sie auf der linken Seite unter Actions auf "New Requirement".
* Prüfen Sie ob bereits ein Item mit dem Titel <code>Student <NAME> soll Scrum, Gitea und Git verstehen</code> existiert (siehe Abb. 3).
* Nennen Sie das neue Requirement "Hausaufgaben machen", weisen Sie dem Requirement den Milestone "Hausaufgabe" zu und speichern Sie es ab.
** Wenn nicht legen Sie eine entsprechende Userstory an indem Sie den weiteren Punkten folgen:
<br clear="all">
*# Klicken Sie <code>Neuer Issue</code>.
*# Tragen sie als Titel <code>Student <NAME> soll Scrum, Gitea und Git verstehen</code> ein.
*# Tragen sie im Textfeld darunter die ausführliche Beschreibung <code>Student <NAME> soll Scrum, Gitea und Git verstehen um effizient arbeiten zu können.</code> ein.
*# Weisen Sie dem Item eine 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) ''Sprint 00 (Hausaufgabe)'' zu.
*# Drücken sie auf <code>Issue Erstellen</code>.


=== User Story anlegen ===
Bitte beachten Sie in dieser, und in folgenden Aufgaben, den Platzhalter <code><NAME></code> geeignet (z.B.: mit ihrem Usernamen, oder Vornamen) zu ersetzen.
{{RefImg|trac_reference_user_story.png|600px|8|Einem Requirement eine Referenz zu einer User Story hinzufügen.}}
{{RefImg|trac_new_user_story.png|600px|6|Neue User Story anlegen.}}
Legen Sie eine neue User Story für das Requirement "Hausaufgabe machen" an.
* Klicken Sie am linken Rand auf das Product Backlog.
* Wählen Sie das Requirement "Hausaufgabe machen" aus, indem Sie auf seine ID klicken.
* Klicken Sie auf der nächsten Seite unter dem Reiter "Edit" auf "Create a new referenced 'User Story'".
* Nennen Sie die User Story "Student <username> soll das Trac bedienen können, damit er in Zukunft produktiver arbeitet".
* Geben Sie den Sprint "Sprint Hausaufgabe" an und legen Sie die Importance auf "Mandatory" fest. Geben Sie außerdem Ihren Benutzernamen im Feld "Owner" an und erstellen Sie dann die neue User Story.
* Fügen Sie außerdem noch die beiden User Stories "Student <username> soll die Texte verstehen, damit er besser Spiele entwickeln kann" und "Student <username> soll ein XNA Programm schreiben, damit er früh merkt, ob irgendetwas nicht funktioniert" auf dieselbe Art zum Requirement "Hausaufgabe machen" hinzu.
<br clear="all">


=== Tasks für Aufgabe 3 erstellen ===
=== Items für Aufgabe 4 erstellen ===
{{RefImg|trac_user_story_new_task.png|600px|9|Neuen Task zur User Story hinzufügen.}}
{{RefImg|trac_new_task.png|600px|8|Neuen Task anlegen.}}
Legen Sie nun einen Task in der User Story "Student <username> soll das Trac bedienen können, damit er in Zukunft produktiver arbeitet" an, der bearbeitet werden soll.
* Klicken Sie am linken Rand auf das Product Backlog.
* Klicken Sie auf die ID der User Story.
* Klicken Sie im oberen Bereich auf "Edit".
* Klicken Sie in der Kategorie "References" auf "Create a new referenced 'Task'".
* Geben Sie den Tasknamen "Scrum verstehen" an.
* Geben sie im Feld "Remaining Time" die Zeit in Stunden an, die sie Ihrer Einschätzung nach für die Fertigstellung des Tasks benötigen.
* Speichern Sie den Task ab.
* Legen Sie außerdem den Task "Trac verstehen" für dieselbe User Story auf dieselbe Weise an.
<br clear="all">


=== Tasks für Aufgabe 4 erstellen ===
Erstellen Sie wie in den vorhergehenden Aufgaben beschrieben, Items für Aufgabe 4
Erstellen Sie die Tasks für Aufgabe 4 unter User Story "Student <username> soll die Texte verstehen, damit er besser Spiele entwickeln kann" auf dieselbe Weise wie für Aufgabe 3:
* Titel <code>Student <NAME> soll die Clean Code Development Texte lesen</code> mit Beschreibung <code>Student <NAME> soll die Clean Code Development Texte lesen, um besseren Code schreiben zu können.</code>
* "'Clean Code Development' Artikel lesen"
* Titel <code>Student <NAME> soll den Usability Artikel lesen</code> mit Beschreibung <code>Student <NAME> soll den Usability Artikel lesen, um von vornherein Usabilityprobleme zu vermeiden.</code>
* "'Dokumentation' Artikel lesen"
* Titel <code>Student <NAME> soll die Dokumentation Texte lesen</code> mit Beschreibung <code>Student <NAME> soll die Dokumentation Texte lesen, um seinen Code sinvoll dokumentieren zu können.</code>
* "'Usability-Prinzipien beim Spieldesign' Artikel lesen"
* "'Trac und SVN' Artikel lesen"
<br clear="all">


=== Tasks für Aufgabe 5 erstellen ===
=== Items für Aufgabe 5 erstellen ===
Erstellen Sie einen Task für Aufgabe 5, z.B. "Programm schreiben", auf dieselbe Weise wie für Aufgaben 3 und 4 für User Story "Student <username> soll ein XNA Programm schreiben, damit er früh merkt, ob irgendetwas nicht funktioniert".
Erstellen Sie wie in den vorhergehenden Aufgaben beschrieben, ein Item für Aufgabe 5
<br clear="all">
* Titel <code>Student <NAME> soll ein MonoGame Programm schreiben</code> mit Beschreibung <code>Student <NAME> soll das in Aufgabe 5 beschriebene Programm schreiben, um seine Entwicklungswerkzeuge zu testen.</code>


=== Überprüfen der Tasks und Custom Query erstellen ===
=== Items akzeptieren ===
{{RefImg|trac_view_tickets_custom_query_marked.png|600px|10|In der Ansicht "View Tickets" kann eine Custom Query erstellt werden.}}
{{RefImg|gitea_hausaufgabe_tasks_assigned.png|500px|4|Items für die Hausaufgabe, vom Studenten akzeptiert und mit Zeitschätzung.}}
{{RefImg|trac_create_custom_query.png|600px|11|Ein Custom Query kann verschiedene Filter besitzen, die die Menge der anzuzeigenden Tickets und Tasks einschränkt. Außerdem kann eingestellt werden, welche Informationen eines Tickets in der Ausgabeliste angezeigt werden und wie diese gruppiert werden können. Das Query kann auch mit "Save query" unter einem Namen gespeichert werden, sodass es in der "View Tickets"-Liste wieder auftaucht.}}
Bevor Sie mit den Aufgaben beginnen, sollten Sie sich die entsprechenden Items zuweisen (siehe Abb. 4).
{{RefImg|trac_final_custom_query.png|600px|12|Ergebnis der vorher erstellten Custom Query, die alle aktiven Tickets für den Benutzer "greitsch" anzeigt.}}
* Wählen Sie eines ihrer Items aus dem Sprintbacklog (<code>Issues -> Milestones -> Hausaufgabe</code>) aus, indem Sie auf den Titel des Tickets klicken.
Überprüfen Sie, ob Ihre Tasks richtig erstellt wurden, indem Sie sich das Product Backlog und das Sprint Backlog ansehen. Legen Sie außerdem ein neues Custom Query an.
* Geben sie eine Abschätzung wie lange es dauern wird das Item 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.  
Ein Custom Query ist eine von Ihnen konfigurierte Ansicht, die Tickets und Tasks mit ihren Attributen filtert. Um eine geeignete Ansicht für Ihre Tickets oder Tasks zu erstellen, gehen Sie wie folgt vor:
* Weisen Sie sich dem Item zu, indem Sie auf das Zahnrad neben dem Schriftzug ''Zuständig'' klicken, und ihren Benutzernamen auswählen.  
* Klicken Sie in der oberen Navigationsleiste auf "View Tickets".
Aktzeptieren Sie so alle Tasks die sie in den vorhergehenden Aufgaben erstellt haben. Akzeptieren Sie auch das Item zu Aufgabe 5 falls dieses schon existierte.
* Klicken Sie in der folgenden Ansicht oben rechts auf den Link "Custom Query".
* Konfigurieren Sie sich eine geeignete Ansicht, z.B. so wie in {{LinkImg|11|Abbildung 11}} dargestellt.
* Klicken Sie auf "Update" um festzustellen, ob das Query richtig funktioniert.
* Klicken Sie auf "Save query" um das Query unter einem geeigneten Namen abzuspeichern. Sie können sie später jederzeit wieder löschen.  
* Das neu erstellte Custom Query ist nun außerdem am linken Rand in der Kategorie "Tickets" zu finden.


Es gibt noch viele andere Arten, Ihre Ticketabfragen zu personalisieren. Für weiterführende Informationen können Sie die Trac-Dokumentationsseiten [http://trac.edgewall.org/wiki/TracReports TracReports] und [http://trac.edgewall.org/wiki/TracQuery TracQuery] besuchen.
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 Tickets eingetragen.
<br clear="all">


=== Tasks akzeptieren ===
=== Überprüfen der Items ===
{{RefImg|trac_resolve_ticket.png|600px|13|Detailansicht eines Tasks.}}
Bevor Sie mit den Aufgaben beginnen, sollten Sie Ihren entsprechenden Tasks akzeptieren.
* Wählen Sie auf der linken Seite den Sprint "Sprint Hausaufgabe" aus und klicken Sie auf "View".
* Öffnen Sie die Tasks Ihrer User Stories, indem Sie auf die entsprechenden IDs klicken.
* Wählen Sie im Reiter "Edit" in der Kategorie "Action" die Auswahlmöglichkeit "accept Next status will be 'accepted'" aus und klicken Sie auf "Submit changes".
<br clear="all">


=== Aussehen ===
Bevor Sie mit der Arbeit zu beginnen, prüfen Sie noch einmal ob alle Items für Ihre Aufgaben im Sprintbacklog vorhanden sind.
{{RefImg|trac_ticket_view.png|600px|14|Die angelegten Tasks in Trac.}}
* Klicken sie auf den Reiter <code>Issues -> Meilensteine -> Hausaufgabe</code>
Wenn Sie alle Schritte durchgeführt haben, sollte das Sprint Backlog für den Sprint "Sprint Hausaufgabe" in etwa so aussehen, wie in {{LinkImg|14|Abbildung 14}}.
* Schränken Sie die Anzeige auf die Ihnen zugewiesenen Items ein, indem sie unter <code>Zuständig ⯆</code> ihren Usernamen wählen. Prüfen Sie ob alle Items vorhanden sind.
<br clear="all">
* Erstellen Sie eventuell nicht vorhandene Userstories und Tasks wie in den vorhergehenden Aufgaben beschrieben.


== Aufgabe 3: Scrum und Trac 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 des Tracs vertraut
* Machen Sie sich mit den anderen Funktionen von [[Gitea]] vertraut und lesen Sie den Artikel [[Scrum und Gitea]]
** Schauen Sie sich die verschiedenen Bereiche des Admin-Interfaces an und lesen Sie ggf. die Dokumentation (Links zur Dokumentation befinden sich auf jeder Trac-Seite).
* Sollte es Fragen zum Vorgehen (Scrum und Gitea) geben, schreiben Sie diese als Kommentar in ihr Item in Gitea, damit eventuelle Fragen schnell geklärt werden können (Kommentarfeld unter <code>Issues -> Meilensteine -> Hausaufgabe -> Student <NAME> soll Scrum, Gitea und Git verstehen</code>).
** Schauen Sie außerdem die verschiedenen Ansichten, die Sie über die Navigationsleiste am oberen Rand erreichen (Home, Timeline, Roadmap, ...) an.
* Lesen sie die Artikel [[GIT|Git]] und [[GitWorkflow| Git Workflow]]
** '''Hinweis''': Sie können nichts kaputt machen, außer wenn Sie Ihren Teamkollegen oder sich selbst unter "Administration->Permissions" die Rechte entziehen. Machen Sie das also nicht.
**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]].
* Beschreiben Sie in der User Story "Student <username> soll das Trac bedienen können, damit er in Zukunft produktiver arbeitet" kurz, wie Scrum mit unserem Trac zusammenhängt. Verwenden Sie dazu einen Kommentar.
**[[Git#Repository klonen|Klonen]] sie das Gruppenrepository.
** Ö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 an einer Datei| Committen]] sie ihre Änderungen: Benutzen sie die Commitnachricht <code>Added name to README.md (closes #<ticketnummer>)</code> um das entsprechende Item 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. Halten Sie sich dabei and [[GitWorkflow#Tägliche Arbeit Synchronisieren| den empfohlenen 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]], 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.


== Aufgabe 4: Texte lesen ==  
== Aufgabe 4: Texte lesen ==  
Lesen Sie sich die folgenden Artikel durch:  
Lesen Sie sich die folgenden Artikel durch, und kommentieren Sie ihr entsprechendes Ticket:
* [[CleanCode|Clean Code Development]]
* Lesen Sie [[CleanCode|Clean Code Development]]  
* [[Dokumentation]]
** Beschreiben Sie in einem Kommentar zum entsprechenden Item ein Cleancodeprinzip und wieso Sie es für das Sopra für besonders wichtig erachten.
* [[UsabilityForGames|Usability-Prinzipien beim Spieldesign]]
* Lesen Sie [[Dokumentation]]
* [[SVN#Trac_und_SVN|Trac und SVN]]
* Lesen Sie [[UsabilityForGames|Usability-Prinzipien beim Spieldesign]]  
** Beschreiben Sie in einem Kommentar zum entsprechenden Item ein Usabilityprinzip und wieso Sie es für das Sopra für besonders wichtig erachten.


Sollten Sie Fragen zu diesen Artikeln haben, wenden Sie sich an Ihren Tutor.
=== Items bearbeiten ===
<br clear="all">
Bearbeiten sie die Aufgaben und tragen Sie entsprechende Zeiten in die Items in Gitea ein (im Menü rechts, ''Time Tracker -> Add Time''). 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]]).


=== Tasks bearbeiten ===
'''Achtung''': Sie können die Summe der einmal eingetragenen Zeit nachträglich nur nach oben verändern.
Aktualisieren Sie die Ihrer Einschätzung nach noch verbleibende Zeit für einen Task, während Sie daran arbeiten. 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 [[Richtlinien]]).


=== Tasks schließen ===
=== Items 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, aber wählen Sie jetzt im Block "Action" (siehe {{LinkImg|12|Abbildung 12}}) die Option "resolve as fixed" und klicken Sie dann auf "Submit changes".
Wenn Sie mit einer Aufgabe fertig sind, sollten Sie Ihren entsprechenden Items 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 Item auch über die [[Git#Git und Gitea |Commitnachricht schließen können]].


Alternativ können Sie auch die "Remaining Time" auf 0 setzen. In diesem Fall wird der Task ebenfalls geschlossen.
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 XNA-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 Task akzeptieren.
Erstellen Sie ein [[MonoGame]] Programm, welches die folgenden Eigenschaften erfüllt:  
 
Erstellen Sie ein [[XNA]]-Programm, welches die folgenden Eigenschaften erfüllt:
=== Funktionale Anforderungen ===
=== Funktionale Anforderungen ===
[[Datei:unilogo.png|right|thumb|Abbildung 15: Das Uni-Logo]]
[[Datei:unilogo.png|right|thumb|Abbildung 6: Das Uni-Logo]]
[[Datei:background.png|right|thumb|Abbildung 16: Hintergrundgrafik]]
[[Datei:background.png|right|thumb|Abbildung 7: Hintergrundgrafik]]
* Das Programm zeichnet eine Hintergrundgrafik in einem XNA-Fenster.
* Das Programm zeichnet eine Hintergrundgrafik in einem MonoGame-Fenster.
* Vor dieser Hintergrundgrafik rotiert ein Uni-Logo um den Bildschirmmittelpunkt.
* 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.
** 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 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 als Richtwert die Größe des Fensters bei Programmaufruf.)
** 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 teilweise durchsichtig (transparent) sein.
* 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.
* Innerhalb des [[XNA]]-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:
* Wenn der Benutzer mit der Maus innerhalb des Fensters klickt, soll ein Sound abhängig von der Position des Cursors abgespielt werden:
** Liegt der Cursor über dem Logo, soll ein Ton A erklingen.
** Befindet sich der Cursor über dem Logo, soll ein Ton A erklingen.
** Liegt 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 ===
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 ====
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.
 
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.
 
Um ReSharper-Konformität der Hausaufgabe unter diesen Bedingungen herzustellen, sind mehrere Möglichkeiten denkbar:
# 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 /><syntaxhighlight lang="csharp">var someSpriteBatch = new SpriteBatch(mGraphics.GraphicsDevice);</syntaxhighlight> 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.


=== Technische Anforderungen ===
[[Kategorie:Code-Beispiele]]
Die [[Anforderungen#Technische Anforderungen|technischen Anforderungen]] müssen bis auf die folgenden Ausnahmen erfüllt werden:
* Das Programm muss nicht auf '''allen''' Desktop-Windows Versionen ab [[Windows|Windows XP SP 2]] und höher lauffähig sein. Es reicht, wenn es auf '''einer''' höheren Version lauffähig ist. Falls diese Version nicht Windows 7 bzw. Windows 7 SP1 ist, geben Sie dies bitte in einer readme.txt an, die sie der [[#Abgabe|Abgabe]] beilegen.


=== Ressourcen ===
=== Ressourcen ===
Damit das Erstellen von Grafiken ignoriert werden kann, gibt es hier die beiden Beispieldateien aus der Einführungsveranstaltung:
Damit das Erstellen von Grafiken ignoriert werden kann, gibt es hier die beiden Beispieldateien aus der Einführungsveranstaltung:
* [http://sopra.le-gousteau.de/images/5/55/Unilogo.png Das Uni-Logo]
* [[Medium:Unilogo.png|Das Uni-Logo]]
* [http://sopra.le-gousteau.de/images/2/26/Background.png Hintergrundgrafik]
* [[Medium:Background.png|Hintergrundgrafik]]


Als Audiodateien können beliebige, kurze, Dateien verwendet werden. Die beiden aus der Einführungsveranstaltung bekannten Waves gibt es hier:
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]]  
* [[Datei:logo_hit.wav|Das Logo wird getroffen]]
* [[Datei:logo_miss.wav|Das Logo wird nicht getroffen]]
* [[Datei:logo_miss.wav|Das Logo wird nicht getroffen]]


=== Abgabe ===
=== Abgabe ===
Bitte verwenden Sie zur finalen [[Abgabe#Hausaufgabe|Abgabe]] der Hausaufgabe das [[Subversion|SVN]]-Repository ihrer Gruppe: {{:Abgabe/Hausaufgabe}}
Bitte verwenden Sie zur finalen [[Abgabe#Hausaufgabe|Abgabe]] der Hausaufgabe das [[GIT|Git]]-Repository ihrer Gruppe. Der Programmier-Teil der Hausaufgabe muss als komplettes [[Visual Studio]] Projekt abgegeben werden. Sie sollten dazu einfach das Projekt in das Gruppenrepository unter <code>/abgabe/hausaufgabe/<username>/</code> comitten.
Verwenden Sie außerdem in Ihrer Commit-Message einen Befehl, um die von Ihnen angelegten Tickets zu schließen. Die Syntax dafür finden Sie im Artikel [[SVN#Trac_und_SVN|Trac und SVN]].
 
== Abgabe finalisieren ==
 
Wenn Sie in Ihrer Gruppe die Aufgaben als letztes abschließen (d.h. Sie die letzte offene User Story im Sprint schließen) erledigen Sie noch folgende Aufgabe. In den auf die Hausaufgabe folgenden Sprints erledigt dies der Product Owner.
 
 
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.
* Schließen Sie das Sprintbacklog (<code>Issues -> Meilensteine -> Hausaufgabe -> Schießen</code>).
* Erstellen sie einen [[Gitea#Pullrequest|Pullrequest]] (siehe Abb. 8), sodass der aktuelle Stand von <code>master</code> nach <code>release</code> übertragen 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.
** 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>.
** 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 <code>release</code>-branch übertragen.


=== 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.


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

Aktuelle Version vom 17. November 2020, 11:19 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 schrieben. Die Hausaufgabe muss von jedem Teilnehmer in der ersten Woche (siehe Roadmap) verbindliche 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 Virtuelles Treffen um auszuprobieren, ob sie ohne technische Probleme an einem Gruppentreffen teilnehmen können.
  • 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 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 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: Den Hausaufgabensprint erstellen.

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 (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.


User Stories für Aufgabe 3 erstellen

Abbildung 3: Eine User Story anlegen.

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

  • Klicken Sie auf den Reiter Issues.
  • Prüfen Sie ob bereits ein Item mit dem Titel Student <NAME> soll Scrum, Gitea und Git verstehen existiert (siehe Abb. 3).
    • 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 ein.
    3. Tragen sie im Textfeld darunter die ausführliche Beschreibung Student <NAME> soll Scrum, Gitea und Git verstehen um effizient arbeiten zu können. ein.
    4. Weisen Sie dem Item eine 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.
    5. Weisen Sie dem Sprint (Meilenstein) Sprint 00 (Hausaufgabe) zu.
    6. Drücken sie auf Issue Erstellen.

Bitte beachten Sie in dieser, und in folgenden Aufgaben, den Platzhalter <NAME> geeignet (z.B.: mit ihrem Usernamen, oder Vornamen) zu ersetzen.

Items für Aufgabe 4 erstellen

Erstellen Sie wie in den vorhergehenden Aufgaben beschrieben, Items für Aufgabe 4

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

Items für Aufgabe 5 erstellen

Erstellen Sie wie in den vorhergehenden Aufgaben beschrieben, ein Item für Aufgabe 5

  • Titel Student <NAME> soll ein MonoGame Programm schreiben mit Beschreibung Student <NAME> soll das in Aufgabe 5 beschriebene Programm schreiben, um seine Entwicklungswerkzeuge zu testen.

Items akzeptieren

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

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

  • Wählen Sie eines ihrer Items aus dem Sprintbacklog (Issues -> Milestones -> Hausaufgabe) aus, indem Sie auf den Titel des Tickets klicken.
  • Geben sie eine Abschätzung wie lange es dauern wird das Item 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 Item 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 das Item zu Aufgabe 5 falls dieses 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 Tickets eingetragen.

Überprüfen der Items

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

  • Klicken sie auf den Reiter Issues -> Meilensteine -> Hausaufgabe
  • Schränken Sie die Anzeige auf die Ihnen zugewiesenen Items ein, indem sie unter Zuständig ⯆ ihren Usernamen wählen. Prüfen Sie ob alle Items 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 ihr Item in Gitea, damit eventuelle Fragen schnell geklärt werden können (Kommentarfeld unter Issues -> Meilensteine -> Hausaufgabe -> Student <NAME> soll Scrum, Gitea und Git verstehen).
  • 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.

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 Item 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 Item ein Usabilityprinzip und wieso Sie es für das Sopra für besonders wichtig erachten.

Items bearbeiten

Bearbeiten sie die Aufgaben und tragen Sie entsprechende Zeiten in die Items in Gitea ein (im Menü rechts, Time Tracker -> Add Time). 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: Sie können die Summe der einmal eingetragenen Zeit nachträglich nur nach oben verändern.

Items schließen

Wenn Sie mit einer Aufgabe fertig sind, sollten Sie Ihren entsprechenden Items 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 Item 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.
    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
    var 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. Der Programmier-Teil der Hausaufgabe muss als komplettes Visual Studio Projekt abgegeben werden. Sie sollten dazu einfach das Projekt in das Gruppenrepository unter /abgabe/hausaufgabe/<username>/ comitten.

Abgabe finalisieren

Wenn Sie in Ihrer Gruppe die Aufgaben als letztes abschließen (d.h. Sie die letzte offene User Story im Sprint schließen) erledigen Sie noch folgende Aufgabe. In den auf die Hausaufgabe folgenden Sprints erledigt dies der Product Owner.


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.

  • Schließen Sie das Sprintbacklog (Issues -> Meilensteine -> Hausaufgabe -> Schießen).
  • Erstellen sie einen Pullrequest (siehe Abb. 8), sodass der aktuelle Stand von master nach release übertragen 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 übertragen.

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.