Hausaufgabe: Unterschied zwischen den Versionen
Zeile 106: | Zeile 106: | ||
* Recherchieren Sie, was [[Scrum]] ist und wie Scrum funktioniert. | * Recherchieren Sie, was [[Scrum]] ist und wie Scrum funktioniert. | ||
* Lesen Sie außerdem den Wikipedia-Artikel zu [http://de.wikipedia.org/wiki/User_Story User Stories]. | * Lesen Sie außerdem den Wikipedia-Artikel zu [http://de.wikipedia.org/wiki/User_Story User Stories]. | ||
* Machen Sie sich mit den anderen Funktionen von Gitea vertraut und lesen Sie den Artikel [[Scrum und Gitea]] | * Machen Sie sich mit den anderen Funktionen von [[Gitea]] vertraut und lesen Sie den Artikel [[Scrum und Gitea]] | ||
* Beschreiben Sie in einem Kommentar zu Task ''Student <username> soll 'Scrum' verstehen'' kurz und prägnant wie Scrum funktioniert, und wie Scrum im SoPra auf Gitea realisiert wird. | * Beschreiben Sie in einem Kommentar zu Task ''Student <username> soll 'Scrum' verstehen'' kurz und prägnant wie Scrum funktioniert, und wie Scrum im SoPra auf Gitea realisiert wird. | ||
Version vom 16. Oktober 2018, 10:33 Uhr
Einleitung
Zu Beginn des Softwarepraktikums soll sich jeder Teilnehmer mit C#, MonoGame und den dazugehörigen Werkzeugen vertraut machen. Ein guter Startpunkt dafür ist die Tutorial-Seite. Außerdem soll der erste Anstoß zum selbständigen Recherchieren der benötigten Quellen für das Softwarepraktikum gegeben werden. Aus diesem Grund müssen von jedem Teilnehmer in der ersten Woche (siehe Roadmap) verbindliche Hausaufgaben gemacht werden. Diese bestehen aus 5 Aufgaben.
- Lesen Sie den Text jeder Aufgabe vollständig durch, bevor Sie mit der Bearbeitung beginnen.
- Bearbeiten Sie die Aufgaben der Reihe nach.
- Beginnen sie nicht erst, wenn die Gruppeneinteilung online ist! (Aufgabe 1 lässt sich bereits ohne Gruppeneinteilung erledigen)
Aufgabe 1: Setup
Setzen Sie eine Arbeitsumgebung auf und testen Sie die Zugänge zu den verschiedenen Diensten. Falls Sie mit einem Mac arbeiten, beachten Sie die Informationen zur Entwicklung mit einem Mac.
Arbeitsumgebung
Sie finden die relevanten Download-Links unter Downloads.
- .NET 4.6.1
- Visual Studio 2015 Enterprise
- MonoGame 3.6
- Resharper (beachten Sie die Hinweise zur Konfiguration)
- Ein Git-Client ihrer Wahl
- Wenn Sie auf einem der Poolrechner entwickeln möchten, beachten Sie die Installationshinweise für Poolrechner auf der Downloads-Seite.
Dienste
Um auf die Dienste zugreifen zu können, brauchen Sie einen gültigen Poolaccount.
Die folgenden Dienste sollten Sie eingerichtet und getestet haben:
- Zugang zum Gitea ihrer Gruppe auf Sopra Git.
- Einrichten des Git repository.
- Die Gruppenmailingliste.
Aufgabe 2: Gitea
Bereiten Sie ihr Gitea auf den Hausaufgabensprint und die Aufgaben ihrer Gruppe vor. Gehen Sie dazu wie folgt vor.
Gitea vorbereiten
Um Gitea in Verbindung mit Scrum verwenden zu können, müssen vorher bestimmte Labels für die Items im Backlog eingerichtet werden.
- Klicken Sie auf
Issues -> Labels
. - Wenn noch keine Labels eingerichtet wurden, werden Sie gefragt ob eines der vorkonfigurierten Menge von Labels verwendet werden soll. Wählen Sie hier das vorkonfigurierte Set
Sopra
. - Prüfen sie ob Labels für Priorität und Zeitabschätzung vorhanden sind, wie auf dem Bild zu sehen (Details können variieren). Wenn keine Labels zur Zeitabschätzung und Prorisierung 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
Prüfen sie ob in Gitea ein Sprint für die Hausaufgabe angelegt wurde.
- Klicken Sie auf den Reiter
Issues -> Milestones
. - Falls kein Sprint (Milestone) für die Hausaufgabe angezeigt wird, legen Sie einen Milesstone mit dem Namen
Hausaufgabe
an.- Verwenden Sie das Datum für das Ende des Sprints die Abgabe auf der Roadmap.
Userstory für die Hausaufgabe anlegen
Prüfen Sie ob für die Hausaufgabe bereits alle Userstories existieren. Wenn nicht, legen Sie diese an.
- Klicken Sie auf den Reiter
Issues
. - Prüfen Sie ob bereits ein Item
Alle Studenten in der Gruppe sollen Git und Gitea bedienen können, damit sie in Zukunft produktiver arbeiten.
existiert und mituser story
getaggt ist.- Wennicht legen Sie eine entsprechende Userstory an indem Sie den weiteren Punkte folgen.
- Klicken Sie
Neuer Issue
. - Tragen sie als Titel
Alle Studenten in der Gruppe sollen Git und Gitea bedienen können, damit sie in Zukunft produktiver arbeiten.
ein. - Weisen Sie die Label
user story
undpriority: high
zu, indem Sie auf das Zahnrad neben dem Schrifzug Label drücken und die entsprechenden Label auswählen. - Weisen Sie den Sprint (Meilenstein) Hausaufgabe zu.
- Dürcken sie auf
Issue Erstellen
. - Fügen Sie außerdem noch die beiden User Stories:
Alle Studenten in der Gruppe sollen das soll die Texte verstehen, damit sie besser Spiele entwickeln können.
undAlle Studenten in der Gruppe sollen soll ein MonoGame Programm schreiben um zu prüfen ob alles funktioniert.
auf dieselbe Art hinzu.
Tasks für Aufgabe 3 erstellen
Legen Sie nun einen Task Student <username> soll 'Scrum' verstehen
an.
- Klicken Sie
Issues -> Neuer Issue
. - Tragen Sie als Titel
Student <username> soll Scrum verstehen
ein. - Weisen Sie das Label priority: high und den Sprint (Meilenstein) Hausaufgabe zu.
- Weisen sie der User Story
Alle Studenten in der Gruppe sollen Git und Gitea bedienen können, damit sie in Zukunft produktiver arbeiten.
den Task als Abhängikeit zu. - Speichern Sie den Task ab, indem sie
Issue Erstellen
dürcken.
Tasks für Aufgabe 4 erstellen
Erstellen Sie auf dieselbe Weise die Tasks für Aufgabe 4:
Student <username> soll den 'Clean Code Development' Artikel lesen
... 'Dokumentation' Artikel lesen
... 'Usability-Prinzipien beim Spieldesign' Artikel lesen
... 'Git' Artikel lesen
- Weisen sie der User Story
Alle Studenten in der Gruppe sollen das soll die Texte verstehen, damit sie besser Spiele entwickeln können.
alle vier Tasks als abhängigkeit zu.
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, und weisen sie ihn der entsprechenden Userstory als Abhängigkeit zu.
Tasks akzeptieren
Bevor Sie mit den Aufgaben beginnen, sollten Sie die entsprechenden Tasks akzeptieren.
- Wählen Sie einen ihrer Taks aus dem Sprintbacklog (
Issues -> Milestones -> Hasaufgabe
) aus, indem Sie auf den Titel des Tasks klicken. - Weisen Sie das Lebel
estimate: 1
zu, um eine Zeitabschätzung zu geben, wie lange Sie für diese Aufgabe brauchen werden. Wenn sie vermuten, Sie benötigen mehr als eine Stude, wählen Sie einen entsprechend höheren Wert aus. - Weisen Sie sich dem Taks zu, indem Sie auf das Zahnrad neben dem Schriftzug Zuständig klicken, und ihren Benutzernamen auswählen.
Die Änderungen werden sofort gespeichert (es ist nicht nötig einen Kommentar zu schreiben). Aktzeptieren Sie so alle Tasks die sie in den vorhergehenden Aufgaben erstellt haben.
Überprüfen der Tasks
Bevor Sie mit der Arbeit zu beginnen, prüfen Sie noch einmal ob alle Tasks und Userstories im Sprintbacklog vorhanden sind.
- Klicken sie auf den Reiter
Issues -> Meilensteine -> Hausaufgabe
- Schränken Sie die Anzeige auf Userstories ein, indem sie in dem Sie den Button
Label ⯆
drücken und das Labeluser story
auswählen. Prüfen Sie ob alle Userstories vorhanden sind. - Schränken Sie die Anzeige auf ihnen Zugewiesene Tasks ein, indem sie unter
Label ⯆
alle Labels
wählen, und unterZuständig ⯆
ihren Usernamen. Prüfen Sie ob alle Tasks 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
- Beschreiben Sie in einem Kommentar zu Task Student <username> soll 'Scrum' verstehen kurz und prägnant wie Scrum funktioniert, und wie Scrum im SoPra auf Gitea realisiert wird.
Aufgabe 4: Texte lesen
Lesen Sie sich die folgenden Artikel durch, und kommentieren Sie ihr entsprechendes Ticket:
- Clean Code Development und beschreiben sie ein Cleancodeprinzip (dass sonst noch keiner aus Ihrer Gruppe gewählt hat) kurz und prägnant.
- Dokumentation
- Usability-Prinzipien beim Spieldesign und beschreiben Sie eine Verletzung der Usability-Prinzipien in einem Spiel (oder anderer Software).
- Git clonen Sie ihr Gruppenrepository. Verändern sie etwas in der Readme.md. Schließen Sie ihr Ticket für diese Aufgabe über die Commitmessage, und pushen sie den Commit.
Tasks bearbeiten
Bearbeiten sie die Tasks und tragen sie entsprechende Zeiten in den Tickets ein. Besonders bei Programmieraufgaben ist dies sinnvoll, da so eine Historie der Bearbeitung und der verbrauchten Zeit erstellt wird. Dies hilft nicht nur Ihnen bei der Planung weiterer Aufgaben und Abschätzung der dafür benötigten Zeit, sondern dient auch als Nachweis für Ihre kontinuierliche Mitarbeit (siehe Formalien).
Achtung: Geben Sie acht beim Zeit eintragen, da Sie die Summe nachträglich nur nach oben verändern können.
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 und drücken Sie auf den Button Schießen.
Vergessen Sie nicht die Zeit die Sie für den Task benötigt haben, einzutragen (falls Sie das noch nicht gemacht haben).
Aufgabe 5: Programm schreiben
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
- 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:
- Verwenden der mGraphics Variable bei der Erstellung eines Sprite-Batches. Es ist möglich, den SpriteBatch, auf dem das Uni-Logo gezeichnet wird, mitzu initialisieren.
someSpriteBatch = new SpriteBatch(mGraphics.GraphicsDevice);
- Hinzufügen einer ReSharper-Ausnahme für die Variable mGraphics. Eine Ausnahme für diese Variable ist die einzige Ausnahme, die wir akzeptieren.
Ressourcen
Damit das Erstellen von Grafiken ignoriert werden kann, gibt es hier die beiden Beispieldateien aus der Einführungsveranstaltung:
Als Audiodateien können beliebige, kurze, Dateien verwendet werden. Die beiden aus der Einführungsveranstaltung bekannten Waves gibt es hier:
Abgabe
Bitte verwenden Sie zur finalen Abgabe der Hausaufgabe das Git-Repository ihrer Gruppe: Abgabe/Hausaufgabe
Abgabe Finalisieren
Wenn Sie in Ihrer Gruppe die Aufgaben als Leztes abschließen (d.h. sie den lezten offenen Task (nicht Userstory) im Sprint schießen, müssen Sie noch folgende Schritte ausführen.
- Schießen Sie alle Userstories für die die entsprechenden Tasks abgeschlossen wurden (da alle Tasks geschlossen sind, sollten das alle Userstories sein).
- Erstellen sie einen Pullrequest, sodass der aktuelle Stand von dev nach master gemerged wird. Gehen Sie wie folgend vor:
- Klicken Sie in Gitea auf den Reiter Code.
- Wählen Sie im Branch-dropdown den Branch dev.
- Drücken Sie auf den Grünen Button neben dem Branch-dropdown.
- Prüfen Sie im folgenden Dialog, dass als Ziel master und als pullen von dev gewählt sind. Geben Sie dem Pullrequest den Titel Hausaufgabe.
- Drücken Sie auf Pullrequest Erstellen.
- Drücken Sie im Folgenden zwei mal auf Pull-Request Zusammenführen.
Die Änderungen die Sie und ihre Gruppe Während des Hausaufgabensprints gemacht haben, wurden nun in den Masterbranch übertrangen.
Hinweise
- Falls Sie Probleme beim Starten der Anwendung haben, schauen Sie zuerst in die FAQ. Ein oft auftretendes Problem ist z.B. die Fehlermeldung "No suitable graphics card found".
- Möglicherweise wird bei Ihnen kein Sound abgespielt, obwohl dies Ihrer Einschätzung nach eigentlich der Fall sein sollte. Prüfen Sie in diesem Fall, ob die Installation der DirectX Runtime das Problem behebt.