Capitolo 13
Verifica e debug
Lucidi relativi al volume:
Java – Guida alla programmazione
James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Nozioni fondamentali sulla verifica
Verifica durante lo sviluppo
È più facile individuare i bug prima che dopo
I prototipi aiutano a identificare prima i problemi
Categorie di bug
Arresti anomali del software o danneggiamento dei dati
Incapacità di soddisfare le specifiche
Prestazioni scarse o inaccettabili
Difficoltà di utilizzo
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Nozioni fondamentali sulla verifica
Impossibilità di verificare
completamente un programma
Tre percorsi distinti attraverso
il programma
Se il ciclo viene eseguito 20
volte, vi sono 320 sequenze
di esecuzione diverse
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Revisioni e ispezioni
Ispezioni
Processo formale di revisione del codice
Impiegato per la prima volta da IBM nel 1976
Il lavoro precedente ha mostrato che la progettazione e le
ispezioni rimuovono il 60% dei bug in un prodotto
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Revisioni e ispezioni
Ruoli dei partecipanti
Moderatore
Esegue l'ispezione
Assicura che il processo continui
Riferisce la discussione
Assicura lo svolgimento delle azioni
Ispettore
Una persona diversa dall'autore
Interesse nel codice
Rivede attentamente il codice prima della riunione di
ispezione
Autore
Ruolo minore
Può rispondere a domande sul codice
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Revisioni e ispezioni
Ruoli dei partecipanti
Scrittore
Registra tutti gli errori rilevati
Tiene un elenco delle azioni
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Revisioni e ispezioni
Processo di ispezione
Pianificazione
Scelta del codice da rivedere
Assegnazione dei compiti da parte del moderatore
Creazione degli elenchi di controllo
Assegnazione di un presentatore da parte del
moderatore (solitamente uno degli ispettori)
Panoramica
L'autore descrive gli aspetti di alto livello del progetto
che influiscono sulla progettazione o sul codice
A volte viene ignorata (se tutti i partecipanti conoscono
già le questioni)
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Revisioni e ispezioni
Processo di ispezione
Preparazione
Lavorando individualmente, ogni ispettore rivede il
codice, annotando problemi e questioni
Non deve richiedere più di un paio d'ore
Riunione di ispezione
Il presentatore guida nel codice
I problemi vengono discussi
Lo scrittore registra tutti gli errori e le azioni
Gli errori non vengono risolti, per ora
Rapporto di ispezione
Il moderatore prepara un rapporto scritto
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Test della scatola nera e bianca
Il test della scatola bianca indica che è possibile "vedere" o
esaminare il codice durante lo sviluppo dei casi di verifica
Il test della scatola nera indica che non è possibile esaminare
il codice durante l'ideazione dei casi di verifica
La vista del codice può influenzare i casi di verifica creati
Obbliga i collaudatori a utilizzare le specifiche, piuttosto
che il codice
Tecniche complementari
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Test della scatola nera e bianca
Condizioni di confine dei test
public static int binarySearch(char[] data, char key) {
int left = 0;
int right = data.length - 1;
while (left <= right) {
int mid = (left + right)/2;
if (data[mid] == key) {
return mid;
}
else if (data[mid] < key) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return data.length;
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Test della scatola nera e bianca
Condizioni di confine
// convalida l'input
if ((year < CALENDAR_START) || (month < 1) || (month > 12)) {
System.output.println("Bad request: " + year + ""
+ month);
return;
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Test della scatola nera e bianca
Suggerisce i seguenti test di confine
Anno di
input
Mese di input
1582
2
1583
0
1583
13
1583
1
1583
12
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Test della scatola nera e bianca
Copertura o test del percorso:
creare casi di verifica che
provochino l'esecuzione di
ogni confine del grafico
relativo al flusso di controllo
del programma
Esempio
if (x != y) {
y = 5;
if (x != 3)
y=5
z=z-x
}
else {
z = z - z;
if (x != 3)
}
if (x > 1) {
z = z / x;
}
else {
z = 0;
}
y=5
y=5
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Test della scatola nera e bianca
Suggerimenti per la verifica
Eseguire subito i test
Utilizzare l'ispezione
Verificare i confini
Verificare le condizioni eccezionali
Fare in modo che i test siano facilmente ripetibili
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Verifica dell'integrazione e del sistema
La verifica dell'integrazione viene svolta durante
l'assemblaggio di componenti o moduli.
Tenta di garantire che le parti funzionino insieme
correttamente
Verifica le interfacce tra i moduli
La verifica del sistema avviene quando l'intero sistema viene
messo insieme
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Debug
Utilizzare il metodo scientifico
Raccogliere i dati
Sviluppare un'ipotesi
Eseguire esperimenti
Predire nuovi fattori
Eseguire esperimenti
Provare o smentire le ipotesi
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Debug
Suggerimenti e tecniche
Semplificare il problema
Stabilizzare l'errore
Individuare l'errore
Spiegare il bug a qualcun altro
Riconoscere i bug comuni
Superamento dell'indice
Dereferenziamento di null
Ricompilare tutto
Raccogliere ulteriori informazioni
Prestare attenzione agli avvisi del compilatore
Correggere i bug individuati
Prendersi una pausa