Diferença entre a declaração e a cobertura da decisão
Diz-se que a cobertura da Declaração garante que todas as declarações do código são executadas pelo menos uma vez.
Diz-se que a cobertura de decisão/ramo testa que cada ramo/saída de uma decisão é testada, ou seja, todas as declarações em ambos os ramos falsos/verdadeiros serão executadas.
Mas não é a mesma coisa? Na cobertura de declaração Eu preciso executar todas as declarações assim que eu suponho que só pode ser feito executando todas as maneiras possíveis. Sei que me está a escapar alguma coisa..
3 answers
A resposta de Paulo não está bem, pelo menos eu acho que sim (de acordo com as definições de ISTQB). Há uma diferença significativa entre declaração, decisão/ramo e cobertura da condição. Eu vou usar a amostra da outra resposta, mas modificado um pouco, para que eu possa mostrar todos os três exemplos de cobertura de teste. Os testes aqui escritos dão 100% de cobertura de teste para cada tipo.
if(a || b)) {
test1 = true;
}
else {
if(c) {
test2 = true
}
}
[[2]} temos duas declarações aqui-se(a / / b) e se(C), para explicar totalmente essa cobertura diferenças:
-
cobertura da declaração tem de testar cada declaração pelo menos uma vez, por isso precisamos apenas de dois testes:
- a=true b=false - que nos dá o caminho se(a||b) true - > test1 = true
- a=false, b=false E c=true-that gives us path: if(a||b) false -> else -> if(c) -> test2=true.
-
Branch / decision coverage needs one more teste:
- a=falso, b=falso, c=falso - que nos leva a esse segundo se, mas estamos executando ramo falso a partir dessa Declaração, que não foi executado na cobertura da declaração
-
Cobertura do Estado necessita de outro teste:
- a=false, b=true - que conduz através do mesmo caminho que o primeiro teste, mas executa a outra decisão ou declaração (a / / b) Para ir através dele.
EDIT: na maioria das fontes, descobri recentemente que os Termos de cobertura de decisão/ramo são equivalentes e o termo que descrevi como cobertura de decisão é, de facto, cobertura de condição, daí a actualização da resposta.
Pode ter uma declaração como:
if(a || b || (c && d && !e)) {
test1 = true;
} else {
test2 = false;
}
Se a sua cobertura de código diz que ambas as linhas test1 e test2 são atingidas, então você tem cobertura de declaração, mas para obter cobertura completa do ramo você precisará testar quando a é verdadeiro, quando a é falso, mas b é verdadeiro, quando a e b são falsos, mas c E d são verdadeiros e e e é falso, etc.
A cobertura de sucursais abrange todas as combinações potenciais de opções de sucursais e por isso é mais difícil conseguir uma cobertura de 100%.
Eu posso adicionar isto ao acima que eu encontrei estar faltando, se os testes têm Cobertura Completa do ramo então nós podemos dizer que ele também tem cobertura completa da declaração , mas não o vice-versa.
100% Cobertura da sucursal = > 100% Cobertura da declaração
100% a cobertura da declaração não implica uma cobertura de sucursais a 100%
A razão está na cobertura do ramo para além de executar todas as declarações, também devemos verificar se os testes executam todos os ramos, que pode ser interpretado como abrangendo todas as arestas do ramo de controlo do fluxo
if(a){
if(b){
bool statement1 = true;
}
}
A = true, b = true irá dar cobertura de 100% da declaração, mas não cobertura de ramo
No ramo de cobertura precisamos cobrir todas as arestas, que perdemos na instrução cobertura mostrado como linhas vermelhas na imagem acima