Testing e debugging Validazione (1) IL problema


Per esempio se un programma deve trovare la radice di un polinomio è facile scrivere un driver che verifica se i valori restituiti sono radici oppure no. Similmente è facile verificare i risultati di



Scaricare 460 b.
Pagina36/36
29.03.2019
Dimensione del file460 b.
1   ...   28   29   30   31   32   33   34   35   36

Per esempio se un programma deve trovare la radice di un polinomio è facile scrivere un driver che verifica se i valori restituiti sono radici oppure no. Similmente è facile verificare i risultati di sqrt facendo un calcolo.

  • Spesso oltre che i driver il testing usa stub. Un driver simula la parte del programma che chiama l’unità sotto test, lo stub simula le parti del programma chiamate dall’unità sotto test. Uno stub deve:

  • 1. Controllare la ragionevolezza dell’ambiente fornito dal chiamante

  • 2. Controllare la ragionevolezza degli argomenti passati dal chiamante

  • 3. Modificare gli argomenti e l’ambiente e restituire valori cosicché il chiamante possa proseguire. E` meglio se questi effetti si accordano con la specifica dell’unità che lo stub simula. Questo non è sempre possibile, il valore "giusto" si può trovare solo scrivendo il programma che lo stub deve rimpiazzare e ci si deve accontentare di un valore "ragionevole".



  • Testing di unità, di integrazione e di regressione

    • • Il testing di unità fà il test di un singolo modulo isolato dagli altri. Richiede:

    • - un driver che fà il test automatico del modulo

    • - stub che simulano il comportamento di tutti i moduli che il modulo usa.

    • • Il testing di integrazione fà il test di un gruppo di muduli assieme.

    • • Il testing di regressione consiste nell’eseguire di nuovo tutti i test dopo che ciascun errore è stato corretto.



    Debugging

    • Debugging è il processo di capire e correggere gli errori.

    • Quando facciamo il debugging cerchiamo di restringere l’ambito del problema cercando semplici casi di test che manifestano l’errore e a cercare valori intermedi che aiutino a localizzare nel codice la regione responsabile dell’errore.

    • Come raccogliamo evidenza sull’errore formuliamo ipotesi che tentiamo di refutare eseguendo test ulteriori.

    • Quando pensiamo di capire le cause dell’errore studiamo la regione appropriata del codice per trovare e correggere l’errore.



    Defensive programming

    • Il debugging può esere facilitato se pratichiamo una programmazione "defensive" che consiste nell’inserire controlli nel programma per rivelare errori che potrebbero capitare.

    • In particolare dovremmo controllare che sia soddisfatta la clausola REQUIRES. E` anche opportuno controllare l’invariante di rappresentazione.

    • Questi controlli dovrebbero essere mantenuti, se possibile, nel codice di produzione.



    Testing, debugging e defensive programming

    • • Testing è un modo per validare la correttezza del programma.

    • • Debugging è il processo di trovare e rimuovere errori.

    • • Defensive programming consiste nell’inserire dentro il programma controlli per rivelare errori e rende molto piú facile il debugging.





    Condividi con i tuoi amici:
    1   ...   28   29   30   31   32   33   34   35   36


    ©astratto.info 2019
    invia messaggio

        Pagina principale