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