Forse chiedere se è fattibile e ragionevole non sono le domande più utili da porre. Probabilmente la risposta più pratica è quella accettata. Lo analizzerò a un livello più filosofico.
La copertura al 100% sarebbe l'ideale, ma idealmente, non sarebbe necessaria, o sarebbe molto più facile da ottenere. 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 codice che sia completamente corretto e che non abbia bug. Non è naturale. Quindi, senza altra opzione ovvia, ci rivolgiamo a tecniche come TDD e copertura del codice di tracciamento. Ma finché il risultato finale è ancora un processo innaturale, avrai difficoltà a convincere le persone a farlo in modo coerente e felice.
Raggiungere una copertura del 100% del codice è un atto innaturale. Per la maggior parte delle persone, costringerli a raggiungerlo sarebbe una forma di tortura.
Abbiamo bisogno di processi, strumenti, linguaggi e codici che si adattino ai nostri modelli mentali naturali. Se non lo facciamo, non c'è modo di testare la qualità in un prodotto.
Guarda tutti i software là fuori oggi. La maggior parte di questi incasina abbastanza regolarmente. Non vogliamo crederci. Vogliamo credere che la nostra tecnologia sia magica e ci renda felici. Quindi 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 là fuori oggi è piuttosto schifoso.
Ecco alcuni sforzi per rendere la codifica più naturale:
link
link
Il successivo è estremamente incompleto e sperimentale. In realtà è un progetto che ho iniziato, ma credo che sarebbe un enorme passo in avanti per il mestiere di programmazione se potessi mai mettermi il tempo per completarlo. Fondamentalmente è l'idea che se i contratti esprimono gli unici aspetti di un comportamento delle classi a cui teniamo, e stiamo già esprimendo contratti come codice, perché non solo hanno 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.