Esiste un nome per questa tecnica nei test? [chiuso]

1

Quando ho scritto dei test per un certo codice e voglio assicurarmi che stia effettivamente testando cosa dovrebbe fare, rovinerò o rimuoverò il codice sotto test, e vedrò se i test falliscono. Se non lo fanno, ho un problema.

C'è un nome per questa tecnica? È una vera seccatura dover parlare con frasi ogni volta che voglio suggerire a qualcuno che lo facciano.

    
posta Alistair 09.05.2014 - 04:38
fonte

1 risposta

6

Stai cercando test sulle mutazioni.

L'idea del test delle mutazioni consiste nel verificare che il codice possa essere modificato per causare il fallimento del test, come hai sottolineato. Un esempio è come tale:

public double getDiscountedRate(int age, int employmentDurationInMonths) {
    return age < 30 || employmentDurationInMonths < 18 ? 0.2 : 0.05;
}

Quindi, se abbiamo questo test:

@Test
public void canGetCorrectDiscountedRate() {
    assert getDiscountedRate(29, 24) == 0.2;
}

L'asserzione sarà vera. Se la formula è modificata come tale:

public double getDiscountedRate(int age, int employmentDurationInMonths) {
    return age < 30 && employmentDurationInMonths < 18 ? 0.2 : 0.05;
}

Quindi ci aspettiamo che l'asserzione sia falsa ora. Questo aiuta quando può esserci un errore incauto nel metodo, come (modifica post-operatore):

public double getDiscountedRate(int age, int employmentDurationInMonths) {
    return age < 30 && employmentDurationInMonths < 18 ? 0.2 : 0.2; // where is 0.05?
}

In questo, il fatto che l'asserzione non abbia fallito per il codice modificato permetterà allo sviluppatore di sapere che stava restituendo erroneamente lo stesso tasso di sconto anche quando la condizione è falsa.

L'articolo di Wikipedia sui test delle mutazioni ha anche indicato utile 'fault injection' come articolo correlato.

    
risposta data 09.05.2014 - 05:29
fonte

Leggi altre domande sui tag