Hausaufgabe: Unterschied zwischen den Versionen
Zeile 2: | Zeile 2: | ||
== Einleitung == | == Einleitung == | ||
Zu Beginn des Softwarepraktikums soll sich jeder Teilnehmer mit [[CSharp|C#]], [[MonoGame | Zu Beginn des Softwarepraktikums soll sich jeder Teilnehmer mit [[CSharp|C#]], [[MonoGame]] und den dazugehörigen Werkzeugen vertraut machen. Ein guter Startpunkt dafür ist die [[Tutorials|Tutorial-Seite]]. Außerdem soll der erste Anstoß zum selbständigen Recherchieren der benötigten Quellen für das Softwarepraktikum gegeben werden. Aus diesem Grund müssen '''von jedem Teilnehmer''' in der ersten Woche (siehe [[Roadmap]]) verbindliche Hausaufgaben gemacht werden. Diese bestehen aus 5 Aufgaben. | ||
* '''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.''' |
Version vom 5. April 2017, 11:37 Uhr
Einleitung
Zu Beginn des Softwarepraktikums soll sich jeder Teilnehmer mit C#, MonoGame und den dazugehörigen Werkzeugen vertraut machen. Ein guter Startpunkt dafür ist die Tutorial-Seite. Außerdem soll der erste Anstoß zum selbständigen Recherchieren der benötigten Quellen für das Softwarepraktikum gegeben werden. Aus diesem Grund müssen von jedem Teilnehmer in der ersten Woche (siehe Roadmap) verbindliche Hausaufgaben gemacht werden. Diese bestehen aus 5 Aufgaben.
- Lesen Sie den Text jeder Aufgabe vollständig durch, bevor Sie mit der Bearbeitung beginnen.
- Bearbeiten Sie die Aufgaben der Reihe nach.
- Beginnen Sie erst, wenn die Gruppeneinteilung online ist.
Aufgabe 1: Setup
Setzen Sie eine Arbeitsumgebung auf und testen Sie die Zugänge zu den verschiedenen Diensten. Falls Sie mit einem Mac arbeiten, beachten Sie die Informationen zur Entwicklung mit einem Mac.
Arbeitsumgebung
Sie finden die relevanten Download-Links unter Downloads
- .NET 4.6.1
- Visual Studio 2015 (Visual Studio 2017 wird aktuell noch nicht vom MonoGame Installer unterstütz)
- MonoGame 3.6
- Resharper (beachten Sie die Hinweise zur Konfiguration)
- Ein SVN-Client ihrer Wahl
Dienste
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. WWW-Passwort einrichten.
Die folgenden Dienste sollten Sie getestet haben:
- Zugang zu ihrem SVN-Repository
- Zugang zum Trac ihrer Gruppe
- Die Gruppenmailingliste
Die Adressen dieser Dienste finden sich auf der Gruppeneinteilungsseite.
Aufgabe 2: Trac
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
![](/images/thumb/f/fc/Trac_product_backlog.png/600px-Trac_product_backlog.png)
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):
- "Importance", Order=0
- "Milestone", Order=3
- "Sprint", Order=2
- "Story Points", Order=1
- 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:
- "Importance", Order=3
- "Owner", Order=0
- "Priority", Order=4
- "Remaining Time", Order=1
- "Spent Time", Order=2
- "Status", Order=5
- Geben Sie bei "Remaining Time" als Alternative "Total Remaining Time" an.
- Geben Sie bei "Spent Time" als Alternative "Total Spent Time" an.
- Stellen Sie sicher, dass sowohl bei "Remaining Time" als auch bei "Spent Time" das Kästchen "Show?" angehakt ist.
Milestone für Hausaufgabe anlegen
![](/images/thumb/0/08/Trac_new_milestone.png/600px-Trac_new_milestone.png)
Prüfen Sie, ob in Ihrem Trac bereits ein Milestone für die Hausaufgabe angelegt ist:
- Klicken Sie in der oberen Navigationsleiste auf "Admin".
- Klicken Sie in der linken Leiste auf "Milestones".
- Falls noch kein Milestone für die Hausaufgabe angelegt ist, legen Sie diesen an. Verwenden Sie das Datum der Abgabe (siehe Roadmap, Datumsformat beachten!).
Sprint für Hausaufgabe anlegen
![](/images/thumb/9/9d/Trac_new_sprint.png/600px-Trac_new_sprint.png)
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:
- 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.
Requirement für die Hausaufgabe anlegen
![](/images/thumb/5/5f/Trac_new_requirement.png/600px-Trac_new_requirement.png)
Prüfen Sie, ob in Ihrem Trac bereits das Requirement "Hausaufgaben 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 "Hausaufgaben machen", weisen Sie dem Requirement den Milestone "Hausaufgabe" zu und speichern Sie es ab.
User Story anlegen
![](/images/thumb/f/ff/Trac_reference_user_story.png/600px-Trac_reference_user_story.png)
![](/images/thumb/1/1b/Trac_new_user_story.png/600px-Trac_new_user_story.png)
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.
Tasks für Aufgabe 3 erstellen
![](/images/thumb/d/dc/Trac_user_story_new_task.png/600px-Trac_user_story_new_task.png)
![](/images/thumb/4/43/Trac_new_task.png/600px-Trac_new_task.png)
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.
Tasks für Aufgabe 4 erstellen
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:
- "'Clean Code Development' Artikel lesen"
- "'Dokumentation' Artikel lesen"
- "'Usability-Prinzipien beim Spieldesign' Artikel lesen"
- "'Trac und SVN' Artikel lesen"
Tasks 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 oder MonoGame Programm schreiben, damit er früh merkt, ob irgendetwas nicht funktioniert".
Überprüfen der Tasks und Custom Query erstellen
![](/images/thumb/9/9a/Trac_view_tickets_custom_query_marked.png/600px-Trac_view_tickets_custom_query_marked.png)
![](/images/thumb/2/25/Trac_create_custom_query.png/600px-Trac_create_custom_query.png)
![](/images/thumb/6/6a/Trac_final_custom_query.png/600px-Trac_final_custom_query.png)
Ü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 Tasks mit ihren Attributen filtert. Um eine geeignete Ansicht für Ihre Tickets oder Tasks 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 Abbildung 10 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 TracReports und TracQuery besuchen.
Tasks akzeptieren
![](/images/thumb/a/a0/Trac_resolve_ticket.png/600px-Trac_resolve_ticket.png)
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".
Aussehen
![](/images/thumb/6/6c/Trac_ticket_view.png/600px-Trac_ticket_view.png)
Wenn Sie alle Schritte durchgeführt haben, sollte das Sprint Backlog für den Sprint "Sprint Hausaufgabe" in etwa so aussehen, wie in Abbildung 13.
ACHTUNG: Es kann vorkommen, dass Änderungen, die man an Trac Tasks vornimmt, nicht übernommen werden. Das passiert, weil Trac den Typ des Ticket auf "defect" setzt. Damit die Änderungen beim Bearbeiten übernommen werden, muss der Typ des Tasks wieder auf "Task" gesetzt werden.
Aufgabe 3: Scrum und Trac 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 des Tracs vertraut
- 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).
- Schauen Sie außerdem die verschiedenen Ansichten, die Sie über die Navigationsleiste am oberen Rand erreichen (Home, Timeline, Roadmap, ...) an.
- 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.
- Beachten Sie außerdem, dass optische Änderungen am Trac (z.B. Ändern der Spaltensortierung und -reihenfolge oder das Ausblenden der linken Seitenleiste über Klick auf den Trenner) für alle Gruppenmitglieder und nicht nur für Sie sichtbar sind.
- 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 den Kommentar des jeweiligen Tickets.
Aufgabe 4: Texte lesen
Lesen Sie sich die folgenden Artikel durch:
Sollten Sie Fragen zu diesen Artikeln haben, wenden Sie sich an Ihren Tutor.
Tasks bearbeiten
Aktualisieren Sie die Ihrer Einschätzung nach noch verbleibende Zeit und die bereits benötigte 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 Formalien).
Achtung: Geben Sie im Feld "Spent Time" jeweils immer die Gesamtsumme der verbrauchten Stunden an. Das heißt, keine Differenzen zu bereits früher eingetragenen Zeiten. Das bedeutet, die verbrauchte Zeit für ein Task kann pro Bearbeitungsiteration immer nur größer werden oder gleich groß bleiben, kann aber nie kleiner werden.
Tasks 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 Abbildung 12) die Option "resolve as fixed" und klicken Sie dann auf "Submit changes".
Alternativ können Sie auch die "Remaining Time" auf 0 setzen. In diesem Fall wird der Task ebenfalls geschlossen.
Geben Sie außerdem die Gesamtzeit, die Sie für die Bearbeitung des Tasks gebraucht haben, im Feld "Spent Time" an.
Achtung: Geben Sie im Feld "Spent Time" jeweils immer die Gesamtsumme der verbrauchten Stunden an. Das heißt, keine Differenzen zu bereits früher eingetragenen Zeiten.
Aufgabe 5: Programm schreiben
![](/images/thumb/8/80/Homework_final.jpg/300px-Homework_final.jpg)
Bevor Sie mit dieser Aufgabe beginnen, sollten Sie Ihren entsprechenden Task akzeptieren.
Erstellen Sie ein MonoGame Programm, welches die folgenden Eigenschaften erfüllt:
Funktionale Anforderungen
![](/images/thumb/5/55/Unilogo.png/300px-Unilogo.png)
![](/images/thumb/2/26/Background.png/300px-Background.png)
- 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 als Richtwert 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 oder XNA 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:
- 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.
- Der Ton darf pro Klick nur einmal abgespielt werden.
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).
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 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 Trac und SVN.
Hinweise
- Falls Sie Probleme beim Starten der Anwendung haben, schauen Sie zuerst in die FAQ. Ein oft auftretendes Problem ist z.B. die Fehlermeldung "No suitable graphics card found".