Dla wielu informatyków, w tym dla mnie kilka lat temu, idealny proces tworzenia oprogramowania wymagałby stworzenia szczegółowych dokumentów projektowych z dużą ilością diagramów UML, zanim zostanie napisany wiersz kodu. (Wygląda to jak opis modelu wodospadu, ale jest taki sam w przypadku zwinnego, z tym wyjątkiem, że iteracje są mniejsze).
W ciągu ostatnich dwóch lub trzech lat całkowicie zmieniłem zdanie. Nadal uważam, że szczegółowa specyfikacja wymagań z powiązanymi przypadkami testowymi jest absolutnie niezbędna. W przypadku dużych projektów przed przystąpieniem do kodowania potrzebowałbym również zarys ogólnej architektury. Ale cała reszta powinna być wykonana w kodzie tak dużo, jak to możliwe. W idealnym przypadku nie powinno być opisu projektu oprogramowania poza samym kodem.
Jak doszedłem do tego wniosku? Oto kilka argumentów:
Informacje zwrotne
Narzędzia do pisania dokumentów lub tworzenia diagramów dostarczają niewiele informacji zwrotnych. Tak, istnieją narzędzia do modelowania, które sprawdzają spójność diagramów UML, ale są one ograniczone i wiążą się z dużym nakładem pracy.
Bez informacji zwrotnej trudno jest rozpoznać i naprawić błędy.
Gdy tylko napiszesz kod, otrzymasz wiele opinii, na przykład:
- Błędy i ostrzeżenia z kompilatora
- Wyniki analizy kodu statycznego
- Testy jednostkowe
Błędy można szybko rozpoznać i naprawić.
Konsystencja
Aby upewnić się, że kod jest zgodny z twoimi dokumentami, musisz to sprawdzać raz za razem. W przypadku częstych zmian trudno jest zsynchronizować kod i dokumenty.
Refaktoryzacja
Istnieją potężne narzędzia i techniki do refaktoryzacji kodu, podczas gdy refaktoryzacja opisów tekstowych lub diagramów jest zwykle trudna i podatna na błędy.
Jest jeden warunek konieczny do działania: kod musi być wystarczająco łatwy do odczytania i zrozumienia. Prawdopodobnie nie można tego osiągnąć za pomocą Asemblera, Basica lub Fortrana, ale współczesne języki (i biblioteki) są znacznie bardziej wyraziste.
Więc jeśli moje argumenty są słuszne, powinien istnieć trend w kierunku mniejszej lub bardziej lekkiej specyfikacji i dokumentacji projektowej oprogramowania. Czy istnieją dowody empiryczne na ten trend?