MSP:HÜ Aktuell

Aus THM-Wiki
Wechseln zu: Navigation, Suche

Aufgabe:

Das Estudy-Modul "Aktuell" und alle dazugehörigen Klassen und Funktionen sollen überarbeitet werden. Hierbei soll in einem ersten Schritt das Modul refaktorisiert werden.

Bei der Refaktorisierung des Moduls sollen folgende Aspekte berücksichtigt werden:

Benutzbarkeit: Kann man die Bedienung des Moduls für den Verwender vereinfachen?

Performance: Durch effizienteren Quelltext in kürzerer Zeit die gleiche Leistung im Modul erbringen.

Fehlertoleranz: Das Modul soll im Falle einer Fehleingabe besser reagieren, z. B. nicht durch eine Standard-PHP-Fehlermeldung sondern durch eine Flash-Message "Sie haben einen falschen Namen eingegeben."

Verfügbarkeit: Das Modul soll nach Möglichkeit wenig Systemausfälle haben und stets verfügbar sein, ein Leitwert hierbei ist 99%+ Verfügbarkeit.

Sicherheit: Die Daten die in der Datenbank gespeichert sind, sollen nicht durch Dritte außerhalb des im Programm vorgesehenen Maßes einsehbar sein.

Datenschutz: Es sollen keine Daten widerrechtlich und ohne die Zustimmung der Dateninhaber gespeichert werden. Hierbei soll stets geltendes Datenschutzrecht berücksichtigt werden.

Barrierrefreiheit: Die Software soll Menschen mit Einschränkungen jeder Art genauso einfach zugänglich sein wie anderen Personen.

Warbarkeit(optional): Der Quelltext soll im Idealfall einfach erweiterbar sein, gut strukturiert sowie dokumentiert.


Weiterführend

Nachdem das Modul refaktorisiert wurde, soll mit Prof. Quibeldey-Cirkel, dem Estudy-Entwickler-Team und dem Projektteam MSP:HÜ Aktuell über funktionale Erweiterungen des Projektes gesprochen werden.

Bei dieser Gelegenheit wird auch abgesprochen, welcher der besprochenen Features vom Projektteam implementiert werden sollen.

Reverse Engineering

Im Folgenden wird die Funktionalität und der Aufbau des eStudy-Moduls "Aktuell". Dieses Modul hieß früher "News", daher wird teilweise die alte Bezeichnung noch verwendet.


Klassendiagramm:

Im folgenden UML-Diagramm ist der Aufbau der Klassen des Moduls zu sehen. Man erkennt, dass für jeden Bereich von eStudy, aus dem Neuigkeiten angezeigt werden sollen eine eigene Klasse angelegt worden ist, die von der Klasse NewsCategory abgeleitet ist. Zusätzlich gibt es noch einige andere Klassen, die zusätzlich benötigte Funktionalität bereitstellen.

Auf die Klassendiagramme für die UnitTests wurde hier verzichtet. Informationen dazu findet man in der Dokumentation.

ClassesNews.jpg

Dokumentation:

Die mit Doxygen erstellte Dokumentation des Aktuell-Moduls ist hier zu finden.

Use Case Diagramme:

Use Case-Diagramm News.jpg

Datei:Use Cases News.pdf

Benötigte Datenbanktabellen:

NewsCategories enthält die Definitionen der vorhandenen Kategorien, die es für Nachrichten geben soll.

In NewsPreferences wird gespeichert, Welche Kategorien ein Benutzer in einem bestimmten Kurs als News angezeigt bekommt.

In NewsOfTheDay wird für einen Benutzer die News of the Day, Week und Month angezeigt, die er für einen bestimmten Kurs aktuell eingetragen hat.


DB-Schema.jpg

Software-Metriken

Die Metriken wurden mit PHPUnit erstellt. Als Unit-Tests dienten die vorhandenen Test-Dateien, die für den kompletten Test des News-Moduls bestimmt sind.


Test Dox

Category

   * Should create category array
   * Should create category array with correct data
   * Should create multiple array entries
   * Should use array key as position
   * Should store visibility data
   * Should use integers as booleans for visibility
   * Should tell if color is too dark

Categories

   * Should tell if category is not set
   * Should return category by id

CategoryGateway

   * Should load ordered categories
   * Should load ordered categories of user
   * Should return empty array if no entries found
   * Should update entries if they already exist
   * Load visible should not load hidden categories
   * Should load defaults if no data available
   * Should not load defaults if all categories are invisible
   * Reset should delete all user data
   * Reset should not touch other users data

Code Coverage

Hier der Link zur Zip-Datei mit der Code Coverage im HTML-Format.

Datei:CodeCoverageNews.zip

Übersicht über alle Methoden aller Klassen

Aufgrund der Größe der Tabelle wurde diese ausgelagert: MSP:HÜ Aktuell Methodenübersicht

Bad Smells

Nach der Definition von Mika Mäntylä [1]

Klasse Was? Bad Smell
many $courseID, $from, $to, $lastvisit Data Clump
NewsCategoryLiterature getNewsByPeriod Long Method
NewsCategoryWordPress getNewsByPeriod Long Method
NewsCategoryLiterature literatureDefaultSortString Switch Statement
Events GetEvents Switch Statement
NewsCategoryRessources getNewsByPeriod Switch Statement
NewsCategory echoNewsTableHead Switch Statement
NewsCategory GetPeriod Switch Statement
News getSalutation Switch Statement
News getTitle Switch Statement
News getUserGroupDescription Switch Statement
Category Klasse DataClass
NewsCategory Klasse Data/Lazy Class
UserDataNews Klasse Lazy Class
Categories Klasse Lazy Class

Dies stellt natürlich nur einen kleinen Auszug dar. Es gibt noch eine Menge anderer Bad Smells im Code, die den Umfang dieses Artikels allerdings sprengen würden.

Walkthrough: Erkannte Bugs und zu ergänzende Features

DropDownListen zur Zeitraumauswahl debuggen

Die DropDown-Listen, die zur Auswahl des anzuzeigenden Zeitraumes für Neuigkeiten dienen, haben eine kleinen Fehler. Die Zeitraumauswahl für einen Abschnitt (z.B. Forum) wirkt sich auf alle angezeigten Kurse aus, wenn nur in einem Kurs der Zeitraum geändert wird. Aufgrund Zeitmangels konnte dieser Bug leider weder im Rahmen der HÜ, noch beim Pair-Programming in der Projektwoche bearbeitet werden.

Automation verursacht eine Menge Notices im News-Modul

Der nächtliche CronJob bringt einige Fehler im Protokoll. Die Fehler sollen analysiert werden und ggf. behoben werden.Update: Die Fehler wurden behoben. Die täglichen Cronjobs sollten keine Fehler mehr verursachen.

Das Aktuell-Modul zeigt "eigene" News an

Im Abschnitt der "möglicherweise beim letzten Besuch verpassten" Neigkeiten werden auch selbst erstellte Beiträge angezeigt. Es macht jedoch keinen Sinn, wenn die eigenen News angezeigt werden. Durch richtige Codeänderungen sollen die eigenen Beiträge ausgefiltert werden.

Bearbeiten der Bugs/Features

Das Aktuell-Modul zeigt "eigene" News an

Man musste die SQL-Statements, die die Neuigkeiten heraussuchen soweit ergänzen, dass die die eigenen Beiträge herausgefiltert werden. Die aktuelle UserID darf nicht gleich zu der UserID der Beiträge sein. Ein Problem ist, dass die UserID nicht immer unter dem gleichen Attributsamen in den DB-Tabellen abgelegt wird (mal user_id, mal UserID, mal userID,...). Dadurch musste viel Zeit in die Suche der passenden Attributsnamen verwendet werden. Zusätzlich musste eine Menge Zeit in das Refactoring der geänderten php-Dateien gesteckt werden. Beim Commit kamen eine Menge Fehler zu Tage, die auch noch behoben werden mussten -> Sehr zeitaufwändig.

Angepasste News-Module:

- Mitteilungen
- Ressourcen
- Lernquiz
- Forum 
- Kurs-Mitglieder
- Portal-Mitglieder
- eCom-Mitglieder

Nicht anzupassende News-Module:

- Kurs-Einladungen (Man lädt sich nicht selbst ein)
- Umfragen (UserID wird bei Umfragen nicht mit abgespeichert, kann also nicht abgefragt werden)
- WordPress (inaktiv)
- Kurse/eComs (UserID wird nicht in den Tabellen für die Kurse abgespeichert; Vgl: DB-Schema:Kurse/eComs

Einen Testfall für dieses Feature konnte nicht geschrieben werden, da dieses Feature in untestbarem Code (z.B. Logik im Konstruktor) integriert werden musste. Ein Umstellen aller Klassen bei Beibehaltung der Funktionalität wäre zeitlich nicht möglich gewesen. Dafür müsste das komplette News-Modul neu aufgebaut werden.

Automation verursacht eine Menge Notices im News-Modul

Die News-Automation verursachte im täglichen Cronjob eine große Anzahl von Fehlermeldungen. Dies war zurückzuführen darauf, dass einige Session-Variablen im täglichen Cronjob logischerweise nicht verfügbar sind. Die Lösung des Problems war, vor den entsprechenden Stellen eine Überprüfung durchzuführen, ob benötigte Session-Variablen vorhanden sind. Sollte eine der benötigten Session-Variablen nicht gesetzt sein, liefert entsprechende Methode die Standard-News zurück(d.h. return-Wert ist null).

Forenbeiträge werden doppelt angezeigt

Auf der News-Seite werden die Forenbeiträge sowohl im Bereich der "Eventuell verpassten News" als auch im Bereich der "Regulären News" angezeigt. Dies ist darauf zurückzuführen, dass beim Forum ein CacheObjekt verwendet wird, welches, wenn es für den ersten Bereich aufgerufen wurde, die selben Ergebnisse auch in die regulären News schreibt. Durch eine Auftrennung, bei der nur die regulären News das CacheObjekt benutzen und eine Anpassung der SQL-Statements werden wieder unterschiedliche Forenbeiträge gemeldet.

Vgl. hierzu https://trac.mni.fh-giessen.de/eStudy/ticket/210

Codeänderungen im MSP-Branch

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/classes/class.newscategoryannouncements.inc.php(diff)

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/classes/class.newscategoryressources.inc.php(diff)

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/classes/class.newscategoryquiz.inc.php(diff)

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/classes/class.newscategoryforum.inc.php(diff)

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/classes/class.newscategorymembers.inc.php(diff)

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/classes/class.newscategoryexternaltools.inc.php(diff)

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/classes/class.newscategoryliterature.inc.php(diff)

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/templates/newsheader_course.html(diff)

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/templates/newsquiz.html (diff)

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/templates/newsressources.html (diff)

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/templates/newsannouncement.html (diff)

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/templates/newsforumthread.html (diff)

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/templates/newsforumthreadpost.html (diff)

Folgende Dateien wurden von anderen Gruppen bearbeitet/hinzugefügt bzw durch Merge mit Trunk verändert:

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/templates/newsplanner.html

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/classes/class.newscategoryplanner.inc.php

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/classes/class.news.inc.php

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/classes/class.events.inc.php

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/classes/class.newsoftheday.inc.php

https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/news/news.php

Datenbankänderungen

Keine Änderungen an der Datenbankstruktur erforderlich.

Verfasser und Bearbeiter des Projekts

Beimborn, Tobias Pfalsdorf, Nils