Niedawno odkryłem Design by Contract (DbC) i uważam, że jest to niezwykle interesujący sposób pisania kodu. Wydaje się, że oferuje między innymi:
- Lepsza dokumentacja. Ponieważ umowa jest dokumentacją, nie można być nieaktualnym. Ponadto, ponieważ umowa określa dokładnie, co robi procedura, pomaga w ponownym użyciu.
- Prostsze debugowanie. Ponieważ wykonywanie programu kończy się w momencie niepowodzenia umowy, błędy nie mogą się rozprzestrzeniać, a naruszone twierdzenie zostanie prawdopodobnie podświetlone. Zapewnia to wsparcie podczas projektowania i konserwacji.
- Lepsza analiza statyczna. DbC jest w zasadzie tylko implementacją logiki Hoare i powinny obowiązywać te same zasady.
W porównaniu koszty wydają się raczej niewielkie:
- Dodatkowe pisanie palcami. Ponieważ umowy muszą zostać określone.
- Trwa trochę szkolenia, aby poczuć się komfortowo z pisaniem umów.
Teraz, znając przede wszystkim Pythona, zdaję sobie sprawę, że w rzeczywistości możliwe jest napisanie warunków wstępnych (po prostu wyjątki dla nieodpowiednich danych wejściowych), a nawet możliwe jest użycie asercji do ponownego przetestowania pewnych warunków dodatkowych. Ale nie można symulować niektórych funkcji, takich jak „stary” lub „wynik” bez dodatkowej magii, która ostatecznie zostałaby uznana za nie-Pythonic. (Ponadto istnieje kilka bibliotek, które oferują wsparcie, ale ostatecznie mam wrażenie, że korzystanie z nich byłoby niewłaściwe, ponieważ większość programistów tego nie robi). Zakładam, że jest to podobny problem dla wszystkich innych języków (z wyjątkiem oczywiście , Eiffel).
Moja intuicja mówi mi, że brak wsparcia musi być wynikiem pewnego rodzaju odrzucenia praktyki, ale wyszukiwanie w Internecie nie było owocne. Zastanawiam się, czy ktoś może wyjaśnić, dlaczego większość współczesnych języków wydaje się tak mało wspierać? Czy DbC jest wadliwe lub zbyt drogie? A może jest to po prostu przestarzałe z powodu Extreme Programming i innych metodologii?