Talvez perguntar se é viável e razoável não seja a pergunta mais útil a ser feita. Provavelmente a resposta mais prática é a resposta aceita. Vou analisar isso em um nível mais filosófico.
Seria ideal uma cobertura de 100%, mas, idealmente, não seria necessário ou seria muito mais fácil de alcançar. Prefiro pensar se é natural e humano do que viável ou razoável.
O ato de programar corretamente é quase impossível com as ferramentas atuais. É muito difícil escrever código totalmente correto e sem bugs. Simplesmente não é natural. Portanto, sem outra opção óbvia, passamos a técnicas como TDD e cobertura de código de rastreamento. Mas, enquanto o resultado final ainda for um processo não natural, será difícil conseguir que as pessoas o façam de maneira consistente e feliz.
Conseguir 100% de cobertura de código é um ato não natural. Para a maioria das pessoas, forçá-las a conseguir isso seria uma forma de tortura.
Precisamos de processos, ferramentas, linguagens e código que mapeiem nossos modelos mentais naturais. Se não fizermos isso, não há como testar a qualidade de um produto.
Basta olhar para todo o software disponível hoje em dia. A maioria mexe bastante regularmente. Não queremos acreditar nisso. Queremos acreditar que nossa tecnologia é mágica e nos faz felizes. E assim escolhemos ignorar, desculpar e esquecer na maioria das vezes que nossa tecnologia falha. Mas se fizermos uma avaliação honesta das coisas, a maior parte do software disponível hoje em dia é bem ruim.
Aqui estão alguns esforços para tornar a codificação mais natural:
https://github.com/jcoplien/trygve
https://github.com/still-dreaming-1/PurposefulPhp
O posterior é extremamente incompleto e experimental. Na verdade, é um projeto que eu comecei, mas acredito que seria um grande passo à frente na arte da programação se eu pudesse dedicar algum tempo para concluí-la. Basicamente, é a ideia de que se os contratos expressam os únicos aspectos de um comportamento de classe com o qual nos preocupamos e já estamos expressando contratos como código, por que não apenas temos as definições de classe e método junto com os contratos. Dessa forma, os contratos seriam o código e não precisaríamos implementar todos os métodos. Deixe a biblioteca descobrir como honrar os contratos para nós.