Forse chiedere se è fattibile e ragionevole non sono le domande più utili da porre. Probabilmente la risposta più pratica è quella accettata. Analizzerò questo a un livello più filosofico.
Una copertura del 100% sarebbe l'ideale, ma idealmente non sarebbe necessaria o sarebbe molto più facile da raggiungere. Preferisco pensare se è naturale e umano che fattibile o ragionevole.
L'atto di programmare correttamente è quasi impossibile con gli strumenti di oggi. È molto difficile scrivere un codice totalmente corretto e privo di bug. Non è semplicemente naturale. Quindi, con nessuna altra opzione ovvia, passiamo a tecniche come TDD e copertura del codice di tracciamento. Ma finché il risultato finale sarà ancora un processo innaturale, avrai difficoltà a convincere le persone a farlo in modo coerente e felice.
Raggiungere il 100% di copertura del codice è un atto innaturale. Per la maggior parte delle persone, costringerli a raggiungere questo obiettivo sarebbe una forma di tortura.
Abbiamo bisogno di processi, strumenti, lingue e codice che si associno ai nostri modelli mentali naturali. Se non riusciamo a farlo, non c'è modo di testare la qualità in un prodotto.
Guarda tutti i software là fuori oggi. La maggior parte si incasina abbastanza regolarmente. Non vogliamo crederci. Vogliamo credere che la nostra tecnologia sia magica e renderci felici. E così scegliamo di ignorare, scusare e dimenticare la maggior parte delle volte che la nostra tecnologia incasina. Ma se prendiamo una valutazione onesta delle cose, la maggior parte del software oggi disponibile è piuttosto scadente.
Ecco alcuni sforzi per rendere la codifica più naturale:
https://github.com/jcoplien/trygve
https://github.com/still-dreaming-1/PurposefulPhp
Il successivo è estremamente incompleto e sperimentale. In realtà è un progetto che ho iniziato, ma credo che sarebbe un grande passo avanti per l'arte della programmazione se potessi mai farmi dedicare del tempo per completarlo. Fondamentalmente è l'idea che se i contratti esprimono gli unici aspetti di un comportamento delle classi a cui teniamo e che stiamo già esprimendo i contratti come codice, perché non hanno solo le definizioni di classe e metodo insieme ai contratti. In questo modo i contratti sarebbero il codice e non avremmo bisogno di implementare tutti i metodi. Lascia che la biblioteca capisca come onorare i contratti per noi.