qual è il significato dell'infezione nei test di mutazione?

-1

Ho ricevuto il seguente codice:

nel libro di testo che sto leggendo dice che per un infezione che si verifica, delta 1 di mutazione, dovrebbe essere che il valore di A deve essere diverso dal valore di B. A questo punto mi perdo, per quello che ho conoscere la condizione di infezione nei test di mutazione appare quando c'è un cambiamento nello stato di un programma.

Nel codice mutato questa infezione sta accadendo perché quando A è diverso da B, ciò comprometterebbe la sezione if che dice if b<minVal ? in tal caso, qual è il vero significato dell'infezione nei test di mutazione? Per favore, se qualcuno può fornire alcuni esempi sarebbe bello.

Grazie

    
posta asgard 09.06.2018 - 18:11
fonte

1 risposta

3

for an infection to occur, mutation delta 1, it should be that the value of A must be different from the value of B. At this point I get lost

Il libro di testo in questione sembra voler dire che se B == A, cambiando minVal = A in minVal = B in realtà non muta nulla nello stato del programma, perché la mutazione sarebbe equivalente all'originale.

Come dici tu: "la condizione di infezione nei test di mutazione appare quando c'è un cambiamento nello stato di un programma." - quando la mutazione è uguale all'originale, ad esempio quando si modifica una variabile in una uguale altra variabile, non si è verificata alcuna alterazione dello stato effettivo .

What is the real meaning of infection in mutation testing?

Il test di infezione è essenzialmente un test della tua suite di test. Eseguendo test di infezione, si eseguono i test di unità contro una versione leggermente mutata del codice che presumibilmente verifica. Se il codice mutato supera i test, potresti avere alcuni test fragili nella tua suite: a quanto pare i tuoi test passano anche quando il codice non fa ciò che è previsto che faccia!

Un semplice esempio di test di infezione sarebbe questo test di esempio:

assert(!3.isGreaterThan(3));

Implementato in questo modo:

return this > input;

Questo esempio estremamente semplificato produrrebbe una copertura del 100% del codice in termini di linee eseguite durante il processo di test.

Un framework per test di mutazione, tuttavia, noterebbe rapidamente che anche il seguente passaggio avrebbe:

return this < input;

La mutazione, che ha completamente cambiato l'intenzione del metodo in questione, supera il test. Pertanto, il test non fallisce quando le intenzioni e le aspettative del codice non vengono soddisfatte.

È importante notare che solo le mutazioni che effettivamente cambiano l'intento del codice sono mutazioni "reali": una mutazione che vedrebbe passare i test quando il cambiamento del codice nel seguente non è infetto:

return input < this;

Modifica: probabilmente è importante notare che nell'esempio da manuale, delta 1, 2, 3, 4, 5 e 6 sono ciascuno una mutazione separata per conto proprio. Dato l'esempio, quando si esegue una suite di test delle infezioni, i test verranno eseguiti 6 volte.

    
risposta data 17.08.2018 - 12:16
fonte

Leggi altre domande sui tag