4.3.2006

User Stories tragen
grüne Karos

* frei nach der Film-Noir-Parodie "Tote tragen keine Karos" von Carl Reiner

Java Magazin 3/2006

von Frank Westphal und Johannes Link
erschienen im Java Magazin 3/2006

Johannes und ich haben für seine “Jenseits des Tellerrands” Kolumne im Java Magazin ein kleines literarisches Experiment gewagt. Wir beuten das Erbe von Raymond Chandler aus, um zu zeigen, wie sich Benutzergeschichten und andere Anforderungen in einer für Kunden wie Entwickler gleichermaßen verständlichen Sprache kommunizieren, am konkreten Beispiel dokumentieren und zur Abnahme automatisiert testen lassen. Verwendung findet dabei FIT, ein kleines agiles Akzeptanz- und Systemtest-Framework.

Der Besuch

Es dröhnte und pochte in meinen Ohren. Das Dröhnen kam von innen und war vermutlich auf die Flasche billigen Brandys zurückzuführen, die mir mein letzter Kunde, ein heruntergekommener Bänker, anstatt der versprochenen 100 Euro als Bezahlung angeboten hatte. Privatentwickler zu sein ist nicht immer leicht.

Das Pochen jedoch kam von meiner Tür und wollte nicht aufhören. Ich erinnerte mich dunkel an eine via Skype getroffene Verabredung und schleppte mich vom Bett zum Schreibtischstuhl im Nebenzimmer, meine Klamotten hatte ich glücklicherweise noch an, und rief dem Türklopfer ein gequältes “Rein mit Ihnen!” entgegen.

Erwartet hatte ich eine Frau mittleren Alters, doch herein trat eine Blondine, etwa um die dreißig und mit ausreichend Bein ausgestattet, um mir schwindelig werden zu lassen – wäre ich es nicht sowieso schon gewesen.

“Mr. Softlowe?”

“Korrekt. Philip Softlowe. Das bin ich.”

“Gestatten, Mrs. Customley. Wir haben geskypt. Ich dachte schon, Sie wollten mir gar nicht mehr öffnen.”

“Ich bin so früh am Tag noch etwas … schüchtern.”

Meine Gesichtsmuskelatur brach in ein anrüchiges Grinsen aus.

Um es kurz zu machen, nach einigem freundlichen Geplänkel rückte sie mit ihrem Anliegen heraus: Sie wollte “Unregelmäßigkeiten” in den Kontoauszügen ihres Mannes überprüfen lassen. In anderen Worten, ich sollte ihr ein kleines Programm schreiben, das aus allen Kontobewegungen ihres Mannes die verdächtigen Positionen herausfiltern und für spätere “Referenz” protokollieren sollte.

Ich zögerte. Nicht dass ich nach all den Jahren in den Gossen der Softwareentwicklung noch Skrupel hätte, aber ein bisschen überrascht war ich dennoch. Sollte ein Mann eine solche Frau für eine andere vernachlässigen? Der Fall roch irgendwie faul. Doch ich verwarf alle Einwände meiner inneren Stimme; die Miete war fällig und der letzte Cash-zahlende Kunde lag schon ein paar Wochen zurück.

“Ich bekomme 200 am Tag. Plus Spesen. Und 30 Cent für jeden Kilometer in meiner Kiste.”

“Das sollte ja dann für eine Woche reichen.” Sie blätterte zwei 500-Euro-Scheine auf den Tisch. “Und hier die Auszüge meines Mannes vom letzten Monat. Die verdächtigen Positionen habe ich gelb markiert.” Ein dickes Bündel Ausdrucke nahm den Weg aus ihrer Handtasche auf meinen Schreibtisch. Ein einzelnes Blatt sah in etwa so aus:

Tabelle 1: Kontoauszug vom 25.11.2005

Dabei war der zweite Eintrag mit einem gelben Markerstift eingefärbt worden.

Ich ließ meinen Daumen durch das Bündel fahren. Es waren mindestens 200 Blätter. Ihr Mann schien den ganzen Tag nichts anderes zu tun, als Überweisungen zu schreiben und Kreditkartenbelege zu quittieren. “Nicht so schnell, Herzchen”, grinste ich sie an und versuchte dabei, meine Kopfschmerzen zu ignorieren, “Was bedeutet denn ‘verdächtig’?”

“Ganz einfach”, flötete sie und schaute mir tief in die Augen. “Verdächtig sind alle Ausgaben zwischen 100 und 500 Euro, die im Verwendungszweck nicht ‘Rate’, ‘Miete’ oder ‘Strom’ haben. Und natürlich nur an Tagen, an denen mein werter Gatte auf Geschäftsreise war.” Als hätte sie meinen nächsten Einwand vorhergesehen, zog sie eine Liste mit den bisherigen und auch künftigen Geschäftsreisen ihres Mannes aus der Tasche, und warf sie mit einem Schwung über den Schreibtisch in meinen Schoß.

“Sind sie privat auch so ruppig, Süße?”, entgegnete ich mit meinem anzüglichen Grinsen.

“Ihr Ton gefällt mir nicht, Mr. Softlowe.”

“Macht nichts, ich will ihn nicht verkaufen.”

“Guten Tag, Mr. Softlowe.”

Ohne weiteren Blickkontakt schritt sie aus meinem Büro und warf die Tür hinter sich zu. Die Lady gefiel mir. Nicht nur wegen ihrer äußeren Reize, ihr zielstrebiges Handeln imponierte mir fast ebenso. Wie viele meiner Aufträge hatten mir wochenlang nichts als detektivischen Spürsinn abverlangt: Unklare Rollenverhältnisse, veränderte Anforderungen und übelste Widersacher waren an der Tagesordnung. Hier war endlich eine Kundin, die wusste, was sie wollte, und nicht in prosaischen Rätseln sprach. Die gelieferten Beispieldaten sollten meine Entwicklung auf eine erste erfolgreiche Fährte setzen. Bei dieser Frau durften mir keine Fehler passieren …

Erster Anlauf

Um möglichst bald wieder Grund für einen Skype-Ruf zu haben, machte ich mich gleich an die Arbeit. Das heißt, nachdem ich meinem Kopf eine Abkühlung unter der Dusche gegönnt und meinem Hirn eine Tasse starken Java gemacht hatte. Mein Leitspruch war: Nicht Fehler töten Projekte, fehlende Tests tun es. Und seit der Verschärfung des Haftungsgesetzes für Privatentwicklungen sicherte ich jeden Kundenwunsch durch automatisierte Akzeptanztests ab; das hatte mir schon einigen Ärger mit der Europäischen Projektpolizei erspart. Für einen LBD (Low Budget Developer) wie mich gab es in diesen Zeiten nur ein Testwerkzeug, das ich mir leisten konnte und das eine offizielle Zulassung der Europäischen Softwarekommision besaß: FIT.

Was ist FIT?

Was JUnit für Unit Tests ist, ist FIT (Framework for Integrated Test) für System- und Akzeptanztests. Kundenanforderungen werden nebst Szenarien und Testdaten in Word, Excel oder Wiki dokumentiert und, im HTML-Format gespeichert, von FIT verarbeitet. Das Open-Source-Framework liest diese Dokumente ein, interpretiert die darin eingebetteten Tabellen als auszuführende Testfälle und schreibt sein Testergebnis direkt in die entsprechenden Tabellenzellen (je nach Resultat in roter oder grüner Farbe) zurück.

Die Übersetzung der Wünsche meiner intriganten Schönheit in entsprechende FIT-Tabellen war das reinste Kinderspiel. Die Kontoauszüge entschlackte ich um Überflüssiges und ergänzte den Verdächtig-Aspekt:

Tabelle 2: Kontoauszug

Wie benutzt man FIT?

Mit FIT können wir im Projektverlauf ein ausführbares Anforderungsdokument erstellen, das die umgangssprachlichen Anforderungen des Kunden in konkrete Akzeptanzkriterien überführt und jederzeit auf Knopfdruck überprüft. Auf diese Weise schließt FIT nicht nur eine wichtige Kommunikationslücke zwischen den Domänenexperten und uns Softwareentwicklern, sondern beantwortet gleichzeitig die wichtige Frage, wann die von uns gelieferte Software eigentlich fertig ist.

Hinter jede HTML-Tabelle stecken wir eine kleine Adapterklasse – eine so genannte Fixture –, welche die Testdaten zu interpretieren weiß und die Verbindung zur zu testenden Anwendung herstellt. Als Beispiel hier der Kontoauszug:


public class Kontoauszug extends fit.ColumnFixture {
public Date Datum;
public Euro Betrag;
public String Empfänger;
public String Verwendungszweck;

public boolean Verdächtig() {
return new Kontobewegung(Datum, Betrag, Empfänger,
             Verwendungszweck).verdächtig();
}
}

Die aufgedruckten Smartchips erlaubten es mir, die Auszüge in wenigen Minuten elektronisch zu erfassen. Lediglich die verdächtigen Positionen musste ich per Hand nachtragen. Auch die Dienstreisen waren in kürzester Zeit umgesetzt:

Tabelle 3: Dienstreisen

Programmiert hatte ich diese kleine Aufgabe schon am Abend, alle Positionen wurden korrekt klassifiziert und ich erwartete, die zufriedene Kundin am nächsten Abend in meinem Büro, um sie – nach Klärung des geschäftlichen Erfolgs – auch von meinen privaten Vorzügen überzeugen zu können.

Neue Wünsche

Ich hatte mich gerade rasiert und meine Tastaur von den Fingerabdrücken und Schokoflecken der vergangenen Jahre befreit, als La Cliente Fatale eintrat – diesmal ohne anzuklopfen. “Haben wir uns nicht schon mal irgendwo gesehen?”, fragte ich, um die Stimmung zu heben, in gewohnt lockerem Ton. “Könnte sein, ich war schon mal irgendwo.”, kam prompt als Antwort.

“Sie sind ja sehr geschickt mit Ihren Fingern.”, zeigte sie sich vom sichtbaren Projektfortschritt – alle Testfälle waren grün kariert – beeindruckt.

Tabelle 4: Kontoauszug

Nicht beeindruckt genug jedoch, um nicht gleich noch nachzulegen …

“Nun, Mr. Superlowe, ich habe da noch eine kleine Zusatzaufgabe”, flüsterte sie und kam dabei mit ihrem Mund kurzzeitig dem meinen verdächtig nahe. “Jetzt wüsste ich gerne, wann und wo mein treuer Mann die nächste ‘Zusatzausgabe’ plant. Da lässt sich doch sicherlich ein Muster erkennen, oder?”

Mein ratloser Blick schien sie nicht zu verunsichern, aber die erotisierte Stimmung löste sich in ihrem gereizten Ausruf auf: “Wofür bezahle ich Sie eigentlich, Sie Schmierenprogrammierer! In drei Tagen erwarte ich von Ihnen Ort und Zeit der nächsten zu erwartenden ‘Sonderausgabe’ meines Mannes.” Auch diesmal verließ sie meine bescheidenen Räumlichkeiten, ohne einen Blick zurückzuwerfen. “So long, Zuckerpuppe!” Die Lady gefiel mir immer besser.

Zweiter Durchlauf

Den ursprünglichen Zettel mit den Dienstreisen fand ich im Müll – leider ein wenig verschmutzt von den Resten der 13 Pizzaschachteln, die ich danach in die Tonne gestopft hatte. Zu entziffern waren trotzdem noch die Städte, in die der Angetraute meiner Klientin seine Reisen getätigt hatte bzw. tätigen würde:

Tabelle 5: Dienstreisen

Ich erspare Ihnen die Details der beiden schlaflosen, whiskeygetränkten und zigarillorauchgeschwängerten Nächte, in denen ich versuchte, das System hinter seinen Dienstreisen und Vergnügungsausgaben zu erkennen. Doch irgendwann war ich überzeugt, die Formel – ähnlich komplex wie die Lösung von Differenzialgleichungen höherer Ordnung – gefunden zu haben, und FIT warf mir die folgende Ergebnistabelle aus:

Tabelle 6: Dienstreisen

Sonderfälle

Hm, der Neujahrstag und Dienstreise? Sollte ich einen Fehler begangen haben? Sofort schickte ich eine Skype-Nachricht an Mrs. Customley, ob sie sich vorstellen könne, dass ihr Mann am Neujahrstag …

Die Antwort kam prompt: “Dienstreisen an Feiertagen sagt mein Mann immer kurzfristig ab und bleibt zu Hause.” Sehr interessant – da gab es also offensichtlich ein paar Sonderfälle, die mir bei der Anforderungsanalyse durch die Lappen gegangen waren. Jetzt nicht mehr:

Tabelle 7: Feiertage

Und nach Ausfilterung der Feiertage spuckte mein Programm nun plötzlich ein anderes, völlig plausibles Ergebnis aus:

Tabelle 8: Verdacht

Hatte ich diesmal auf mehr Zuwendung durch Mrs. Geheimnisvoll gehofft, so wurde ich gründlichst enttäuscht. Reserviert und zugeknöpft nahm sie in meinem Büro den Memory-Stick mit Programm, Daten und Auswertung entgegen und war verschwunden, noch ehe ich zu einem gewohnt lässigen “Hätten Sie nicht Lust …” ansetzen konnte. Sie war schwerer zu knacken, als ich dachte.

Post Mortem

Drei Tage vergingen, ohne dass ich von ihr hörte. Dass sie mich so lange zappeln ließ, hatte mich zermürbt und ich war innerlich bereit, für sie ein Eine-Frau-Mann zu werden. Mit vorbereiteter Ausrede klickte ich ihren Skype-Anschluss an. ‘This account has been deleted’ war die Antwort und ich blieb verstört und ahnungslos, mit der zweiten Flasche Brandy als einzigem Freund, zurück. ‘Ahnungslos’ aber nur so lange, bis ich am Morgen des 24. Februars folgende Meldung in meinen personalisierten Google-News fand:

Stuttgart. Am gestrigen Abend wurde Europaminister Wackelstein von seiner Frau im Restaurant Tanzbein erschossen. Seine Frau wurde noch am Tatort von den anwesenden Leibwächtern überwältigt und gab später zu Protokoll, sie habe ihren Mann aus Eifersucht getötet. Tatsächlich saß am Tisch des Ministers die 65-jährige berühmte Tänzerin Angelique Leichtfuß, bei welcher der Minister seit einigen Monaten regelmäßig Tanzunterricht nahm, um für den Gala-Empfang anlässlich seines fünften Hochzeitstags im März gerüstet zu sein. Der zuständige Polizeichef sagte …

Ich schaltete den Monitor aus, lehnte mich im Sessel zurück und zündete mir eine Zigarette an. Die Kopfschmerzen waren größer denn je und ich spielte mit dem Gedanken, meine Lizenz als Privatentwickler endgültig an den Nagel zu hängen.

Links/Literaturverweise

Schlagwörter:

blättern: QYPE geht live
zurück: Tonabnehmer 8 - Thomas Baustert, Ralf Wirdemann - Ruby on Rails