Być może pytanie, czy jest wykonalne i uzasadnione, nie jest najbardziej pomocnym pytaniem. Prawdopodobnie najbardziej praktyczną odpowiedzią jest odpowiedź zaakceptowana. Przeanalizuję to na bardziej filozoficznym poziomie.
Idealny byłby 100% zasięg, ale idealnie nie byłby potrzebny lub byłby znacznie łatwiejszy do osiągnięcia. Wolę zastanawiać się, czy jest to naturalne i ludzkie, niż jest to wykonalne lub uzasadnione.
Dzisiejsze narzędzia są prawie niemożliwe. Bardzo trudno jest napisać kod, który jest całkowicie poprawny i nie zawiera błędów. To po prostu nie jest naturalne. Tak więc, bez żadnej innej oczywistej opcji, sięgamy po techniki takie jak TDD i pokrycie kodu śledzenia. Ale tak długo, jak efekt końcowy jest nienaturalny, nie będziesz miał trudności z nakłonieniem ludzi do konsekwentnego i szczęśliwego działania.
Osiągnięcie 100% pokrycia kodu to nienaturalny czyn. Dla większości ludzi zmuszanie ich do osiągnięcia tego byłoby formą tortur.
Potrzebujemy procesów, narzędzi, języków i kodu mapujących nasze naturalne modele mentalne. Jeśli tego nie zrobimy, nie będzie możliwości przetestowania jakości produktu.
Wystarczy spojrzeć na całe oprogramowanie dostępne obecnie. Większość z nich psuje się dość regularnie. Nie chcemy w to wierzyć. Chcemy wierzyć, że nasza technologia jest magiczna i sprawiać nam radość. Dlatego decydujemy się ignorować, usprawiedliwiać i zapominać większość razy, kiedy nasza technologia się psuje. Ale jeśli dokonamy uczciwej oceny rzeczy, większość dzisiejszego oprogramowania jest dość kiepska.
Oto kilka wysiłków, aby kodowanie było bardziej naturalne:
https://github.com/jcoplien/trygve
https://github.com/still-dreaming-1/PurposefulPhp
Później jest wyjątkowo niekompletny i eksperymentalny. Właściwie jest to projekt, który rozpocząłem, ale uważam, że byłby to ogromny krok naprzód w sztuce programowania, gdybym kiedykolwiek zmusił się do poświęcenia czasu na jego ukończenie. Zasadniczo jest to idea, że jeśli kontrakty wyrażają jedyne aspekty zachowania klas, na których nam zależy, a my już wyrażamy kontrakty jako kod, to dlaczego nie tylko mamy definicje klas i metod wraz z kontraktami. W ten sposób umowy byłyby kodem i nie musielibyśmy wdrażać wszystkich metod. Niech biblioteka wymyśli, jak dotrzymać za nas umów.