La copertura delle condizioni ha una copertura marginale?

1

Sono un po 'confuso riguardo ai criteri di copertura del codice ; in particolare condizioni e copertura dei bordi.

Come indicato in questo libro , la copertura del bordo non sussume copertura delle condizioni; MA il materiale della mia lezione definisce la copertura delle condizioni nel modo seguente:

Criterio di copertura del bordo: seleziona un set di test T tale che, eseguendo un programma P per ogni d in T , ogni limite del controllo di P il grafico del flusso viene attraversato almeno una volta

Criterio di copertura delle condizioni: Seleziona un set di test T tale che, eseguendo P per ogni elemento in T , ogni grafico del flusso di controllo di P sia attraversato e tutti i possibili valori dei costituenti delle condizioni booleane composte vengono esercitati almeno una volta.

Quindi, la prima parte della definizione di copertura delle condizioni è ovviamente la stessa dell'intera definizione di copertura del bordo. Quindi, ho pensato che la copertura delle condizioni implicasse una copertura marginale ...

La definizione è rotta? Che cosa è corretto?

    
posta 0xbadf00d 29.12.2013 - 15:12
fonte

1 risposta

2

In base alle tue definizioni, sembra che la copertura dei bordi non implichi la copertura delle condizioni, ma la copertura delle condizioni implica una copertura dei margini. In altre parole, coprendo tutte le condizioni, sarai garantito per coprire ogni margine; ma coprendo ogni lato, non è garantito che copra ogni condizione.

Ad esempio,

int function(int arg1, int arg2)
{
    if(arg1 < 0 || arg2 < 0)
        return -1;
    else
        return arg1 + arg2;
}

Passando per copertura laterale, i bordi qui sono "return -1", e "return arg1 + arg2"; per coprire entrambi questi bordi, sono necessarie solo due invocazioni:

function(-1, 0); function(0, 0);

Tuttavia, ci sono tre condizioni (considerando la logica di cortocircuito booleana): arg1 < 0 , arg1 >= 0 && arg2 < 0 e arg1 >= 0 && arg2 >= 0 , quindi per ottenere la copertura completa delle condizioni occorrerebbe qualcosa del tipo:

function(-1, 0); function(0, -1); function(0, 0);

La distinzione principale nelle definizioni che hai pubblicato è "e tutti i possibili valori dei componenti delle condizioni booleane composte vengono esercitati almeno una volta". Coprendo tutte le condizioni ti assicurerai di colpire tutti i bordi. Ma come vedi, coprire tutti i bordi non ti assicura di raggiungere tutte le condizioni.

    
risposta data 29.12.2013 - 15:46
fonte

Leggi altre domande sui tag