Un altro bug: errori difficili da individuare
Aggiornamento: novembre 2007
In questa lezione verrà descritto come rilevare un errore logico che si verifica solo in determinate situazioni.
Nella lezione precedente Comportamento imprevisto del programma: ricerca di errori logici è stato descritto come individuare e correggere un errore nella logica. Nel codice di esempio di tale lezione è ancora presente un errore, che è più difficile da individuare perché si verifica solo in determinate situazioni.
Test di un programma
Al momento dell'esecuzione del test del programma creato per verificare se funziona come previsto, il programmatore si trova in una posizione di svantaggio. Il programmatore conosce infatti il funzionamento previsto ed è pertanto improbabile che commetta un errore in grado di rivelare un problema nella logica. Un utente che non ha familiarità con il programma esegue invece operazioni che non erano state previste dal programmatore.
Nella procedura riportata di seguito, ad esempio, viene descritto che cosa succede se in un programma che calcola le miglia orarie dividendo il numero di miglia percorse per il numero di ore richieste dal viaggio un utente immette il valore zero per le ore o le miglia.
Procedura
Per testare il programma
Aprire il progetto LogicErrors creato nella lezione precedente Comportamento imprevisto del programma: ricerca di errori logici.
Nota: Se il progetto non è stato completato o salvato, tornare alla lezione precedente e completarlo prima di continuare.
Premere F5 per eseguire il programma. Immettere 0 nella prima casella di testo per indicare il numero di minuti e 5 nella seconda casella di testo per indicare le miglia, quindi fare clic su Button1.
Verrà visualizzata una finestra di messaggio per segnalare che il valore della velocità media è infinito.
Tenere aperto il progetto perché nella procedura successiva verrà descritto come individuare l'errore logico.
Correzione del problema
Nella procedura precedente, il valore infinito, pur non essendo il risultato previsto, è matematicamente corretto perché 0 è contenuto nel numero 5 un numero infinito di volte. Agli utenti si desidera però visualizzare un risultato diverso ed è necessario trovare a soluzione a questo inconveniente.
Si potrebbe ad esempio aggiungere un gestore errori, in base a quanto descritto nella lezione Definizione del codice per la gestione degli errori. In questo caso, non sarebbe tuttavia la soluzione corretta: il valore infinito non è un errore, ma non è il risultato desiderato.
Poiché probabilmente non è di alcuna utilità indicare una velocità pari a zero, una possibile soluzione del problema consiste nell'eseguire il test di un valore pari a zero e nell'avvisare l'utente che è necessario immettere un numero maggiore. Mentre si scrive questo codice si può anche impedire all'utente di immettere numeri negativi, che genererebbero anch'essi un risultato fuorviante.
Nella procedura successiva verrà modificato il codice nel gestore eventi Button1_Click in modo da chiamare la funzione GetMPH solo se i valori sono maggiori di zero.
Procedura
Per correggere l'errore
Nell'editor di codice modificare il codice del gestore eventi Button1_Click come illustrato di seguito:
Dim minutes As Integer = CInt(Textbox1.Text) Dim miles As Double = CDbl(Textbox2.Text) Dim hours As Double = 0 If minutes <= 0 Or miles <= 0 Then MsgBox("Please enter a number greater than zero") Else hours = minutes / 60 MsgBox("Average speed " & GetMPH(miles, hours)) End If
Premere F5 per eseguire di nuovo il programma. Immettere 0, nella prima casella di testo e 5 nella seconda casella di testo. Fare clic su Button1.
Verrà visualizzata la finestra di messaggio con la richiesta di immettere un numero maggiore di zero 0. Provare a eseguire il test del programma con altre combinazioni di numeri finché non si è certi che l'errore sia stato corretto.
Passaggi successivi
In questa lezione è stato descritto come cercare e correggere un errore logico che causa un comportamento imprevisto. Nella lezione successiva verrà descritto come utilizzare commenti nel codice.
Lezione successiva: Inserimento di note nei programmi: utilizzo dei commenti
Vedere anche
Attività
Comportamento imprevisto del programma: ricerca di errori logici
Definizione del codice per la gestione degli errori
Cenni preliminari sugli errori: tre tipi di errori di programmazione
Ricerca di errori: introduzione al debug in Visual Basic