Share via


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

  1. 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.

  2. 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

  1. 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
    
  2. 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

Riferimenti

Operatore / (Visual Basic)