MSP-Projektwoche Ticketbearbeitung 89 89

Aus THM-Wiki
Wechseln zu: Navigation, Suche
Dokumentation
Arbeitstitel MSP-Projektwoche Ticketbearbeitung 89 89
Kurs Methoden des Software-Entwicklungsprozesses
Semester WS 09/10
Teilnehmer Christian Weber, Mark Schlüter
Programmiersprache PHP

Pairprogramming

Teammitglieder

  • Christian Weber
  • Mark Schlüter

Bug

Output-Klasse verwendet kein Data::toHTML - Ticket 89

Vorgehen

  • Analyse des Fehlers/ Bugs
  • Analyse der neu zu verwendenden Funktion
  • Identifizieren der fehlerhaften Codestellen
  • Korrigieren des Codes
  • Erstellung von geeigneten Testmethoden zum Testen direkter Ausgaben.
  • Implementierung von Testfällen

Implementierung bzw. Bugfixing

Bei der Implementierung sind wir teilweise vom Pairprogramming abgegangen, da einige Programmteile sich wiederholt haben und diese Aufgabe(n) von einer Person alleine erledigt werden konnten. In der Zwischenzeit konnte sich der Partner mit Recherchen zu Unittests befassen (Wie kann man echo Ausgaben testen?).

Unittests

Das erstellen der Unittest für diesen Bug, hat die Frage "Wie kann man Funktionen die lediglich eine echo Ausgabe und keinen Rückgabewert haben testen?" aufgeworfen. Bei dieser Frage wendeten wir uns an den eStudy-Helpdesk, jedoch waren sich die Mitarbeiter des Helpdesk uneinig über die Möglichkeiten einen Unittest für die oben verwendete Klasse zu erstellen.

Folgende Möglichkeiten des Testens hatten erarbeitet:

  1. Jede der betroffen Funktionen der Output-Klasse clonen bzw eine zusätzliche Funktion erzeugen die aber das gleiche Ergebnis liefert, aber anstelle von echo - Ausgaben, alles als String zurückliefert.
  2. Innerhalb der betroffenen Funktion die wird eine zusätzliche Variable angelegt, welche die Ausgaben des echo speichert.
  3. Pufferung der Ausgabe einschalten, den Puffer in eine Variable schreiben und diese vergleichen.

zu 1.

/** VORHER */
class Output {
   public function message($param1, $param2, $param3) {
       echo "<input type=\"text\" name=\"".$param1."\" />";
       ...
   }
}

/** NACHHER */
class Output {
   public function message($param1, $param2, $param3) {
       // echo Ausgabe
   }

   public function messageAsString($param1, $param2, $param3) {
        $data = new Data();
        $str = "<input type=\"text\" name=\"".$data->toHTML($param1)."\" />";
        ...
        return $str;
   }

}

/** VERWENDUNG IM UNITTEST */


zu 2.

/** VORHER */
class Output {
   public function message($param1, $param2, $param3) {
       echo "<input type=\"text\" name=\"".$param1."\" />";
       ...
   }
}

/** NACHHER */
class Output {
   public function message($param1, $param2, $param3) {
       $str = "";
       echo "<input type=\"text\" name=\"".$data->toHTML($param1)."\" />";
       $str .= "<input type=\"text\" name=\"".$data->toHTML($param1)."\" />";
       ...
       return $str;
   }
}

/** VERWENDUNG IM UNITTEST */


zu 3.

/** VORHER */
class Output {
   public function message($param1, $param2, $param3) {
       echo "<input type=\"text\" name=\"".$param1."\" />";
       ...
   }
}

/** NACHHER */
class Output {
   public function message($param1, $param2, $param3) {
       $str = "";
       echo "<input type=\"text\" name=\"".$data->toHTML($param1)."\" />";
       $str .= "<input type=\"text\" name=\"".$data->toHTML($param1)." />";
       ...
       return $str;
   }
}

/** VERWENDUNG IM UNITTEST */

Ist dies überhaupt ein Bug?

Die Frage ob dies überhaupt ein Bug sei, stellte sich uns zunächst nicht. Angesichts des Zeitdrucks haben wir uns zu dieser Frage keine gedanken gemacht. Im Testbetrieb wurden bei Verwendung von Data::toHTML() ungewollte Ausgaben erzeugt. Dies hängt damit zusammmen, dass vorformatierte Strings an die Funktionen der Output-Klasse übergeben werden. Bsp:

$str = "Ein Fehler ist aufgetreten,<br/> bitte wenden Sie sich an den Administrator!";
Output::message($str, "", ""); // echo "Ein Fehler ist aufgetreten, &lt;br/&gt; bitte wenden Sie sich an den Administrator!";
// Ausgabe auf dem Bildschirm: Ein Fehler ist aufgetreten,<br/> bitte wenden Sie sich an den Administrator!

Eine Möglichkeit dies zu beheben wäre, eine Art Whitelist mit HTML-Tags die verwendet werden dürfen, anzulegen und die darin enthaltenen Tags zurück in HTML-Tags zu konvertieren, sodass sie richtig interpretiert werden können. Allerdings wurde dieser Vorschlag von Herrn Thelen abgelent. Es stellte sich heraus, dass dieser 'Bug' eigentlich gar kein Bug ist und sämtliche Änderungen an der Klasse Output rückgängig gemacht werden müssen.


Lessons Learnt

  • Paarprogrammierung: Die Analyse des Bugs lies sich in dieser From gut durchführen. Im Laufe der Bearbeitung traten unerwartet Probleme bei der Erstellung von geeigneten Unit-Test auf, was ein Großteil unseres zeitlichen Budgets in Anspruch nahm. Um trotz dieses Zeitverlusts noch die Möglichkeit zu haben, gemäss der Aufgabenstellen ein Feature umzusetzen, haben wir uns entschieden, die Aufgaben zu splitten und zu parallelisieren. Die Bearbeitung erfolgte allerdings weiterhin im Rahmen der "Paarprogrammierung" an einem Tisch, so dass man immer unmittelbar für den Austausch neuer Ideen/ Probleme zur Verfügung stand. In einem "echten" Projekt hätte nach der ersten Bug-Analyse eine Anpassung der Kalkulation erfolgen müssen.
  • Das Fazit für diese Aufgabenstellung: Der zeitliche Rahmen für die Teamfindung, Raumsuche, Aufgabensuche, Einarbeitung etc. war eindeutig zu kurz. Hier ist eher in MT (Manntagen anstelle von Stunden) zu rechnen. Darüber hinaus gab es auch einige Probleme mit der Infrastruktur (z.B. kein WLAN), auf die wir allerdings keinen Einfluss nehmen konnten.

Der Vergleich unserer gesammelten Erfahrungen mit [1] und [2] zeigen eine große Übereinstimmung. Die folgenden Punkten traten dabei besonders positiv hervor:

  • bessere Kommunikation
  • höheres Vertrauen in die Arbeit
  • Reduzierung von Programmier- und Designfehler (Pair-Reviews)
  • Steigerung der Produktivität (Pair-Pressure)
  • Verschieden Ideen zur Problemlösung (Pair-Think)

Durch den direkten Austausch kommt dem Lernen und der Weiterentwicklung beider Partner ebenfalls eine große Bedeutung hinzu (Pair-Learning).


Schlueter-MSc73 14:33, 18. Jan. 2010 (CET)