Você não menciona sua ferramenta de teste. Muitos possuem funções "combinadas" que permitem agregar os resultados de várias execuções ou suítes. Se você deseja uma métrica de cobertura agregada, explore o recurso de combinação em sua ferramenta de cobertura.
Agora, podemos falar sobre o elefante na sala?
Não tem colher. E não há "porcentagem total de cobertura". Pelo menos, não é simples.
A porcentagem de cobertura é uma métrica prontamente compreendida apresentada para ajudar a entender o escopo, a profundidade e o alcance dos conjuntos de testes. Mas, como qualquer referência simples, é muito fácil tornar-se alvo fixado nesse valor como uma espécie de talismã mágico de "teste completo".
Digamos que você tenha alcançado a glória de "100% de cobertura de teste". Yay! Mas o que isso significa? 100% das linhas de código são testadas, certo? Então, e essa linha?
launch_missile = launch_authorized and launch_cmd_given else previous_launch_status
"Cobrir" essa linha significa algo - mas não muito, porque há uma variedade de condições que são True
ou False
com alguma probabilidade, mas é improvável que você tenha testado todas as combinações dessas condições. Mesmo que essa linha seja coberta uma dúzia de vezes, se uma das condições for relativamente incomum, você não chegou perto de testar todos os resultados reais que podem ocorrer na prática. Para deixar isso mais claro, um exemplo mais sintético:
engage_laser = (laser_armed and safety_disengaged) or random.random() < 0.0000003
Quantas vezes você teria que cobrir essa linha para realmente testá-la exaustivamente? Quantas vezes você precisaria cobri-lo para testá-lo em combinação com todas as outras variáveis do programa (com suas próprias probabilidades, possivelmente igualmente raras)?
Não estou dizendo que as métricas de cobertura são inúteis. Eles são realmente ótimos . Eles se concentram em um dos principais problemas: Qual a extensão do meu sistema de software testado? Eles ajudam a passar de "nós temos alguns testes" para "nós testamos completamente".
Porém, enquanto você trabalha com "pontuações combinadas", a realidade é que sua pontuação normalmente será para cobertura de "declaração de declarações" em vez de cobertura de "condição", "predicado" ou "caminho" . Portanto, seja qual for o número que suas pontuações agregadas lhe fornecerem, é improvável que ele lhe dê uma imagem verdadeira de quanto dos estados e combinações de estados em potencial do seu programa está sendo testado. Enquanto você estiver trabalhando para aumentar sua porcentagem de cobertura, considere também medir sua cobertura de predicado. Isso fornecerá uma visão mais realista - e quase invariavelmente, mais preocupante - da extensibilidade dos testes.