MSP: HÜ-Teams

Aus THM-Wiki
Wechseln zu: Navigation, Suche

Diese Wiki-Seite dient zur Dokumentation der Hausübung "Teams", die im Rahmen des Moduls "Methoden des Softwareentwicklungsprozesses (MSP)" an der Fachhochschule Gießen-Friedberg im Wintersemester 08/09 bearbeitet wird. Verantwortlich für die Hausübung sind Julian Hochstetter und Mark Schlüter


Einleitung

Das Modul „Teams“ bietet den Kursleitern die Möglichkeit Teams in den Kursen zu bilden, anzulegen und zu verwalten. Dabei können die Kursleiter neben der Anzahl der möglichen Teammitglieder auch die verfügbare Zeit zur Teamauswahl bzw. Teambildung bestimmen. Darüber hinaus können den Teams und damit jedem Teammitglied eine entsprechende Anzahl Creditpoints zur Erfüllung der Teamaufgabe zuweisen werden.

Studenten bzw. Teilnehmer haben die Möglichkeit innerhalb der vorgegebenen Fristen die Mitgliedschaft in einem Team zu wählen. Nach Ablauf der Teambildungsfrist ist ein Wechsel eines Teams nur über den Kursleiter möglich.

Ferner besteht über das Modul „Teams“ die Möglichkeit die dem Team zugeordneten Creditpoints einem Planspiel zur Budgetberechung zuzuweisen.

Bisherige Autoren des eStudy Moduls Teams

  • Clemens Weiß
  • Markus Keim
  • Christian Thomas Weber

Nicht-funktionale Anforderungen an das Modul

Im Rahmen der MSP-Hausübung für das WS09/10 soll ein einem ersten Schritt das eStudy-Modul "Teams" unter Berücksichtigung der im Folgenden aufgeführten Kriterien refaktorisiert werden. Dabei sind die jeweiligen Fragestellungen zu beachten.

  • Benutzbarkeit: Gibt es für die Bedienung dieses Moduls in der Frontendgestaltung Verbesserungen bzw. Vereinfachungen?
  • Performance: Sind Optimierungsmöglichkeiten im Code vorhanden? Lassen sich z.B. Datenbankabfragen effizienter gestalten?
  • Fehlertoleranz: Lässt sich das Abfangen von Fehlern sowie die Ausgabe von Fehlermeldungen optimieren?
  • Verfügbarkeit: Welche Ausfallzeiten hat das Modul? Liegt eine Verfügbarkeit von 99,9% bereits vor?
  • Sicherheit (BSI): Ist die Sicherheit der Daten gerade bei den Datenbankzugriffen gewährleistet?
  • Datenschutz: Wurde das geltende Datenschutzrecht berücksichtigt, werden Daten widerrechtlich und ohne Wissen der Benutzer gespeichert?
  • Barrierefreiheit (WAI): Steht das Modul auch Menschen mit Einschränkungen in vollen Umfang zur Verfügung?
  • Internationalisierung: Liegen bereits Sprachmudule mit Übersetzungen vor bzw. sind die vorhandenen Ausgaben auf Rechtschreibung geprüft?
  • Benutzerdokumentation: Ist eine Beschreibung der Funktionalität in Form einer Dokumentation für die Benutzer (z.B. Hilfetexte zur Bedienung des Moduls) existent?
  • WIKI: Liegt eine aussagekräftifge Dokumentation des Moduls im Wiki vor und ist diese auf einem aktuellen Stand?

Reverse Engineering

Datenbank Schema

Diagramm des Datenbank Schemas

Das folgende Diagramm zeigt das Datenbank Schema des eStudy Moduls Teams. Diese Grafik wurde mit Hilfe der MySQL Workbench Tools erstellt.

Des weiteren wurde mit Hilfe von SchemaSpy eine Dokumentation über das Schema der verwendeten Tabellen erstellt. Diese ist hier zu finden.

  • In Zukunft team_id über Fremdschlüssel???
  • Es sind einige Datenbankoptimierungen im Code möglich!
  • Tabelle team_artefacts wird von fremden Klassen wie z.B. Ressourcen oder Forum genutzt, um Daten wie z.B. Anhänge einem Team zuordnen zu können.


Klassen-Diagramm

Klassendiagramm des eStudy Moduls Teams

Das folgende Diagramm zeigt alle beteiligten Klassen des eStudy Moduls Teams. Die eigenen Klassen sind grün hinterlegt. Die folgenden Diagramme wurde mit Enterprise Architekt mittels Reverse Engineering erstellt.


Klasse CreditPoints

Klasse zum Verteilen von CreditPoints an Team-Mitglieder.

Klasse CrpToPlanspiel

Diese Klasse bietet die Funktionalität Creditpoints, die in einem Team verbraucht bzw. diesem zugeordnet wurden, einem Planspiel zu zuordnen um dort als "Projekt"-Budget abgerechnet zu werden.

Klasse Team

Beinhaltet die Funktionalität zum Anlegen und Verwalten von Teams.

Klasse TeamList

Über diese Klasse lassen sich die Teams zu den jeweiligen Kursen verwalten (z.B. Auflistung aller Teams je Kurs).

Klasse TeamArtefacts

Es können Ressourcen, Forenbeiträge etc einem Team zugeordnet werden.

Diese Klasse bietet die Möglichkeit, diese Zuordnungen zu verwalten.

Klasse TeamsAutomation

Diese Klasse stellt die Funktionalität einer Automation der Teamverwaltung bereit, die sich auf das Löschen von Teams und die Auflösung der Beziehungen zwischen Teams und Usern beschränkt.

Klasse UserTeamManagement

Stellt die Funktionalität zur Verwaltung der Beziehungen zwischen Teams und Teilnehmern zur Verfügung.

UseCase-Diagramm

Use-Case-Diagramm des Moduls Temas

Das Use-Case-Diagramm für das Modul "Teams" wurde mit der Testversion des Enterprise Architect erstellt.

  • Admin
    • Moduleinstellungen verwalten: Diese Moduleinstellungen umfassen die Bereitstellung des eStudy Moduls Team für Dozenten, dass diese in Ihren Kursen die Funktionalität dieses Moduls verwenden können. Mögliche Features des Modul Teams sind:
      • Teams: Das Anzeigen von Teams mit den evtl. zugeteilten CreditPoints
      • Teamverwaltung: Anlegen und löschen von Teams, festlegen des Ablaufdatums für den Beitritt zu einem Team im Kurs.
      • Teams zuordnen: Manuelles zuordnen von Kursteilnehmern zu einem zuvor angelegtem Team.
      • Creditpoints: Die Möglichkeit, in einem Team CreditPoints zu verwalten.
  • Dozent und Admin (ggf. Tutor)
    • Teams anlegen: Dozenten können eine beliebige Anzahl an Teams anlegen. Jedem Team kann neben einem Team-Namen eine maximale Teilnehmeranzahl, ein Team-Logo und ein Team-Style zugewiesen werden.
    • Teams löschen: Bereits angelegte Teams kann der Kursdozent löschen.
    • Team Zuordnung verwalten: Die Team-Zuordung bedeutet die Zugehörigkeit jedes Kursmitgliedes zu einem Team. Jeder Kursteilnehmer kann nur maximal einem Team angehören. Nachdem die Anmeldefrist für die Wahl eines Teams abgelaufen ist, kann nur der Kursdozent und ggf. der Tutor die Teambelegung ändern.
    • Auswahlfrist setzen: Dies ist ein Datumsfeld, das die Anmeldefrist festlegt. Ist diese Abgelaufen, können die Kursteilnehmer keinem Team mehr beitreten bzw wechseln.
    • CreditPoints vergeben: Wenn diese Funktionalität über die Moduleinstellungen aktiviert wurde, kann der Kursleiter kann für jedes Team CreditPoints vergeben. Diese werden auf die Teammitgliedern gleichmäßig aufgeteilt.
    • CreditPoints in Planspiel übernehmen: Die von den Teammitgliedern bereits erreichen bzw erarbeiteten CreditPoints können in ein Planspiel übernommen werden.
  • Akteure (Student, Alumnus, Schüler, Gast)
    • Team wählen: Benutzer aus dem Kurs können bestehenden Teams beitreten, falls diese noch freie Plätze bieten. Ist die Auswahlfrist abgelaufen, müssen Sie den Wunsch, das Team zu wechseln dem Kursleiter mitteilen, nur dieser kann nach Ablauf der Frist die Zugehörigkeit von Kursteilnehmern zu einem Team ändern.
    • Team wechseln: Vor Ablauf der Auswahlfrist, können Benutzer beliebig oft das Team wechseln, falls im neuen Team ausreichen Kapazität vorhanden ist.
  • Akteur (Sekretariat)
    • Teamauswahl ansehen: Benutzer in der Rolle des "Sekretariat" bekommen die aktuellen Teams (Teamauswahl-Liste) inkl. der entsprechenden Teammitglieder angezeigt. Dieser Usecase findet keine gesonderte Betrachtung im Use-Case-Diagramm, da die Funktionalität der Teamauflistung bereits über die oben aufgeführten Akteure über die Teamauswahl abgebildet wird.


Doxygen Dokumentation

Die von Doxygen erstellte Dokumentation ist hier zu finden.

Software Metriken Vorher

Dieses Ergebnis ist nicht zufriedenstellend, das es bis jetzt keine Tests im Modul Teams gab. Daraus resultieren diese sehr schlechten Ergebnisse von ungefähr 4% Code-Abdeckung.
Eine Aufgabe unseres Teams wird es ein, eine 100%ige Abdeckung des Codes durch Testfälle zu erreichen.
Auch hier sind wie bei der Code Abdeckung durch Testfälle sehr schlechte Ergebnisse vorhanden.
In dem PHPUnit Bericht sind außerdem sehr viele hohe C.R.A.P.- und NPath Werte zu finden. Auch hier bemüht sich das HÜ Team, diese Werte zu verbessern.
  • Datenbank Queries



  • CodeSniffer Ergebnis:
Das Ergebnis von PHPCodeSniffer ist hier zu finden.

Software Metriken Nachher

  • Code Coverage
  • PHPUnit Metrics
  • PHPMD
  • CodeSniffer


Bad Smells

  • Codeduplizierung - Gleiche Codestruktur an mehreren Stellen oder der gleiche Ausdruck in mehreren Methoden.
  • Große, komplexe und lange Methoden - Lange Methoden sind fehlerträchtig und schwierig zu warten.
  • Grosse Klassen - Die Grösse bezieht sich sowohl auf die Größe der öffentlichen Schnittstelle als auch auf deren Implementierung. Umfangreiche Schnittstellen mit vielen Methoden erschweren die korrekte semantisch Verwendung der Klassen.
  • Großteils PHP4 Code - Umstellung auf PHP5
  • Schlecht Code Formatierung mit Leerzeichen als Einrückung, bzw keine erkennbare Formatierung - Erschwert die Lesbarkeit und Wartbarkeit.
  • HTML Ausgabe innerhalb Methoden von Klassen - Die Ausgaben lassen sich ggf. kapseln und aus den Methoden herausziehen.
  • Datenbankabfragen die sich zusammenfassen ließen, z.B. wenn Name, Vorname und weitere Werte aus der Datenbank erfragt werden
  • Unmögliche Methoden-Namen wie z.B. EintraegeSpeichern.
  • Keine Unit-Tests.
  • Schlecht dokumentierter Code.

Performance Tuning

SQL Anfragen

An insgesamt 5 Stellen im Modul Teams wurden folgende Abfragen ersetzt.

Vorher 3 SQL Abfragen:

$nachname = $db->get_var("SELECT Nachname FROM user WHERE ID='$userID'");
$vorname = $db->get_var("SELECT Vorname FROM user WHERE ID='$userID'");
$crp = $db->get_var("SELECT CrP FROM user_team WHERE (user_id='$userID') AND (team_id='$teamID')");

Nachher 1 Abfrage:

$data = $db->get_row("SELECT u.Nachname,u.Vorname,t.CrP FROM user u JOIN user_team t ON t.user_id=u.ID WHERE t.team_id='$teamID'");
if ($db->num_rows) {
	$user = array($data->Nachname, $data->Vorname);
	$crp = $data->CrP;
}


Aufgaben die sich durch das Modul-Walkthrough ergeben haben

Neue Features

1. Modul abhängige Anzeige von "Team-Style" und Team-Logo" (erledigt)
In der Admin-Ansicht sollen die Punkte "Team-Style" und "Team-Logo" unterdrückt werden, sofern das Modul "Planspiel" nicht aktiviert ist.
2. Modul abhängige Anzeige der Creditpoints (erledigt)
Die Anzeige der Creditpoints für Team und Teammitglieder sollen nur dargestellt werden, wenn Modul "Planspiel" aktiviert ist.
3. Anlegen der Team-Ordner in "Forum" und "Dateien" (erledigt)
Der Dozent/ Admin soll die Möglichkeit haben, Ordner je Teams im "Forum" und in "Dateien" generieren zu lassen. Die Team-Ordner für Dateien sollen zudem je eine Unterordner pro Teammitglied enthalten, die ggf. mit entsprechenden Lese-/Schreibrechten auszustatten sind.
4. Umwidmung von "Teams" (erledigt)
Im Rahmen der Internationalisierung sollte die Ausgabe von "Teams" je nach Widmung des Portals (eCollaboration, eCommunity oder eLearning) angepasst werden.
5. Datenauszug (erledigt)
Der Datenauszug soll die Mitgliedschaft in den Teams für jeden Kurs ausweisen.

Nacharbeiten im Rahmen der Abnahme

6. Teamtermine (erledigt)
Die Ausgabe "darf Teamtermine eintragen" in der Auflistung der Teammitglieder über den Menüpunkt Teams/Gruppe soll unterdrückt werden. In der Admin-Ansicht soll diese Funktionalität erhalten bleiben.
7. Wording der neuen Features (erledigt)
Das Wording der neu implementierten Features (Punkt 3.) muss überarbeitet bzw die Texte aussagekräftiger werden. Ordner im Forum sollen nur den Namen enthalten, ohne weitere Erklärungen.



Implementierungs-Beschreibung der neuen "Features" und Funktionen

1. Modul abhängige Anzeige von "Team-Style" und Team-Logo"
  • Erweiterung der Funktion listTeams in der Klasse teamlist (Unterdrückung der Ausgaben im Tabellenkopf) um die Abfrage, ob das Modul Planspiel für den aktuellen Kurs aktiviert ist (s.o.). Ebenso wurde die Funktion getFormRow der Klasse teams um diese Abfrage erweitert (Unterdrückung der Ausgabe in den Tabellenzeilen). Eine weitere Anpassung wurde in teams.php vorgenommen. Hier wird über die Funktion array_key_exists geprüft, ob die Indexe für Style und Logo gesetzt sind, ist dies nicht der Fall werden sie mit einem Leerzeichen befüllt.
2. Modul abhängige Anzeige der Creditpoints
  • Erweiterung der Funktion ListTeams in der Klasse UserTeamManagement um die Abfrage, ob das Modul Planspiel für den aktuellen Kurs aktiviert ist. Hierfür wird die Funktion isInstalled der Klasse Common/Utilities verwendet.
3. Anlegen der Team-Ordner in "Forum" und "Dateien"
  • Durch die Implementierung dieses Features kann der Dozent und ggf. der Tutor nun im selben Menüpunkt, wo auch Teams angelegt werden die Möglichkeit, unter meheren Optionen zu wählen. Bereits bestehende Ordner oder Boards im Forum werden nicht überschrieben oder gelöscht.
  • Die Klasse class.teamressources.inc.php wurde neu erstellt und enthält die Funktionen zur Umsetzung dieser Features. Klasse

MSP.HUE.Teams.Feature.Automatische.Generierung.Screenshot1.png


4. Umwidmung von "Teams"
  • Für die Widmung des Portals als eLearning-Plattform wurde "Teams" durch "Gruppe" ersetzt. Bei den Widmungen eCollaboration und eCommunity bleiben "Teams" erhalten.
  • Alle Ausgaben werden im Rahmen der Umwidmung über die Funktion getTranslate des Moduls common übersetzt. Somit ist eine zukünftige Internationalisierung der Ausgaben gesichert.
5. Datenauszug für das Modul "Teams"
  • Für den MSP:_Datenschutzkonformer_Datenauszug wurde die entsprechende [Klasse] implementiert.
  • Wenn ein Benutzer nun seinen Datenauszug anfordert, erhält er Informationen darüber, welchem Team er im jeweiligen Kurs angehörte.

MSP.HUE.Teams.Feature.Datenauszug.Screenshot1.png

6. Teamtermine
  • Erweiterung der Funktion ListTeams in der Klasse UserTeamManagement um die Abfrage nach der aufrufenden Funktion. Damit lässt sich die Ausgabe wie gewünscht in Abhängigkeit der Ansicht (normal/admin) unterdrücken. Die Abfrage auf die aufrufende Funktion wird mittels debug_backtrace() realisiert.

SVN - Änderungsdokumentation

Änderungen am Modul Teams vom Versionsstand r2791 zu Beginn der Refakturierungsarbeiten bis zum Abschluss mit dem Versionsstand r3507.

Link zum kompletten Diff.



Geänderte Dateien

Allgemein
Klassen


Unit Tests (alle neu)


Übersetzungen


Sonstige Dateien

Sonstige Dateien fremder Module wurden ebenfalls bearbeitet



Hochstetter-JHoda 10:49, 18. Jan. 2010 (CET)

Schlueter-MSc73 11:13, 18. Jan. 2010 (CET)