(Imagino que essa seria uma boa pergunta para entrevista , mas no meu caso é mais pragmática do que isso.)
Temos uma aplicação grande e complexa que modela um processo de reação química extremamente longo e sofisticado entre dezenas de componentes químicos. Estamos no estágio de projetar testes de aceitação para o aplicativo, mas estamos um pouco assustados com o número intratável de caminhos possíveis para testar. Ocorreu-me que nossa situação é muito parecida com a que a equipe de desenvolvedores do Google Maps deve ter enfrentado quando chegou a hora de testar o algoritmo de planejamento de rotas no recurso "Obter direções". Obviamente, eles não puderam testar (verificar e validar) todas as rotas possíveis. Então, como eles obtiveram a confiança de que seu aplicativo funcionaria em todas as situações?
E como não espero descobrir como eles fizeram isso, deixe-me perguntar: como você projetaria um conjunto de testes com cobertura de código adequada, para se certificar de que um determinado aplicativo é robusto - quando é literalmente impossível sondar todos os caminhos em potencial através do sistema?
O que estou procurando são os princípios que você usaria para decompor um problema intratável em pedaços menores e tratáveis, cuja soma fornece uma estimativa satisfatória do todo: "Não posso testar tudo, mas posso testar isso , isso e isso - e isso é o suficiente. " Não estou procurando uma abordagem "comprovadamente correta", mas uma que seja prudente , dadas as restrições de orçamento / tempo do mundo real.
(Estou usando o exemplo do Google Maps como uma espécie de folha para solicitar respostas o mais específicas possível.)