Hausaufgabe: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Greitschus (Diskussion | Beiträge)
Langenfeld (Diskussion | Beiträge)
(401 dazwischenliegende Versionen von 16 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
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 4 Aufgaben.
{{TOCRight}}


'''Lesen Sie den Text jeder Aufgabe vollständig durch, bevor Sie mit der Bearbeitung beginnen.'''
== Einleitung ==
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.'''
* '''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 ==  
== 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 ===
* [[Visual Studio]] 2010
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.
* [[Resharper]]
* [[XNA]] Framework
* 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].  
* 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==
{{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 getestet haben:  
===Gitea vorbereiten===
* Zugang zu ihrem SVN-Repository
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:
* Zugang zum Trac ihrer Gruppe
*Klicken Sie auf <code>Issues -> Labels</code>.
* Die Gruppenmailingliste
*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">


Die Adressen dieser Dienste finden sich auf der [[Gruppeneinteilung]]sseite.
===Sprint für Hausaufgabe anlegen===
{{RefImg|gitea_firstsprintmilestone.png|500px|2|Den Hausaufgabensprint erstellen.}}
Prüfen sie ob in Gitea ein Sprint  für die Hausaufgabe angelegt wurde. Falls nicht, legen Sie den entsprechenden Milestone in Gitea an:
*Klicken Sie auf den Reiter <code>Issues -> Meilensteine</code>.
*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]].
<br clear="all">


===Issues für Aufgabe 3 erstellen===
{{RefImg|Firstusrstry.png|500px|3|Ein Issue anlegen.}}
*Klicken Sie auf <code>Issues -> Neues Issue</code>
*Tragen sie als Titel <code>Scrum, Gitea und Git verstehen</code> ein.
*Tragen sie im Textfeld darunter die ausführliche Beschreibung <code>Scrum, Gitea und Git verstehen um effizient arbeiten zu können</code> ein.
* 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.
*Weisen Sie dem Sprint (Meilenstein) ''Sprint 00 (Hausaufgabe)'' zu.
*Drücken sie auf <code>Issue Erstellen</code>.
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).


== Aufgabe 2: Trac ==
=== Issues für Aufgabe 4 erstellen===
Erstellen Sie für die Bearbeitung der Aufgabe 3 Tasks im Trac Ihrer Gruppe. Gehen Sie dazu wie folgt vor.


=== Product und Sprint Backlog für "Hausaufgabe" anlegen ===
Erstellen Sie wie in den vorhergehenden Aufgaben beschrieben, die Issues für Aufgabe 4:
*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>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>Dokumentation Texte lesen</code> mit Beschreibung <code>Dokumentation Texte lesen um den eigenen Code sinvoll dokumentieren zu können.</code>


{{RefImg|trac_product_backlog.png|600px|1|Administrationsmenü für Product Backlog.}}
===Issues für Aufgabe 5 erstellen===
Prüfen Sie, ob in Ihrem Trac bereits ein Product Backlog "Product Backlog" und ein Sprint Backlog "Sprint Backlog" angelegt wurde. Falls nein, legen Sie diese an.
Erstellen Sie wie in den vorhergehenden Aufgaben beschrieben, das Issue für Aufgabe 5:
* Klicken Sie in der oberen Navigationsleiste auf "Admin".
*Titel <code>MonoGame Programm schreiben</code> mit Beschreibung <code>Programm wie in Aufgabe 5 beschrieben schreiben um die Entwicklungswerkzeuge zu testen.</code>
* 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 darauf klicken. Unter "Column Preferences", wählen Sie die Kombination der Form Property:Order "Business Value":0, "Importance":2, "Story Points":3 aus. Bei der Property "Story Points" geben Sie 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" as 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 wählen Sie die Property:Order Kombinationen, "Owner":1, "Remaining Time":0 und "Resources":2 aus. Geben Sie außerdem bei "Remaining Time" als Alternative "Total Remaining Time" an.
<br clear="all">


=== Milestone für Hausaufgabe anlegen ===
===Issues zuweisen===
{{RefImg|trac_new_milestone.png|600px|2|Das Formular für die Erstellung eines neuen Milestones.}}
{{RefImg|gitea_hausaufgabe_tasks_assigned.png|500px|4|Issues für die Hausaufgabe, vom Studenten akzeptiert und mit Zeitschätzung.}}
Prüfen Sie, ob in Ihrem Trac bereits ein Milestone für die Hausaufgabe angelegt ist. Falls nein, legen Sie diesen an.
Bevor Sie mit den Aufgaben beginnen, sollten Sie sich die entsprechenden Issues zuweisen (siehe Abb. 4).
* Klicken Sie in der oberen Navigationsleiste auf "Admin".
*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.
* Klicken Sie in der linken Leiste auf "Milestones".
*Geben sie eine Abschätzung wie lange es dauern wird das 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.
* Fügen Sie den neuen Milestone "Hausaufgabe" mit dem Datum der Abgabe (siehe [[Roadmap]], Datumsformat beachten!) hinzu.
* Weisen Sie sich dem Issue zu, indem Sie auf das Zahnrad neben dem Schriftzug ''Zuständig'' klicken, und ihren Benutzernamen auswählen.
<br clear="all">
Akzeptieren Sie so alle Tasks die sie in den vorhergehenden Aufgaben erstellt haben. Akzeptieren Sie auch das Issue zu Aufgabe 5 falls dieses schon existierte.


=== Sprint für Hausaufgabe anlegen ===
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.
{{RefImg|trac_new_sprint.png|600px|3|Das Formular zum Anlegen eines neuen Sprints.}}
Prüfen Sie, ob in Ihrem Trac bereits ein Sprint für die Hausaufgabe angelegt wurde. Falls nein, legen Sie diesen an.
* Klicken Sie in der oberen Navigationsleiste auf "Admin".
* Klicken Sie in der linken Leiste auf "Sprints".
* 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.
* 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">


=== Requirement für die Hausaufgabe anlegen ===
=== Überprüfen der Issues===
{{RefImg|trac_new_requirement.png|600px|4|Neues Requirement anlegen.}}
Prüfen Sie, ob in Ihrem Trac bereits das Requirement "Hausaufgabe machen" im Product Backlog angelegt ist. Falls nein, legen Sie dieses an.
* Klicken Sie am linken Rand auf "Product Backlog" und überprüfen Sie eventuell vorhandene Requirements.
* Klicken Sie auf der linken Seite unter Actions auf "New Requirement".
* Nennen Sie das neue Requirement "Hausaufgabe machen", weisen Sie dem Requirement den Milestone "Hausaufgabe" zu und speichern Sie es ab.
<br clear="all">


=== User Story anlegen ===
Bevor Sie mit der Arbeit beginnen, prüfen Sie noch einmal ob alle Issues für Ihre Aufgaben im Sprintbacklog vorhanden sind.
{{RefImg|trac_new_user_story.png|600px|5|Neue User Story anlegen.}}
* Klicken sie auf den Reiter <code>Issues -> Meilensteine -> Sprint 00 (Hausaufgabe)</code>
Legen Sie eine neue User Story für das Requirement "Hausaufgabe machen" an.
* 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.
* Klicken Sie am linken Rand unter Actions auf "New User Story".
* Erstellen Sie eventuell nicht vorhandene Issues wie in den vorhergehenden Aufgaben beschrieben.
* Nennen Sie die User Story z.b. "<username> muss die Hausaufgabe machen".
* 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.
<br clear="all">


=== Task für Aufgabe 3 erstellen ===
==Aufgabe 3: Scrum und Gitea verstehen==
{{RefImg|trac_user_story_new_task.png|600px|6|Neuen Task zur User Story hinzufügen.}}
{{RefImg|trac_new_task.png|600px|7|Neuen Task anlegen.}}
Erstellen Sie einen Task für die Aufgabe 3.
* Klicken Sie am linken Rand auf das Product Backlog.
* Klicken Sie auf die ID der eben angelegten User Story.
* Klicken Sie im oberen Bereich auf "Edit".
* Klicken Sie in der Kategorie "References" auf "Create a new referenced 'Task'".
* Geben Sie einen Tasknamen für das Lesen der Texte an, z.B. "Texte lesen".
* 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.
<br clear="all">


=== Task für Aufgabe 4 erstellen ===
* Recherchieren Sie, was [[Scrum]] ist und wie Scrum funktioniert.
Erstellen Sie einen Task für Aufgabe 4, z.B. "Programm schreiben", auf dieselbe Weise für für Aufgabe 3.
*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 [[Ablauf|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 <code>Issues -> Meilensteine -> Sprint 00 (Hausaufgabe) -> Scrum, Gitea und Git verstehen</code>).
*Lesen sie die Artikel [[GIT|Git]] und [[GitWorkflow| Git Workflow]]
**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]].
**[[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 #<issue-nummer>)</code> um das entsprechende Issue 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 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].


=== Überprüfen der Tasks und Custom Query erstellen ===
'''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.
{{RefImg|trac_view_tickets_custom_query_marked.png|600px|4|In der Ansicht "View Tickets" kann eine Custom Query erstellt werden.}}
{{RefImg|trac_create_custom_query.png|600px|5|Eine Custom Query kann verschiedene Filter besitzen, die die Menge der anzuzeigenden Tickets einschränkt. Außerdem kann eingestellt werden, welche Informationen eines Tickets in der Ausgabeliste angezeigt werden und wie diese gruppiert werden können. Die Query kann auch mit "Save query" unter einem Namen gespeichert werden, sodass sie in der "View Tickets"-Liste wieder auftaucht.}}
{{RefImg|trac_final_custom_query.png|600px|6|Ergebnis der vorher erstellten Custom Query, die alle aktiven Tickets für den Benutzer "dietsch" anzeigt.}}
Ü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.
Ein Custom Query ist eine von Ihnen konfigurierte Ansicht, die Tickets und ihre Attribute filtert. Um eine geeignete Ansicht für Ihre Tickets zu erstellen, gehen Sie wie folgt vor:
* Klicken Sie in der oberen Navigationsleiste auf "View Tickets".
* 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|5|Abbildung 5}} 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.
==Aufgabe 4: Texte lesen==
<br clear="all">
Lesen Sie sich die folgenden Artikel durch, und kommentieren Sie ihr entsprechendes Issue:
*Lesen Sie [[CleanCode|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 [[UsabilityForGames|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.


== OLD ==
===Issues bearbeiten===
=== Komponente "Hausaufgabe" anlegen ===
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]]).
{{RefImg|trac_components.png|600px|1|Administrationsmenü für Komponenten.}}
Prüfen Sie, ob in Ihrem Trac bereits eine Komponente "Hausaufgabe" angelegt wurde. Falls nein, legen Sie diese an.
* Klicken Sie in der oberen Navigationsleiste auf "Admin".
* Klicken Sie in der linken Navigation auf Ticket System->Components.
* Sie sehen nun eine Liste der existierenden Komponenten. Sie können diese löschen oder verändern.  
* Wenn die Komponente "Hausaufgabe" bereits existiert, müssen Sie nichts mehr machen.
* Wenn nicht, müssen Sie eine neue Komponente anlegen. Sie können dies mit dem Kasten "Add Component" machen. Lassen Sie dabei das "Owner"-Feld leer.
<br clear="all">


=== Übergeordnetes Ticket erstellen ===
===Issues schließen===
{{RefImg|trac_new_ticket.png|600px|2|Das Formular für die Erstellung neuer Tickets.}}
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]].
Erstellen Sie ein übergeordnetes Ticket für Ihre Hausaufgabe.
* Klicken Sie in der oberen Navigationsleiste auf "New Ticket".
* Tragen Sie im Feld "Summary" eine kurze Beschreibung, z.B. "<username>: Hausaufgabe machen", ein.
* Wählen Sie im Feld "Type" den Typ des Tickets aus, in diesem Fall "task". Sie können die verfügbaren Typen (und auch Priorities, Milestones und Versions) ähnlich wie die Komponenten im Admin-Interface konfigurieren.  
* Wählen Sie im Feld "Component" die Komponente, zu der dieses Ticket gehört; in diesem Fall "Hausaufgabe".
* Tragen Sie Ihren Benutzernamen im Feld "Owner" ein. Der Owner ist derjenige, der für die Bearbeitung des Tickets verantwortlich ist.
* Lassen Sie die Felder "Version" und "Milestone" frei.  
* Klicken Sie nun auf "Create Ticket".
<br clear="all">


=== Ticket für Aufgabe 3 erstellen ===
Vergessen Sie nicht die Zeit, die Sie für den Task benötigt haben, einzutragen (falls Sie das noch nicht gemacht haben).
{{RefImg|trac_new_ticket_blocking.png|600px|3|Um anzuzeigen, dass ein Ticket ein anderes blockiert, d.h. dessen Abschluss verhindert, kann man die ID dieser anderen Tickets im Feld "Blocking" eintragen. Umgekehrt kann man im Feld "Blocked By" eintragen, welche Tickets dieses Ticket blockieren.}}
Erstellen Sie ein Ticket für die Aufgabe 3:
* Gehen Sie wie beim vorherigen Ticket vor, aber verwenden Sie nun einen anderen Namen, z.B. "Texte lesen".
* Tragen Sie außerdem bei diesem Ticket ein, dass es das vorher erstellte, übergeordnete Ticket "<username>: Hausaufgabe machen" blockiert. Dazu tragen Sie im Feld "Blocking" die ID des vorherigen Tickets ein. Falls Sie die ID nicht mehr wissen, können Sie diese in der Ticketliste nachschlagen. Der Aufgabenteil [[Hausaufgabe#Custom Query erstellen|"Custom Query erstellen"]] erklärt Ihnen, wie sie das tun.  
<br clear="all">


=== Ticket für Aufgabe 4 erstellen ===
==Aufgabe 5: Programm schreiben==  
Erstellen Sie ein Ticket für die Aufgabe 4, z.B. "Programm schreiben". Tragen Sie bei dem Ticket ein, dass es das übergeordnete Ticket "<username>: Hausaufgabe machen" blockiert. Gehen Sie wie im Aufgabenteil [[Hausaufgabe#Ticket für Aufgabe 3 erstellen|"Ticket für Aufgabe 3 erstellen"]] vor.
[[Datei:homework_final.jpg|thumb|right|Abbildung 5: Das fertige Programm könnte so aussehen.]]
Erstellen Sie ein [[MonoGame]] Programm, welches die folgenden Eigenschaften erfüllt:
===Funktionale Anforderungen===
[[Datei:unilogo.png|right|thumb|Abbildung 6: Das Uni-Logo]]
[[Datei:background.png|right|thumb|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.<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:
**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.


=== Custom Query erstellen ===
[[Kategorie:Code-Beispiele]]
{{RefImg|trac_view_tickets_custom_query_marked.png|600px|4|In der Ansicht "View Tickets" kann eine Custom Query erstellt werden.}}
{{RefImg|trac_create_custom_query.png|600px|5|Eine Custom Query kann verschiedene Filter besitzen, die die Menge der anzuzeigenden Tickets einschränkt. Außerdem kann eingestellt werden, welche Informationen eines Tickets in der Ausgabeliste angezeigt werden und wie diese gruppiert werden können. Die Query kann auch mit "Save query" unter einem Namen gespeichert werden, sodass sie in der "View Tickets"-Liste wieder auftaucht.}}
{{RefImg|trac_final_custom_query.png|600px|6|Ergebnis der vorher erstellten Custom Query, die alle aktiven Tickets für den Benutzer "dietsch" anzeigt.}}
Überprüfen Sie, ob Ihre Tickets richtig erstellt worden. Verwenden Sie dazu eine "Custom Query". Eine Custom Query ist eine von Ihnen konfigurierte Ansicht, die Tickets und ihre Attribute filtert. Um eine geeignete Ansicht für Ihre Tickets zu erstellen, gehen Sie wie folgt vor:
* Klicken Sie in der oberen Navigationsleiste auf "View Tickets".
* 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|5|Abbildung 5}} dargestellt.
* Klicken Sie auf "Update" um festzustellen, ob die Query richtig funktioniert.
* Klicken Sie auf "Save query" um die Query unter einem geeigneten Namen abzuspeichern. Sie können sie später jederzeit wieder löschen.


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.
=== Ressourcen===
<br clear="all">
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]]


== Aufgabe 3: Texte lesen ==
Als Audiodateien können beliebige, kurze, Dateien verwendet werden. Die beiden aus der Einführungsveranstaltung bekannten Waves gibt es hier:
=== Ticket akzeptieren ===
*[[Datei:logo_hit.wav|Das Logo wird getroffen]]
{{RefImg|trac_resolve_ticket.png|600px|7|Detailansicht eines Tickets.}}
*[[Datei:logo_miss.wav|Das Logo wird nicht getroffen]]
Bevor Sie mit dieser Aufgabe beginnen, sollten Sie Ihr entsprechendes Ticket akzeptieren.  
* Verwenden Sie Ihre Custom Query aus [[Hausaufgabe#Custom Query erstellen|Aufgabe 4, "Custom Query erstellen"]] um das Ticket für Aufgabe 3 zu finden.
* Wenn Sie das Ticket geöffnet haben, suchen Sie nach dem Block "Action" (siehe {{LinkImg|7|Abbildung 7}}).
* Wählen Sie dort "accept" und klicken Sie dann auf "Submit changes".
<br clear="all">


=== Texte lesen ===
===Abgabe===
Lesen Sie sich die folgenden Artikel durch:
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.
* [[CleanCode|Clean Code Development]]
* [[Dokumentation]]
* [[UsabilityForGames|Usability-Prinzipien beim Spieldesign]]


Sollten Sie Fragen zu diesen Artikeln haben, wenden Sie sich an Ihren Tutor.
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.


=== Ticket schließen ===
==Aufgabe 6: Abgabe finalisieren==
Wenn Sie mit dieser Aufgabe fertig sind, sollten Sie Ihr entsprechendes Ticket schließen. Gehen Sie ähnlich wie beim Akzeptieren eines Tickets vor, aber wählen Sie jetzt im Block "Action" (siehe {{LinkImg|7|Abbildung 7}}) die Option "resolve as fixed" und klicken Sie dann auf "Submit changes".


== Aufgabe 4: Programm schreiben ==
Wenn Sie in Ihrer Gruppe die Aufgaben als letztes abschließen (d.h. Sie die 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 Abschlißen]]):
[[Datei:homework_final.jpg|thumb|right|Abbildung 8: Das fertige XNA-Programm könnte so aussehen.]]
Bevor Sie mit dieser Aufgabe beginnen, sollten Sie Ihr entsprechendes Ticket akzeptieren.


Erstellen Sie ein [[XNA]]-Programm, welches die folgenden Eigenschaften erfüllt:
=== Funktionale Anforderungen ===
[[Datei:unilogo.png|right|thumb|Abbildung 9: Das Uni-Logo]]
[[Datei:background.png|right|thumb|Abbildung 10: Hintergrundgrafik]]
* Das Programm zeichnet eine Hintergrundgrafik in einem XNA-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.
** 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 muss teilweise durchsichtig (transparent) sein.
* 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:
** Liegt der Cursor über dem Logo, soll ein Ton A erklingen.
** Liegt der Cursor nicht über dem Logo, soll ein Ton B erklingen.
** Ton A und Ton B müssen verschieden sein.


=== Technische Anforderungen ===
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 ===
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.
Damit das Erstellen von Grafiken ignoriert werden kann, gibt es hier die beiden Beispieldateien aus der Einführungsveranstaltung:
*Schließen Sie das Sprintbacklog (<code>Issues -> Meilensteine -> Sprint 00 (Hausaufgabe) -> Schießen</code>).
* [http://sopra.le-gousteau.de/images/5/55/Unilogo.png Das Uni-Logo]
*Erstellen sie einen [[Gitea#Pullrequest|Pullrequest]] (siehe Abb. 8), sodass der aktuelle Stand von <code>master</code> nach <code>release</code> übertragen werden kann.  Gehen Sie wie folgt vor:
* [http://sopra.le-gousteau.de/images/2/26/Background.png Hintergrundgrafik]
**Klicken Sie in Gitea auf den Reiter <code>Code -> Branch: master</code>.
 
**Drücken Sie auf den Button <code>Neuer Pull-Request</code>.
Als Audiodateien können beliebige, kurze, Dateien verwendet werden. Die beiden aus der Einführungsveranstaltung bekannten Waves gibt es hier:
**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''. Ihnen werden daraufhin alle Änderungen die mit dem Pull-Request vom  <code>master</code>  auf den <code>release</code> -Branch übertragen werden sollen angezeigt.
* [[Datei:logo_hit.wav|Das Logo wird getroffen]]
**Drücken Sie auf <code>Pullrequest Erstellen</code>.
* [[Datei:logo_miss.wav|Das Logo wird nicht getroffen]]
**Gitea wird feststellen, dass es zwischen <code>master</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.


=== Abgabe ===
Die Änderungen die Sie und ihre Gruppe während des Hausaufgabensprints gemacht haben, befinden sich nun auch auf dem <code>release</code>-Branch.
Bitte verwenden Sie zur finalen [[Abgabe#Hausaufgabe|Abgabe]] der Hausaufgabe das [[Subversion|SVN]]-Repository ihrer Gruppe: {{:Abgabe/Hausaufgabe}}
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]].


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

Version vom 22. Oktober 2023, 13:43 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 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. Falls nicht, legen Sie den entsprechenden 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 es dauern wird das 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.

Akzeptieren Sie so alle Tasks die sie in den vorhergehenden Aufgaben erstellt haben. Akzeptieren Sie auch das Issue 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 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).
  • 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 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.
    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.

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.

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 die den letzten Issue im Sprintbacklog schließen) fällt Ihnen die Aufgabe zu, den Sprit für Ihre Gruppe abzuschießen (vgl. Sprint Abschliß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 master nach release übertragen werden kann. Gehen Sie wie folgt vor:
    • Klicken Sie in Gitea auf den Reiter Code -> Branch: master.
    • Drücken Sie auf den Button Neuer Pull-Request.
    • 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. Ihnen werden daraufhin alle Änderungen die mit dem Pull-Request vom master auf den release -Branch übertragen werden sollen angezeigt.
    • Drücken Sie auf Pullrequest Erstellen.
    • Gitea wird feststellen, dass es zwischen master 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.