Capitolo 13 Verifica e debug Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 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 © 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 3 20 sequenze di esecuzione diverse
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 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 © 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 © 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 © 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 © 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 © 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 © 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 © The McGraw-Hill Companies srl Test della scatola nera e bianca Condizioni di confine // convalida l'input if ((year 12)) { System.output.println("Bad request: " + year + "" + month); return; }
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Test della scatola nera e bianca Suggerisce i seguenti test di confine Anno di input Mese di input
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 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; } else { z = z - z; } if (x > 1) { z = z / x; } else { z = 0; } if (x != 3) y = 5z = z - x if (x != 3) y = 5
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 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 © 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 © 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 © 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