Kurs-Aktivitätsindikator

Aus THM-Wiki
Wechseln zu: Navigation, Suche

Dieser Artikel beschreibt die Umsetzung der Hausübung "Kurs-Aktivitätsindikator" im Kurs MSP-P an der FH Gießen-Friedberg im WS 2006/2007. Siehe auch: http://estudy.mni.fh-giessen.de/forum/showtopic.php?threadid=2303&time=1173644796

Aufgabenstellung

Bisher gab es unter dem Menüpunkt "Foyer -> Statistik -> Kurse" nur eine statische Tabelle zu den Kursen. Diese sollte um einige Features erweitert werden:

  • Es sollte ein Kurs-Aktivitätsindikator angezeigt werden, analog zum Mitglieder-Aktivitätsindikator.
  • Die Tabelle sollte geeignet sortierbar werden (Sortierkriterium durch Klick auf Spaltenkopf festlegbar).
  • Es sollte die Möglichkeit geben, die Anzeige der Kurse einzuschränken: Nur aktive Kurse (Mitgliederaktivitäten noch möglich), nur offene Kurse (Anmeldung noch möglich) oder nur archivierte Kurse (alle Daten schreibgeschützt).

Vorgehensweise

Als Vorgehensmodell kam Extreme Programming zum Einsatz, wobei nur eine Person am Projekt beteiligt war, daher konnten natürlich keine Praktiken wie Pairwise Programming eingesetzt werden.

Die Software wurde jedoch in mehreren Iterationen entwickelt, nach deren Abschluss jeweils lauffähiger Code vorhanden war, der mehr Möglichkeiten bot, als vorher bestanden. Dieser wurde nach jeder Iteration vom Kunden getestet und hinsichtlich seiner Nützlichkeit beurteilt.

Iterationen

Iteration: Freie Sortierung der Tabelle

Der Aufbau der Tabelle sowie der Code, von dem die Tabelle erzeugt wird, waren dem Code in class.userstatistik.inc.php sehr ähnlich, daher übernahm ich die Sortierlogik größtenteils von dieser Klasse. Die Vorgehensweise ist nahe liegend: Das SQL-Query, das die entsprechenden Inhalte aus der Datenbank zieht, wird dynamisch generiert, wobei die "ORDER BY"-Klausel anhand der (GET- oder POST-)Parameter "orderBy" und "orderType" erzeugt wird. Die Spaltenköpfe sind hierbei Hyperlinks, die die besagten Parameter enthalten.

Iteration: Kurs-Aktivitätsindikator

Die Aktivität eines Kurses berechnet sich -wie vom Kunden gewünscht- aus dem arithmetischen Mittelwert der Aktivitätswerte aller Kursteilnehmer. Hierbei kommt allerdings nicht die Gewichtung zum Zuge, die für den jeweiligen Kurs festgelegt wurde, vielmehr wird die Gewichtung verwendet, die der Administrator für das Foyer festgelegt hat. Dies soll sicherstellen, dass nicht "Äpfel mit Birnen verglichen" werden.

Beim Neuberechnen der Aktivitätswerte muss daher folgender Ablauf durchgeführt werden:

  • Alle Kurse durchlaufen, jeweils die Liste der Kursteilnehmer entnehmen.
  • Pro Kursteilnehmer den Aktivitätswert dieser Person in diesem Kurs nach der Foyer-Gewichtung berechnen.
  • Diese Aktivitätswerte mitteln, wobei zum Einen alle Personen berücksichtigt werden, zum Zweiten nur die Studierenden und zum Dritten die Professoren und Tutoren. Es ergeben sich also drei Mittelwerte pro Kurs.
  • Diese drei Mittelwerte werden jeweils zu einer Ganzzahl gerundet, da dies die weitere Verarbeitung erleichtert, und diese Genauigkeit problemlos ausreicht.
  • Die drei errechneten Werte werden in der DB-Tabelle courses gespeichert.

Analog zu den Aktivitätswerten der Benutzer werden die Aktivitätswerte der Kurse in graphischer Form (durch ein Icon) in der Tabelle dargestellt, die errechneten Werte werden als Tooltip für das Icon hinterlegt. Dieses Tooltip enthält folgende Werte: 1: Indikatorpunkte für diesen Kurs, 2: Indikatorpunkte des aktivsten Kurses, 3: Relation (Wert 1 / Wert 2 * 100%).

Iteration: Berücksichtigen der Personengruppen Studenten oder Professoren/Tutoren

Wie schon erwähnt, werden drei Aktivitätswerte pro Kurs errechnet, jedoch wird immer nur einer dieser Werte angezeigt. Durch entsprechende Links kann der Benutzer auswählen, welchen Aktivitätswert er betrachten möchte, was technisch sehr einfach zu realisieren war, es wird einfach auf die entsprechende Spalte der Tabelle zugegriffen, und auch anhand dieser sortiert.

Die geschilderte Situation stellt hierbei das Endergebnis dar, zunächst war nur die erste Datenbankspalte vorhanden, da der Kundenwunsch nach getrennten Personengruppen erst nachträglich geäußert wurde. Außerdem sei an dieser Stelle angemerkt, dass es unbedingt notwendig ist, als Typ der Spalten einen numerischen Typ zu wählen (hier int(10)), da sonst die gewünschte Sortierung falsch erfolgen würde (Stringvergleich statt numerischem Vergleich).

Iteration: Selektion nach Status des Kurses (aktiv, offen, archiviert)

Die Selektion nach Status wirkt sich nicht auf die errechneten Indikatorwerte aus, hierbei wird nur festgelegt, welche Kurse in der Tabelle erwähnt werden sollen. Da jedoch der Kurs mit dem höchsten absoluten Indikatorwert mit "100%" gleichgesetzt wird, wirkt sich die Selektion auf die errechneten Prozentwerte aus.

Test

Gemäß dem XP-Vorgehensmodell wurde die Kundenakzeptanz nach jeder Iteration getestet, sowie das weitere Vorgehen geplant. Auch ein Bugtracker (Mantis, siehe https://mantis.estudy-portal.de/) wurde eingesetzt.

Betroffene Dateien und Datenbanktabellen

Die Änderungen beschränkten sich im Wesentlichen auf die Datei class.coursestatistik.inc.php und die Tabelle courses. In der Datei class.userstatistik.inc.php musste lediglich die Methode evaluateData erweitert werden. Diese Methode hat weitere Parameter bekommen, die jedoch optional sind. Wenn diese optionalen Parameter nicht angegeben werden, wird das alte Verhalten erzielt. Diese Methode wird benutzt, um für einen bestimmten Benutzer in einem bestimmten Kurs den Aktivitätswert zu errechnen. Die Methode wird hierbei aus der Klasse Userstatistik heraus aufgerufen (in der sie ja auch enthalten ist), aber auch aus der Klasse CoursesStatistik heraus. Man kann darüber streiten, ob dies eine saubere Struktur darstellt, aber die einzige Alternative, die mir in den Sinn kam, wäre wesentlich unschöner gewesen: duplizierter Code, mit den bekannten Nachteilen.

Die Änderungen innerhalb der Datei class.coursestatistik.inc.php sind an dieser Stelle kaum aufzuzählen, da sie zu zahlreich sind, die enthaltene Klasse wurde stark erweitert und verändert. An der Datenbank jedoch mussten nur geringe Änderungen vorgenommen werden, da schon eine Spalte indikator vorhanden war, die allerdings jetzt den Typ int(10) bekommen hat (vorher war die Spalte ein varchar, was bei einer numerischen Sortierung -wie gesagt- falsche Ergebnisse liefert). Neu hinzugekommen sind die Spalten indikator_ta und indikator_stud, die genau wie indikator vom Typ int(10) sind.

Das Kürzel "ta" steht hierbei für "teachers and assistants" (Professoren und Tutoren), "stud" für "students".

Die im Text vorkommende maskuline Personenform steht global für feminin respektive maskulin.

--Viehmann-RVi 18:21, 18. Mär. 2007 (CET)