Ich bin gelegentlich als Auditor für Softwareentwicklungs-Projekte unterwegs. Wenn ich agile Projekte reviewe, dann finde ich häufig die hier überspitzt dargestellte Einstellung:
Wir sind agil. Wir dokumentieren doch nix. Der Wissenstransport über direkte Kommunikation ist doch viel effizienter.
Wir machen Clean Code. Da braucht man keine Quellcode-Kommentare. Der Code kann gelesen werden und sagt immer die Wahrheit.
Dieser Standpunkt kommt mir jedesmal wieder als sehr dogmatisch vorgetragenes Credo entgegen. Hier hat sich bei mir der Eindruck verfestigt, dass eine Aussage aus dem agilen Manifest nur zu gerne als Ausrede genommen wird, um nicht dokumentieren zu müssen.
Inhalt
- Dokumentation ist bei agilen Vorgehensweise nicht verboten
- Code beschreibt das „Wie“ und nicht das „Warum“
- Effiziente Dokumentation – aller Anfang ist… einfach
- Mache alles mehrfach!
- Fazit
Dokumentation ist bei agilen Vorgehensweise nicht verboten
Sehen wir uns zuerst noch einmal das Agile Manifest an. Dort gibt es den Wert:
Funktionierende Software mehr als umfassende Dokumentation
Da steht wirklich „mehr als“. Damit wird funktionierende Software wichtiger angesehen als umfassende Dokumentation. Da steht nicht, dass Dokumentation weggelassen werden soll. Das kann ich auch verstehen und unterstützen: Was nützt eine umfassende Dokumentation, wenn die Software nicht funktioniert?
Ich habe auch schon Projekte beobachtet, die mit einer Dokumentationsorgie gestartet sind. Nach fünf Jahren Fachkonzeptionsphase lagen dann viele hunderte Seiten Dokumentation vor. Der Kunde hat sich das angesehen und das Projekt dann eingestellt, weil die penibel dokumentierten Anforderungen schon lange wieder überholt waren. Zugegeben, das war auch kein agiles Projekt.
Auf der anderen Seite stellt sich die Frage, was eine Software nützt, die nach einiger Zeit niemand mehr versteht? In den zwölf Prinzipien finden wir dazu:
Die effizienteste und effektivste Methode, Informationen an und innerhalb eines Entwicklungsteams zu übermitteln, ist im Gespräch von Angesicht zu Angesicht.
Das ist verständlich und dem kann ich sofort zustimmen. Damit stellt sich allerdings die Frage, wozu Dokumentation dienen soll? Dokumentation dient nach dem gerade Gesagten nicht dazu, die Kommunikation in einem Entwicklungsteam zu ersetzen. Das ist aber nur der Blick auf eine relativ kurze Zeitspanne im Lebenszyklus von Software.
Die meiste Zeit ist Software in Betrieb und Weiterentwicklung. damit gibt es dann in den meisten Fällen kein Entwicklungsteam mehr. Damit geht das Prinzip dann einfach ins Leere:
- Ich habe öfter gesehen, dass eine Applikation sehr lange gelebt hat und über Jahre oder Jahrzehnte von verschiedenen Entwicklerteams erweitert und umgebaut worden ist. Woher bekommt ein neues Team die benötigten Informationen?
- Ich habe es erlebt, dass selbst der Fachbereich nicht mehr genau wusste, was eine Applikation macht. Wie soll man da eine Ablösung hinbekommen?
Code beschreibt das „Wie“ und nicht das „Warum“
In Zusammenhang mit agiler Entwicklung wird oft auch „Clean Code“ [1] herangezogen. Hier ist die Argumentationslinie eher, dass Dokumentation veraltet, wenn sie nicht gepflegt wird und dann schlimmer ist als überhaupt keine Dokumentation. Den Effekt kenne ich. Allerdings ist meine Schlussfolgerung eine andere. Anstatt Dokumentation über Bord zu werfen, muss sie aktuell gehalten werden.
Das Gleiche gilt beispielsweise auch für Testfälle. Auch hier habe ich schon erlebt, dass Testfälle einfach gelöscht wurden, wenn sie nicht mehr „grün“ sind, anstatt sie auf einem aktuellen Stand zu halten. Auch das ist kontraproduktiv.
Die vermeindliche Quelle der Wahrheit soll im Code liegen. Wenn man nach den Prinzipien von Clean Code vorgeht, dann wird der Code lesbar. Das ist in jedem Fall wahr. Allerdings kann ich im Code nur lesen, wie etwas gemacht wird. Damit weiß ich noch lange nicht, warum etwas so gemacht wird.
Es gibt in der Entwicklung einer Applikation oftmals Design-Entscheidungen, die getroffen werden müssen. Oftmals gibt es keine konkreten Anforderungen, sodass die Auswahl unter den zur Verfügung stehenden Alternativen mehr oder weniger zufällig geschehen kann. Wenn man jetzt im Nachhinein versucht, die Gründe für eine Design-Entscheidung zu rekonstruieren, so funktioniert das oftmals nicht mehr. Bei einer Erweiterung oder einem Umbau der Software ist mann dann leider gezwungen, diese unerklärlichen Effekte als gefordert zu behandeln und unverändert zu lassen. Verbesserungspotenziale werden damit verschwendet. Das geht am Ende so weit, dass Software neu gebaut wird, nur weil die alte Software nicht mehr ausreichend verstanden wird – etwas das ich leider auch schon erlebt habe.
Effiziente Dokumentation – aller Anfang ist… einfach
Ein beliebtes Argument für das Weglassen von Dokumentation ist das vermeindliche Einsparpotenzial. Betrachten wir das Beispiel Java und die dort so beliebten Getter und Setter. Zugegebenermaßen ist die Dokumentation von Gettern und Settern nicht sehr spannend. Auf der anderen Seite kostet sie aber auch so gut wie nichts.
Getter und Setter sollten nicht manuell geschrieben werden. Statt dessen werden sie von der IDE (beispielsweise Eclipse) auf Knopfdruck automatisch erstellt. Dazu sind in der IDE Templates hinterlegt, die auch die Dokumentation mit erstellen können. Das Einsparpotenzial ist also die Erstellung und Einbindung der Templates. Wenn man nicht gerade das allererste Projekt macht, dann hat man solche Templates schon, sodass sich die Einsparung im Minutenbereich bewegt – und das nur einmalig. Das ist also nicht wirklich der Rede wert.
Das Gleiche gilt auch für andere, wiederkehrende Aufgaben, wie die Erstellung von Konstruktoren, Destruktoren oder Delegates. Also die Erstellung von „unspannenden“ Kommentaren bekommt man quasi geschenkt. Es spricht also nichts dafür, diese einsparen zu wollen.
Bei anderen Kommentaren muss man sich schon etwas Mühe geben. Das ist es aber auch Wert. Wenn sich etwas nicht unmittelbar erschließt, sollte das „Warum“ in einem Kommentar verewigt werden.
Mache alles mehrfach!
Am Ende gibt es aber ein Argument, das ich für mich als das wichtigste identifiziert habe. Auch und gerade bei agilen Projekten darf die Qualität nicht „eingespart“ werden. Bei sicherheitskritischen System, wie beispielsweise denen im Flugzeug, führt das dazu, dass Komponenten dreifach ausgelegt werden. Auf die Software-Entwicklung übertragen bedeutet das, dass es sinnvoll sein kann, Dinge mehrfach zu machen. Dadurch werden unterschiedliche Blickwinkel ausgeleuchtet und es fällt Fehlern schwerer, sich zu verstecken.
Nun sind wir es in der Software-Entwicklung schon gewohnt, Dinge mehrfach zu durchdenken: Spezifikation, Programmieren, Testen. In diesen Kanon passt die Dokumentation. Dies gilt insbesondere, wenn im Rahmen von agiler Entwicklung die klassische Spezifikation deutlich an Bedeutung verliert.
Fazit
Mir ist schon passiert, dass ich beim Dokumentieren über Fälle nachgedacht habe, die vorher nie aufgetaucht waren. Das ist im Sinne der Qualität sicher positiv. Mir ist die Qualität wichtig, und sei es nur, dass niemand mir nachsagen kann, ich hätte schlampig gearbeitet. Deshalb halte ich Dokumentation für einen wichtigen Bestandteil der Software-Entwicklung, der auch in einem agilen Kontext seine Bedeutung nicht verliert.
Noch Fragen?
Wie können Sie agile Methoden in Ihrer Organisation umsetzen, damit sie einen echten Mehrwert liefern? Erfahren Sie, wie wir Sie unterstützen können:
Dr. Gerd Neugebauer - ist Senior IT-Architekt mit Leib und Seele – und davon gibt es nicht wenig. Er ist insbesondere auch im Web- und Portal-Umfeld seit vielen Jahren tätig. Aus Erfahrungen mit vielen Kundenprojekten heraus gespeist ist sein Interesse an Vorgehensmodellen für die Durchführung von IT-Projekten.