Direkt zum Hauptbereich

Wer macht' s?

Hier jetzt mal ein Gedanke zum - Überraschung - Schreiben von Anforderungen. Da schwanke ich hin und her zwischen Pragmatismus ("Sieh‘ s nicht so streng. Der Leser weiß schon was gemeint ist.") und erkenntnistheoretischen Dogmatismus ("Die Anforderungen muss vollständig, konsistent und für jeden unmissverständlich sein. Definieren wir deswegen als erstes, was ein 'Mensch' ist!").

Ein Schlachtfeld in diesem Krieg (zwischen mir und meiner Wenigkeit) ist die Formulierung von Nutzeraktivitäten.

Da liest (und schreibt) man z.B. "Das Programm muss dem Nutzer die Möglichkeit bieten, eine Datei zu öffnen." oder "Falls der Nutzer ein neues Objekt angelegt hat, muss das Programm eine Meldung ausgeben."

Doch eigentlich verständlich, oder? Ja, aber dennoch falsch! Denn nicht der Nutzer öffnet die Datei, sondern das Programm. Der Nutzer wählt die Datei aus und gibt dem Programm den Auftrag, sie zu öffnen. Und auch das Objekt wird nicht vom Nutzer angelegt, sondern von der Software. Der Nutzer gibt nur den Auftrag, dass das Objekt angelegt werden soll.

Korrekt müsste es also z.B. heißen: "Das  Programm muss dem Nutzer die Möglichkeit bieten, eine Datei auszuwählen, die zur Anzeige vom Programm geöffnet werden soll." und "Falls der Nutzer den Menüpunkt "New Object" auswählt, muss das Programm ein neues Objekt anlegen und eine Meldung ausgeben."

Das macht die Anforderungen länger und schwerer lesbar? Na und! Schreiben von Anforderungen ist schließlich kein prosaisches Hobby, sondern eine philosophische Arbeit. Wir konstruieren eine Welt aus Worten und sie muss perfekt sein.

An dieser Stelle rücken meine Kollegen jetzt merklich etwas weiter von mir weg. Das hat sicher nichts damit zu tun, dass ich aufgesprungen bin und den Stuhl umgeworfen habe.

Nachdem ich wieder aus dem Raum heraus darf, zu dem ich zur Beruhigung eingeschl... äh der mir zur weiteren Problemanalyse bereitgestellt wurde, gebe ich bereitwillig ("Was sind das nur für schöne bunte Pillen?") nach. Letztlich weiß ja jeder was gemeint ist.

Und dann, nach Monaten des Durchhaltens, der Rückschlag beim Review: "Falls der Nutzer ein Objekt instanziiert, muss das Programm ein leeres Objekt erzeugen." Kommentar eines Reviewers "Es sollte beschrieben werden, was 'Instanziieren' bedeutet." Ja, das sollte es. Oder man verwendet ein deutsches Wort. Dann jedoch wird deutlich, dass die jeweiligen Verantwortungen nicht geklärt sind: "Falls der Nutzer ein Objekt erzeugt, muss das Programm ein leeres Objekt erzeugen."

Dann sieht man, dass der Nutzer eben nichts erzeugt oder instanziiert, sondern lediglich den Auftrag dafür an das Programm erteilt, das dann stattdessen die Erzeugung vornimmt.

Ja so etwas ist wichtig... Was?... Nein heute Morgen noch nicht...Die schmecken mir nicht so gut....Wirklich?...Oh, die sind aber schön bunt...

Kommentare

  1. Ich glaube, ihr sollte das eher von Nutzergeschichten (User Stories) formulieren, denn dann beschreibst du die Erwartungshaltung der jeweiligen Rolle und nicht, wer was zu tun hat.

    Dein Beispiel oben wäre dann etwa:

    Als ein Nutzer möchte ich eine Datei öffnen können.

    Als ein Nutzer erwarte ich einen Hinweis, wenn XYZ.

    Dass ich als Nutzer dies immer im Bezug auf das zu erstellende Programm meine, ist implizit enthalten.

    Man kann Nutzergeschichten auch in Tabellen erfassen. Erste Spalte ist die Rolle, zweite Spalte die Erwartung, dritte Spalte eine eventuelle Bedingung. Das zwingt dann zu kurzen prägnanten Sätzen. Es ähnelt dann einer strukturierten Sprache. Nichts für lauschige Abende im Sessel vorm Kamin, aber ziemlich effizient :-)

    AntwortenLöschen
  2. Gleich vorweg: Das beschriebene Problem ist keines (zumindest kein großes) in der alltäglichen Arbeit, da alle Beteiligten eigentlich dieses implizite Wissen haben.

    Nimmt man jedoch einen streng theoretischen Standpunkt ein (und das mache ich immer wieder gern :-)), ist implizites Wissen ein nicht im Modell formuliertes Wissen und damit ist das Modell unvollständig:

    Ich kann aus den natürlichsprachlichen Anforderungen einfach keinen Code generieren (echt mal!).

    Und gerade wenn man die User Stories (die es auch gibt) detailieren und Anforderungen an Teilsysteme und Komponenten formulieren (ableiten) will, wird es wichtiger, genau zu klären, welche Komponente nun die Datei öffnen und damit welcher Entwickler dies umsetzen soll.

    Eine weitere Randbedingung ist, dass wir Anforderungen nach dem SOPHIST REgelwerk formulieren - was ich sehr begrüße, da die Anforderungen so formaler werden und gewisse Mindeststandards erfüllen.

    AntwortenLöschen

Kommentar veröffentlichen

Beliebte Posts aus diesem Blog

Silvesternachlese

Ich hoffe Ihr seit alle gut ins Jahr 2019 gekommen.

Im Vorfeld von Silvester gab es ja einige Diskussionen über die Umweltverträglichkeit, die Gesundheitsgefährdung und die finanzielle Sinnhaftigkeit von pyrotechnischen Utensilien.

Auch wir hatten über einige Alternativen nachgedacht. Letztendlich müssen zwei Eigenschaften nachgebildet werden: Zum einen muss es Knallen (oder zischen oder knattern; also laute Geräusche produzieren) und zum anderen muss es blinken. Nichts, was man heutzutage nicht mit Lautsprechern und LEDs hinbekommen könnte.

Gut, für'n ordentlichen Bums braucht man schon einigermaßen gute Lautsprecher. Aber hier könnte man ja jeden Zuschauer Kopfhörer verpassen, was auch die Umweltlärmbelastung verringern würde.

Die Lichtanlage in den Himmel zu bekommen, um ein Höhenfeuerwerk nachzustellen wird schon schwieriger. Hier könnten aber langfristig VR-Brillen Abhilfe schaffen.

Bis dieser technologische Stand erreicht ist, müssen jedoch andere Mittel herangezogen werden.…

Code Retreat: Keine If-Ausdrücke

Ich hatte am letzten Samstag einen Code Retreat organisiert. Dabei hatten wir auch zwei Sessions mit der Vorgabe, keine If-Ausrücke (auch keine switches oder ?-Operatoren) zu verwenden.

Folgendes fand sich daraufhin haufenweise im Code eines Paares:

while (a == 1) { //do somethingbreak; }
Soviel also zum Ziel, saubereren Code zu schreiben...

Konstruktivere Beispiele findet man stattdessen im Artikel "Ohne Wenn und Aber" .

RUCK ZUCK

In einem seiner Kommentare verwies Steinchen auf die 90er Jahre Hymne von Böhmermann (das erste Mal übrigens, dass ich etwas von Böhmermann gesehen habe). Darin kommt auch die Textzeile "...haben wir RUCK ZUCK einhundert Leute befragt..." vor.

Da dämmerte mir etwas. Stimmt, da gab's doch so eine Spielshow. Ich habe gleich mal bei YouTube recherchiert und das folgende Video gefunden. Daraufhin fiel mir ein, dass wir das sogar mindestens einmal auf dem Schulhof nachgespielt hatten. Das kann aber erst nach 1991 gewesen sein.