Okt 07 2006

Entwicklung und Tests

Veröffentlicht by . Filed under: Programmierung

Jeder Software-Entwickler kennt das Problem: es ist nicht damit getan, die Software zu schreiben, sondern sie muss auch getestet werden. Ich gebe dabei ständig Debug-Meldungen aus, um zu sehen, ob auch das passiert, was ich erwarte. Durch meine Vorliebe für Objektorientierung komm ich dabei natürlich nicht daran vorbei, auch regelmäßig Objekte ausgeben zu müssen, bekanntermaßen mit dem Befehl

var_dump($obj);

Die Ausgabe ist natürlich recht unübersichtlich (zumal ich regelmäßig vergesse, “pre”-Tags zu setzen). Eine Lösung für dieses Problem stellt die PHP-Erweiterung “xdebug” dar, welche die Ausgabe nicht nur strukturell, sondern auch farblich wesentlich verbessert.

Ein Problem hat mich aber weiterhin gestört: die Debug-Meldungen sind mitten auf der Seite und zerstören komplett das Layout (sofern bereits eines existiert, zumindest muss man ewig scrollen, um an gewünschte Elemente zu gelangen). Also muss dafür eine Lösung her. Nur welche?

Clientseitige Entwicklung hat inzwischen hier starke Vorteile: zumindest unter Verwendung des Firefox-Browsers. Hier gibt es nämlich die fantastische Erweiterung “Firebug” (Dokumentation). Diese Erweiterung ermöglicht mir nicht nur die Überprüfung des AJAX-Traffics, sondern auch die Analyse des Dokumentes. Dazu sind Zeitmessungen, Assertion-Tests und vor allem vier unterschiedliche Debug-Meldungen möglich, welche auch entsprechend gekennzeichnet werden:

  • log
  • info
  • warning
  • error

So erzeugt das Script….

<script type=”text/javascript”>
console.log(“Log-Nachricht”);
console.info(“Info-Nachricht”);
console.warh(“Warnungs-Nachricht”);
console.error(“Fehlermeldung”);
</script>

…die Ausgabe:
Firebug-Konsole

Wie sehr schön zu sehen ist, werden die entsprechenden Fehlertypen farblich, mit passendem Symbol und Zeilennummer gekennzeichnet, sofern nicht “log” verwendet wurde.

Eine weitere sehr nützliche Funktion bietet Firebug bei Objekten. So erzeugt das Script…

<script type=”text/javascript”>
var obj = new Object();
obj.var1 = “test”;
obj.var2 = 3;
console.log(obj);
</script>

… die Ausgabe:
Objekt-Ausgabe
Objekt-Details
Man kann also jedes beliebige JavaScript genau unter die Lupe nehmen.

Jetzt wäre es natürlich wunderbar, wenn das auch mit serverseitigen Objekten gehen würde. Und die gute Nachricht ist: es geht. Dein Freund und Helfer ist JSON. Ich verwende dazu die PECL-Version von JSON, da sie in der nächsten PHP-Version fest integriert sein soll (und schneller ist als PHP-Implementierungen). Die Debug-Funktion kann einfach heruntergeladen werden.

Und nun ein nettes Beispiel: das PHP-Script…

class test {
public $var1;
public $var2;
public $var3;
}
$test = new test();
$test->var1=”function”;
$test->var2=4;
$test->var3=”you”;
debug(“testClass”,$test,DEBUG_TYPE_WARN);

…erzeugt die Ausgabe
Debuggen eines PHP-Objektes mit Firebug
Details zum PHP-Objekt in Firebug

Es ist also problemlos möglich, PHP-Variablen und sogar PHP-Objekte in Firebug zu betrachten. Mit Hilfe der PHP-Funktion “set_exception_handler” ist es sogar möglich, Exeptions über Firebug ausgeben zu lassen:

function handleExceptionError($exception) {
debug(“ExceptionHandler”,$exception->getMessage(),DEBUG_TYPE_ERR);
debug(“Datei / Zeile”,str_replace(“\\”,”/”,$exception->getFile()) . “::” . $exception->getLine(),DEBUG_TYPE_ERR);
}
set_exception_handler(‘handleExceptionError’);

Einer übersichtlichen Entwicklung steht so nichts mehr im Wege.

[Update]
Es hatte sich ein kleiner Fehler bei der Ausgabe eines Strings mit Anführungszeichen ergeben. Der wurde nun behoben.

6 responses so far

1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Loading ...
^

6 responses so far

  1. [...] Dieser Beitrag ist auf mehrfachen Wunsch auf Englisch geschrieben und stellt einen bereits veröffentlichten Beitrag auf deutsch dar. [...]

  2. Templaterie Blogon 10 Mrz 2007 at 2:11 pm

    [...] Flüchtiger Blick in die FF-Extension Firebug Silke Schümann wrote this 13:04:Mathias Bank programmiert viel und professionell. Das heißt prüfen seiner Skripte ist sein täglich Brot. Ich dagegen Programmiere noch äußerst ungern und die Skripte für den Hausgebrauch sind noch schlicht meist einfach und schnell getestet. Ein wenig Improvisation beim Test bringt mich ebenso gut ans Ziel. Aber so einen Tipp für die Testumgebung vom Profi schlägt man nicht aus. Für meinen favorisierten Client PHP 4.3 ist es noch für die PHP-Prüfung ungeeignet. Dort müsste ich noch JSON installieren und das ist es mir im Augenblick nicht wert. Zuviel Heckmeck. [...]

  3. [...] Es gibt natürlich (wie immer) noch einige Alternativen, bspw. FirePHP, ein richtiges Firebug-AddOn für PHP. Das funktioniert bei mir aber nur auf deren Demoseiten, nicht bei meinen eigenen Projekten. *g* Und dann noch dieses Skript hier von forenblogger.de. Er geht noch einen Schritt weiter und fängt sogar PHP-Exceptions ab, um sie in der Konsole anzuzeigen. [...]

  4. [...] Beim Forenblogger gibt es eine ähnliche Variante, die sogar einen Exception Handler verwendet um Debug-Ausgaben von PHP über Javascript in die Firebug-Konsole zu bekommen… [...]

  5. [...] debuggen konnte. Dabei meine ich nicht die Ausgabe bestimmter Variablen mit var_dump oder mittels Firebug-Konsole. Nein, ich [...]

  6. Frankon 04 Okt 2008 at 7:41 pm

    Wenn man noch

    $var = str_replace(array(“\r\n”, “\r”, “\n”), “\\n\\”, $var);

    einfügst, klappt auch die Ausgabe von Strings mit Zeilenumbrüchen, wie man sie z.B. bei SQL öfter hat.

Trackback URI | Comments RSS

Hinterlasse eine Antwort