Bogue supplémentaire : quelque chose ne fonctionne toujours pas

Mise à jour : novembre 2007

Dans cette leçon, vous apprendrez à localiser une erreur de logique qui ne se produit que dans certaines situations.

Dans la leçon précédente, Comment ? Je n'étais pas censé faire cela ! Identification des erreurs de logique, vous avez appris comment rechercher et corriger une erreur dans la logique. L'exemple de code de cette leçon dissimule un bogue encore plus difficile à trouver, dans la mesure où il ne se produit que dans certaines situations.

Test d'un programme

En tant que programmeur, lorsqu'il s'agit de tester votre programme pour savoir s'il se comporte comme vous le souhaitez, vous partez avec un handicap. Vous savez comment il doit fonctionner ; aussi est-il improbable que vous fassiez une erreur susceptible de dévoiler une erreur de logique. En revanche, un utilisateur peu familiarisé avec le programme peut et va effectuer des opérations auxquelles vous n'auriez pas pensé.

Par exemple, dans un programme qui calcule une vitesse en miles par heure en divisant le nombre de miles parcourus par le nombre d'heures écoulées lors du trajet, que se passe-t-il si l'utilisateur entre la valeur zéro pour les heures ou les miles ? Essayons pour voir.

Essayez !

Pour tester le programme

  1. Ouvrez le projet LogicErrors créé dans la leçon précédente, Comment ? Je n'étais pas censé faire cela ! Identification des erreurs de logique.

    Remarque :

    Si vous n'avez pas terminé ou enregistré le projet précédent, vous devez revenir en arrière et l'achever pour pouvoir poursuivre.

  2. Appuyez sur F5 pour exécuter le programme. Dans la première zone de texte, entrez 0 (pour représenter les minutes) et dans la deuxième, entrez 5 (pour représenter cinq miles), puis cliquez sur Button1.

    Un message s'affiche et indique une vitesse moyenne infinie : "Average speed Infinity".

    Laissez le projet ouvert ; dans la procédure suivante, vous apprendrez comment trouver l'erreur de logique.

5 divisé par 0 = l'infini ?

Dans la procédure précédente, l'infini peut ne pas être ce que vous attendiez, pourtant sa valeur est mathématiquement correcte : 5 contient un nombre infini de fois la valeur 0. Il n'en demeure pas moins que ce n'est pas le résultat que vous souhaitez présenter aux utilisateurs de votre programme. Voyez-vous un moyen d'empêcher cette situation ?

Vous pouvez envisager l'ajout d'un gestionnaire d'erreurs (procédure que vous avez apprise dans la leçon Opération à effectuer en cas de problème : gestion des erreurs). Toutefois, cela ne fonctionnerait pas dans ce cas-ci. Le résultat « infini » n'est pas une erreur ; ce n'est simplement pas ce que vous souhaitez obtenir.

Sachant que l'affichage d'une vitesse nulle est vraisemblablement inutile, vous pouvez résoudre le problème en appliquant un test à la valeur zéro, puis en avertissant l'utilisateur qu'il doit saisir une valeur supérieure. Tant que vous y êtes, vous pouvez également empêcher l'utilisateur d'entrer des nombres négatifs, car ceux-ci peuvent également produire un résultat erroné.

Dans la procédure suivante, vous modifierez le code du gestionnaire d'événements Button1_Click pour appeler la fonction GetMPH uniquement lorsque les valeurs sont supérieures à zéro.

Essayez !

Pour corriger le bogue

  1. Dans l'éditeur de code, modifiez le code dans le gestionnaire d'événements Button1_Click comme suit :

    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. Appuyez sur F5 pour exécuter à nouveau le programme. Dans la première zone de texte, entrez 0, et dans la deuxième zone de texte, entrez 5. Ensuite, cliquez sur Button1.

    Le message qui vous invite à entrer un nombre supérieur à zéro doit s'afficher. Essayez de tester votre programme avec d'autres combinaisons de nombres jusqu'à ce que vous soyez satisfaits de la correction de l'erreur.

Étapes suivantes

Dans cette leçon, vous avez appris comment rechercher et résoudre une erreur de logique qui provoque un comportement inattendu. Dans la leçon suivante, vous apprendrez comment utiliser des commentaires dans votre code.

Leçon suivante : Prise de notes dans vos programmes : utilisation des commentaires

Voir aussi

Tâches

Comment ? Je n'étais pas censé faire cela ! Identification des erreurs de logique

Opération à effectuer en cas de problème : gestion des erreurs

Connaissance des bogues : trois types d'erreurs de programmation

Recherche des erreurs : introduction au débogage Visual Basic

Référence

/, opérateur (Visual Basic)