Можливо, запитання, чи це можливо і розумно, - це не найкорисніші запитання. Напевно, найбільш практична відповідь - це прийнята. Я проаналізую це на більш філософському рівні.
100-відсоткове покриття було б ідеальним, але в ідеалі воно не знадобиться або було б набагато легше досягти. Я вважаю за краще подумати про те, чи це природно і людсько, ніж можливо чи розумно.
Правильний акт програмування поруч із неможливим у сучасних інструментах. Дуже складно написати код, який є абсолютно правильним і не має помилок. Це просто не природно. Отже, не маючи іншого очевидного варіанту, ми звернемося до таких методів, як TDD, і відстеження коду відстеження. Але поки кінцевий результат все ще є неприродним процесом, вам буде важко змусити людей це робити послідовно і щасливо.
Досягнення 100% покриття кодом - це неприродний вчинок. Для більшості людей змушення їх робити це було б формою катувань.
Нам потрібні процеси, інструменти, мови та код, які відповідають нашим природним ментальним моделям. Якщо ми цього не зробимо, немає можливості перевірити якість продукту.
Подивіться на все програмне забезпечення сьогодні. Більшість з них псується досить регулярно. Ми не хочемо в це вірити. Ми хочемо вірити, що наша технологія є магічною і робить нас щасливими. І тому ми вирішуємо ігнорувати, виправдовувати і забувати більшу частину часу, коли наша технологія псується. Але якщо ми будемо чесно оцінювати речі, більшість програмного забезпечення, що склалося сьогодні, є досить шаленим.
Ось кілька зусиль, щоб зробити кодування більш природним:
https://github.com/jcoplien/trygve
https://github.com/still-dreaming-1/PurposefulPhp
Пізніший надзвичайно неповний та експериментальний. Насправді це проект, який я розпочав, але я вважаю, що це був би величезний крок вперед для програми програмування, якби я коли-небудь міг змусити себе вкласти час на його завершення. По суті, ідея полягає в тому, що якщо контракти виражають єдині аспекти поведінки класів, які нас цікавлять, і ми вже виражаємо договори як код, то чому б не мати лише визначення класів та методів разом із контрактами. Таким чином контракти були б кодом, і нам не потрібно було б впроваджувати всі методи. Нехай бібліотека придумає, як виконати контракти для нас.