Quali sono gli esempi pratici delle tecniche di esplorazione del codice?

6

Code Exploration (CE) è un termine abbastanza nuovo e mi chiedo se esistono già esempi riusciti di implementazione di queste tecniche in termini di principi di integrazione continua?

In breve, Code Exploration può essere descritto come il processo di test del codice utilizzando diversi parametri per ottenere un'elevata copertura del codice. Lo strumento one-and-only per .NET è PEX , ma so che ci sono strumenti commerciali per l'esplorazione del codice nel mondo java.

Questo argomento è molto potente in congiunzione con Design by Contract , perché ti fornisce i mezzi di un certo formalismo in ragionamento sulla correttezza del codice. Ad esempio PEX mostrerebbe che il codice successivo contiene un errore (il codice sorgente utilizza Contratti di codice e presumo l'inadempienza configurazione di assemblaggio):

public int Factorial(int number)
{
    //postcondition of positive result, precondition is omitted 
    Contract.Ensures( Contract.Result<int>() > 0 ); 

    return number <= 0 ? 1 : number * Factorial( number - 1 );
}

Poiché per impostazione predefinita l'overflow non viene controllato nelle operazioni aritmetiche, l'input 17 darà il risultato di -288522240.

PEX è stato discusso qui più volte qui:

Ma non voglio toccare i dettagli di implementazione interna, sono interessato agli aspetti pratici di questo problema.

Le domande principali sono:

  1. In che modo esattamente integri l'esplorazione del codice con l'integrazione continua?

  2. Rifiuta la build se PEX dà errori o comunichi al team incoerenze e violazioni dei contratti?

  3. Scott Hanselman ha affermato che PEX dovrebbe funzionare su una macchina separata (o su più macchine) che verifica continuamente il codice per gli errori (la cosiddetta Continuous Exploration). Puoi ascoltare la conversazione Hanselminutes Podcast 93 - Pex . Esistono implementazioni pratiche di macchine dedicate (sarebbe virtuale o fisico), che scavano nella base di codice in cerca di errori?

  4. Come tratti la copertura di test di tali strumenti? Penso che sarebbe irragionevole unire i risultati della copertura del codice per i test unitari scritti manualmente con i risultati da uno strumento di esplorazione del codice.

  5. Esistono esempi di Test unitari parametrizzati in progetti reali, ciò aumenterebbe la produttività e la qualità dei test unitari?

posta Ilya Ivanov 22.08.2012 - 08:55
fonte

1 risposta

2

Anche se disponi di uno strumento per il controllo dei confini, puoi generare i tuoi test unitari, sono ancora solo test unitari.

  1. Do you reject build if PEX gives errors or you notify team about inconsistencies and contracts violations?

Hai attivato il check-in per gli altri test di unità?


Questo in realtà non è un nuovo concetto distinto che ha bisogno di noi per creare nuove regole per gestirlo. Sta solo migliorando i test unitari che avremmo dovuto scrivere se non fossimo troppo pigri o troppo ingenui su come i casi d'angolo influiscano sulla qualità del codice.

    
risposta data 22.08.2012 - 15:15
fonte