![]() | ||||||||||||||||||||||||||||||||||||
Joel on Software Joel über Software
| ||||||||||||||||||||||||||||||||||||
|
Andere auf Deutsch verfügbare "Joel on Software"-Artikel Andere auf Englisch verfügbare "Joel on Software"-Artikel |
Von Joel Spolsky Aus dem Englischen von Heinz Kessler Redigiert von Christian Theune 8. November 2000 TRS-80 Level-I BASIC konnte nur zwei Stringvariablen speichern: A$ and B$. Genauso wurde ich mit nur zwei Bugspeicherplätzen in meinem Kopf geboren: ich kann mir immer nur zwei Bugs auf einmal merken. Wenn ich mir Drei merken soll, fällt einer auf die Erde, wird unter das Bett gefegt und landet bei den Staubmäusen, die ihn auffressen. Die Benutzung einer Bugdatenbank ist eines der Kennzeichen eines guten Entwicklerteams. Ich wundere mich immer wieder darüber, wie selten das wirklich getan wird. Eine der größten Fehleinschätzungen, auf die Entwickler immer wieder reinzufallen scheinen, ist der Glaube, dass sie sich alle Bugs im Kopf merken, oder mit Hilfe von Post-It Zetteln den Überblick behalten können. Wenn Sie ein wenig Zeit haben, dann würde ich Ihnen gerne einen einfachen Weg darstellen, wie man Bugverwaltung betreiben kann; im Sinne meiner früheren Artikel über Terminpläne leicht gemacht und Spezifikationen leicht gemacht. Zuerst einmal braucht man eine richtige Datenbank. Bei einem 2-Personen-Team, das während eines langen Wochenendes ein bisschen programmiert, reicht dafür eventuell eine Textdatei. Sobald es darüber hinausgeht braucht man eine richtige Bugverwaltungs-Datenbank. Es gibt Tausende käuflicher Bugdatenbanken. (Schamlose Eigenwerbung: Die Bugdatenbank, die wir bei Fog Creek Software geschrieben haben (FogBUGZ), ist web-basiert, ziemlich einfach zu benutzen und recht leistungsfähig, wenn ich das hier selbst mal so sagen darf). Beobachten wir mal zur Verdeutlichung einen Bug auf seinem Lebensweg vom ersten bis zum letzten Atemzug. Folgen wir dem berühmten Bug 1203. Hier ist, was die Bugdatenbank uns über in erzählt:
Was ging da vor? Mikey, der Entwickler, schreibt an seinem neuen FTP-Client-Feature für seine coole Macintosh-Software. Irgendwann schreibt er dabei seine eigene String-Kopierfunktion, weil er unbedingt seinen Spieltrieb befriedigen muss. Die mit ihrer nervigen Wiederverwendungsrichtline! Hah! Es geschehen schlimme Dinge, wenn man Code nicht wiederverwendet, Mikey! Und diesmal geschah Folgendes: Mikey vergaß, den kopierten String mit einem "Null" Zeichen abzuschließen. Aber das Problem trat bei ihm nie auf, weil er die meiste Zeit in einen Speicherbereich kopierte, dessen Bytes bereits mit "Null" initialisiert waren. Einige Tage später ist Jill, die sehr, sehr gute Testerin, dabei den Code zu quälen, indem sie Ihre Stirn auf der Tastatur vor- und zurückrollt - oder einen vergleichbar grausamen Test durchführt. (übrigens heißen die meisten guten Tester Jill oder so ähnlich, wie zum Beispiel Gillian) Plötzlich passiert etwas sehr Seltsames: Der FTP Server, auf dem sie testet, stürzt ab. Ja, ich weiß, es ist eine Linux Maschine und Linux Maschinen stürzen nie ab (kein Grummeln aus der slashdot-Ecke, bitte), aber diese verdammte Kiste stürzte nun mal ab. Und dabei hat sie den Server nicht mal berührt. Sie übertrug nur Dateien auf den Server, indem sie Mikeys Mac Code benutzte. Nun, Jill ist eine sehr, sehr gute Testerin, also schrieb sie genau auf, was sie tat (zum Beispiel zeichnet sie genau auf, in welchem Winkel und in welchem Takt sie ihren Kopf auf der Tastatur hin- und herrollte). Sie fährt alles neu hoch und fängt mit einem frischen System an, wiederholt die Schritte und siehe da: es passiert wieder! Der Linux FTP Server stürzt wieder ab! Zum zweiten Mal an einem Tag! Hörst Du, Linus? Jill guckt auf die Liste der Schritte, mit denen der Bug reproduziert werden kann. Es sind etwa 20 Schritte. Manche von ihnen scheinen nicht maßgeblich zu sein. Nach einigem Rumprobieren schafft Jill es, die Liste auf 4 Schritte zu reduzieren, die den Fehler immer hervorrufen. Jetzt ist sie soweit, den Bug einzutragen. Jill trägt einen neuen Bug in die Bugdatenbank ein. Der Vorgang des Eintragens erfordert einige Disziplin, denn es gibt gute und schlechte Bugberichte. Drei Teile eines guten Bugberichts
Es gibt eine sehr leicht zu merkende Regel für einen guten Bugbericht:
Scheint einfach zu sein, oder? Vielleicht aber auch nicht. Als Entwickler bekomme ich des öfteren Bugs zugewiesen, bei denen der eine oder andere Teil ausgelassen wurde. Wenn du mir nicht sagst, wie ich den Bug reproduzieren kann, dann weiß ich womöglich gar nicht, wovon du sprichst. "Das Programm stürzte ab, und hinterließ einen stinkenden Kuhfladen auf meinem Arbeitsplatz." Wie schön, Liebling. Ich kann aber nichts machen, wenn du mir nicht sagst, was du getan hast. Gut, ich muss zugeben es gibt zwei Fälle, in denen es schwierig ist zu sagen, wie ein Bug zu reproduzieren ist. Manchmal kann man sich einfach nicht mehr erinnern, und manchmal schreibt man den Bug aus einem Bericht vom "Feld" ab. (Apropos, wieso nennt man das eigentlich "Feld"? Ist das sowas wie ein Roggenfeld? Egal ...). Der andere Fall ist, wenn der Fehler nicht immer auftritt. Aber Schritte zur Reproduktion sollte man trotzdem angeben, mit einem Hinweis darauf, dass der Bug damit nur manchmal auftaucht, nicht immer. Solche Bugs sind schwer zu finden, aber wir können es ja wenigstens versuchen. Wenn man nicht angibt, was man erwartet hat, dann werde ich warscheinlich nicht verstehen, wieso das ein Bug sein soll. "Auf dem Startbildschirm sind Blutspritzer". Na und? Ich hatte mir in den Finger geschnitten, als ich ihn programmiert hab', also was willst du? Ach, du meinst die Spezifikationen erfordern "kein Blut". Jetzt weiß ich, wieso du meinst, dass dies ein Bug ist. Teil drei: Was man statt dessen gesehen hat. Wenn das nicht drin steht, dann weiß ich nicht, was überhaupt falsch ist. Das ist offensichtlich. Zurück zu unserer GeschichteNun gut. Jill trägt den Bug ein. In einem guten Bug-Verfolgungssystem wird der Bug automatisch dem leitenden Entwickler für dieses Projekt zugewiesen. Und darin liegt das zweite Konzept: Jeder Bug muss genau einer Person zu einem Zeitpunkt zugewiesen sein, bis er "geschlossen" wird. Ein Bug ist wie eine heiße Kartoffel: Wenn er dir zugewiesen ist, dann musst du ihn beheben oder ihn jemand anderem zuweisen. Willie, der leitende Entwickler, schaut sich den Bug an, beschließt dass das etwas mit dem FTP Server zu tun haben muss, und löst ihn als "wird nicht behoben". Schliesslich haben wir den FTP Server nicht geschrieben. Wenn ein Bug gelöst ist, dann wird er wieder der Person zugewiesen, die ihn eingetragen hat. Das ist ein wichtiger Punkt. Er verschwindet nicht, weil der Entwickler meint, er sollte. Die goldene Regel sagt, dass nur die Person, die den Bug eingetragen hat, ihn auch abschließen kann. Der Entwickler kann den Bug lösen, das heißt "Hey, ich denke, das ist erledigt", aber um den Bug wirklich abzuschließen und ihn aus den Büchern zu streichen, muss die ursprüngliche Person, die ihn eingetragen hat, bestätigen dass das Problem wirklich behoben ist, oder dass der Bug aus irgend einem bestimmten Grund nicht bearbeitet werden muss. Jill bekommt eine E-Mail, die ihr mitteilt, dass der Bug wieder auf ihrem Tisch liegt. Sie schaut ihn sich an, und liest Willies Kommentar. Irgendwas stimmt da aber nicht. Dieser FTP Server wird seit vielen Jahren überall benutzt, und er stürzt nicht ab. Er stürzt nur ab, wenn man Mikeys Code benutzt. Also reaktiviert Jill den Bug wieder, erklärt ihre Meinung, und der Bug geht wieder zurück an Willie. Dieses Mal weist Willie den Bug Mikey zu. Mikey untersucht den Bug, denkt lang und heftig nach, und stellt eine völlig falsche Diagnose. Er löst ein ganz anderes Problem, und setzt unseren Bug dann auf "gelöst". Der Bug ist zurück bei Jill, dieses mal markiert als "GELÖST - BEHOBEN". Jill probiert ihre Schritte, mit denen sie den Bug reproduzieren kann, und siehe da: Der Linux Server stürzt wieder ab. Sie reaktiviert den Bug erneut und weist ihn direkt Mikey zu. Mikey ist perplex, aber schlussendlich findet er die Ursache des Fehlers. (Wissen Sie noch, was es war? Die Antwort überlasse ich dem Leser als Übung. Hinweise habe ich genug gegeben!) Er behebt ihn, testet ihn und - Eureka! Jills Reproduktionsschritte schießen den FTP Server nicht mehr ab. Erneut setzt er den Bug auf "GELÖST - BEHOBEN". Jill probiert es wieder aus, sieht dass der Bug nun behoben ist, und schließt den Fall. Die 10 besten Tipps für Bugmanagement
Wenn Sie Code entwickeln, sogar wenn sie dies alleine tun, dann werden Sie ohne organisierte Datenbank, die alle bekannten Bugs im Programm auflistet, garantiert schlechte Software produzieren. Gute Entwicklerteams benutzen die Bugdatenbank nicht nur immer und überall, die Teammitglieder gehen sogar dazu über, sie als eigene Aufgabenliste zu verwenden. Sie verwenden die Liste der ihnen zugewiesenen Bugs als Startseite im Browser. Manche fangen sogar an sich zu wünschen, dass sie auch dem Chef der Cafeteria Bugs zuweisen könnten, damit dieser endlich die richtige Sorte Schokoriegel kauft. Fog Creek Software bietet eine einfach anzuwendende Bugdatenbank namens FogBUGZ an. Titel der Originalausgabe: Painless Bug Tracking | |||||||||||||||||||||||||||||||||||
![]() Joel Spolsky ist der Gründer von Fog Creek Software, einer kleinen Software Firma in New York City. Nachdem er auf der Yale University graduierte arbeitete er als Programmierer und Manager bei Microsoft, Viacom und Juno. | ||||||||||||||||||||||||||||||||||||
Der Inhalt dieser Seiten stellt die persönliche Ansicht des Autors dar.
Copyright ©1999-2005 Joel Spolsky. Die Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten.