Für viele IT-Mitarbeiter, einschließlich meiner selbst, bestand der ideale Softwareentwicklungsprozess vor einigen Jahren darin, detaillierte Designdokumente mit vielen UML-Diagrammen zu erstellen, bevor eine Codezeile geschrieben wird. (Dies sieht aus wie eine Beschreibung des Wasserfallmodells, ist jedoch bei Agile gleich, mit der Ausnahme, dass die Iterationen kleiner sind.)
In den letzten zwei oder drei Jahren habe ich meine Meinung völlig geändert. Eine detaillierte Anforderungsspezifikation mit den dazugehörigen Testfällen halte ich nach wie vor für unabdingbar. Bei großen Projekten würde ich auch einen Überblick über die Gesamtarchitektur benötigen, bevor ich mit dem Code beginnen kann. Der Rest sollte jedoch so weit wie möglich im Code erfolgen. Im Idealfall sollte es außer dem Code selbst keine Beschreibung des Software-Designs geben.
Wie bin ich zu diesem Schluss gekommen? Hier sind einige Argumente:
Feedback
Tools zum Schreiben von Dokumenten oder Erstellen von Diagrammen geben nur wenig Rückmeldung. Ja, es gibt Modellierungswerkzeuge, die einige Konsistenzprüfungen an UML-Diagrammen durchführen, diese sind jedoch begrenzt und mit viel Aufwand verbunden.
Ohne Feedback ist es schwer, Fehler zu erkennen und zu beheben.
Sobald Sie Code schreiben, erhalten Sie viele Rückmeldungen, zum Beispiel:
- Fehler und Warnungen vom Compiler
- Statische Code-Analyseergebnisse
- Unit-Tests
Fehler können schnell erkannt und behoben werden.
Konsistenz
Um sicherzustellen, dass der Code mit Ihren Dokumenten übereinstimmt, müssen Sie immer wieder überprüfen. Bei häufigen Änderungen ist es schwierig, Code und Dokumente synchron zu halten.
Refactoring
Es gibt leistungsstarke Tools und Techniken zum Refactoring von Code, während das Refactoring von Textbeschreibungen oder Diagrammen in der Regel schwierig und fehleranfällig ist.
Voraussetzung dafür ist, dass der Code leicht zu lesen und zu verstehen ist. Dies kann mit Assembler, Basic oder Fortran wahrscheinlich nicht erreicht werden, aber moderne Sprachen (und Bibliotheken) sind viel ausdrucksvoller.
Wenn meine Argumente stimmen, sollte es einen Trend zu weniger oder leichteren Software-Designspezifikationen und Dokumentationen geben. Gibt es empirische Belege für diesen Trend?