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..

Author: Salman Lashkarara, 2013-01-25

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:
  1. 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.
Assim executamos todas as declarações.
  1. 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
    Assim, testamos todos os ramos, o que significa que percorremos todos os caminhos.
  2. 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.
{[[2]} dessa forma, temos todas as condições testadas, o que significa que passamos por todos os caminhos (ramos) e desencadeou - o com cada condição que poderíamos-primeiro 'se' afirmação foi verdadeira no primeiro teste por causa de A=verdadeiro desencadeou-o e no último teste porque b=verdadeiro desencadeou-o. É claro que alguém pode argumentar que caso a=verdadeiro, b=true deve ser testado bem, mas quando vamos verificar como 'ou' funciona, então podemos ver que não é necessário e também variável c pode ser de qualquer valor como nesses testes não é avaliado. Pelo menos interpretei-o desta maneira. Se alguém ainda estiver interessado:)

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.

 25
Author: Faflok, 2017-03-20 02:26:05

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%.

 4
Author: Paul Rutland, 2013-02-06 09:52:02

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

enter image description here

No ramo de cobertura precisamos cobrir todas as arestas, que perdemos na instrução cobertura mostrado como linhas vermelhas na imagem acima

 4
Author: murali krish, 2017-12-13 01:19:03