Pourquoi ne pas utiliser le mot bug au lieu de l'exception? [fermé]

18

Si nous appelons les exceptions des bogues, pourquoi ne pas simplement l'appeler un bogue en premier lieu au lieu d'une exception?

Si dans le code, il est appelé exception et dès qu'il se produit, il est appelé bogue. Alors pourquoi ne pas l'appeler un bug en premier lieu?

Merci pour toute réponse ou commentaire.

Niklas
la source
J'espère que les détails techniques que je mentionne aident à clarifier la distinction entre une exception et un bogue. Great questionn BTW, +1
Jeremy Thompson
1
En fait, je ne sais pas comment on pourrait les confondre, car ce sont des choses très différentes. Les exceptions sont des cas traités par le code, qui indiquent une sorte d'erreur. Généralement, des erreurs de nature vague, pas exactement explicables, etc. - Alors que les bugs ... un bug est par définition non géré par le code lui-même. Ce ne sont même pas des erreurs, elles indiquent un manque de logique là où ça ne devrait pas être.
tvCa
1
@NiklasRtz: Pourquoi l'énorme prime? Des tonnes de gens auraient répondu malgré tout.
ThePopMachine
@ThePopMachine Parce que j'aime les énormes primes pour les questions que d'autres personnes pourraient trouver intéressantes. Je demande mes questions "populaires" et je réponds autant que possible. J'ai reçu beaucoup d'aide des bonnes et amusantes questions et réponses. Je suis également en train de préparer une nouvelle question sur la gestion des erreurs et les codes d'erreur pour ces programmeurs. les codes d'erreur, la qualité des défauts et la dénomination des parties de code.
Niklas

Réponses:

93

Eh bien, c'est assez simple: toutes les exceptions ne sont pas des bogues (et de même, tous les bogues ne se manifestent pas comme des exceptions).

Comme exemple d'une exception qui n'est pas un bug, si vous lisez un fichier à partir d'un lecteur USB et que quelqu'un arrache le lecteur du socket. Cela va déclencher une exception (dans la plupart des langues qui prennent en charge les exceptions, c'est-à-dire). Mais ce n'est pas un bug dans le code.

Inversement, un bogue peut se manifester comme une erreur de calcul ou quelque chose. Vous obtenez toujours une réponse, ce n'est tout simplement pas la bonne.

Cela dit, une exception qui fait son chemin jusqu'au sommet de la pile est probablement un bug. Dans mon exemple USB ci-dessus, vous devriez pouvoir intercepter cette exception et présenter une belle erreur à l'utilisateur disant "Nous n'avons pas pu lire le fichier car il n'est plus connecté." ou quelque chose. Si vous leur présentez simplement un IOExceptioncode d'erreur génial, c'est un bug. Mais l'exception elle-même ne l'est pas.

Dean Harding
la source
1
Vous avez raison même quand je regarde comment je le fais: si une méthode échoue à obtenir le nom de la ville la plus proche (Los Angeles), elle intercepte une exception et renvoie le nom de la zone administrative plus grande (par exemple la Californie) mais puisqu'elle s'applique à n'importe quelle coordonnée, un endroit sans ville proche n'est pas un bug, c'est une exception. Êtes-vous d'accord?
Niklas
1
@ Nicke: Oui, je suis d'accord avec ça.
Dean Harding
1
Présenter une IOException et un code d'erreur n'est pas toujours un bug. C'est un diagnostic. Je le fais souvent pour les scripts personnels, où l'échec signifie que je mets juste des arguments incorrects.
Thomas Eding
23

Clair et simple, une exception n'est pas (toujours) un bug!

Une exception est levée (ou devrait l'être) lorsque quelque chose d'exceptionnel se produit. S'il y a un problème avec mon disque dur et qu'un fichier ne peut pas être écrit, ce n'est pas un bug. C'est une défaillance du matériel.

Un bug est généralement le résultat d'une mauvaise programmation. Si une application fait quelque chose qui n'est pas attendu à la suite d'une erreur de programmation, c'est un bogue.


la source
1
Hé, nous avons répondu presque en même temps, et avec essentiellement le même exemple :-)
Dean Harding
5
@DeanHarding Les grands esprits pensent de même, oui? : D
1
Bien que je sois d'accord avec votre première phrase, je dois être en désaccord avec votre dernière phrase. Le premier bug informatique (bien qu'apocryphe) était, en fait, un papillon coincé entre les points d'un relais. En quoi un disque dur défectueux est-il différent?
Scott Whitlock
1
@ScottWhitlock Je suppose que "bug" a plus d'une définition. J'ai toujours supposé qu'il signifiait des erreurs causées par des humains: en.wikipedia.org/wiki/Software_bug
1
@ScottWhitlock: et soi-disant les programmeurs diraient "pas ma faute, doit être un bug", qui s'est retourné contre "bug" est venu pour signifier une faute logicielle. Aujourd'hui, une défaillance matérielle ne serait pas appelée un bogue, bien qu'un bogue puisse entraîner une défaillance matérielle.
jmoreno
20

Ce n'est pas la même chose.

Un bug est un comportement involontaire d'un logiciel: le logiciel ne fait pas ce qu'il est censé faire. Les bogues peuvent survivre à tous les niveaux de développement logiciel, allant de simples fautes de frappe à des erreurs logiques à des spécifications fonctionnelles inadéquates.

Une exception , en revanche, peut se référer à une condition inhabituelle d'un programme, s'écartant du fonctionnement normal, ou, plus spécifiquement, à la construction du langage utilisée pour signaler et gérer de telles conditions.

Le fait qu'une exception se produise peut être le signe d'un bug, mais ce n'est souvent pas le cas. Par exemple, une application qui est censée télécharger un document à partir d'une URL et le traiter localement peut lever une exception lorsque le serveur distant est en panne: l'application s'écarte du fonctionnement normal (elle ne peut pas télécharger et traiter le document), mais si elle gère correctement l'exception et récupère, il n'y a donc pas de bogue.

Inversement, la présence d'un bogue ne se manifeste pas nécessairement comme une exception. Une application peut ignorer silencieusement les données que vous saisissez au lieu de les stocker dans sa base de données; aucune exception n'est levée, mais c'est toujours un bug.

tdammers
la source
+1 pour définir vos conditions. En général, les gens devraient le faire plus souvent!
yfeldblum
C'est certainement la réponse la plus claire. très clair et concis. Bon travail!
Locke
5

Les exceptions et les bogues ne sont pas du tout liés. Bien sûr, parfois vous lancez une exception et cela signifie un bug. Mais parfois, cela signifie simplement une circonstance exceptionnelle et inhabituelle, qui n'est pas nécessairement un bug dans le programme. Surtout dans un langage d'exception comme Java, où chaque opération standard et son chien lève environ cinq exceptions différentes - par exemple, l'ouverture du fichier a échoué, la lecture du fichier a échoué, etc.

DeadMG
la source
3

Les exceptions ne sont pas toujours liées aux bogues. Considérez-le comme quelque chose qui pourrait mal tourner avec ce que vous faites.

Un exemple qui me vient à l'esprit est InetAddress.getByName () qui est utilisé pour résoudre un nom de domaine. Si quelque chose se produit et qu'une UnknownHostException est levée, ce n'est pas vraiment un problème de code.

pseudo
la source
2

Un bogue logiciel est le terme commun utilisé pour décrire une erreur, une faille, une erreur, une panne ou une défaillance dans un programme ou un système informatique qui produit un résultat incorrect ou inattendu, ou fait en sorte qu'il se comporte de manière involontaire. Cela pourrait même être une faute d'orthographe sur une étiquette.

Les exceptions sont différentes des bogues. Chaque type d'exception (violation d'accès, débordement de pile, etc.) peut être déclenché sur un débogueur en tant qu'exception de «première chance» ou de «seconde chance». Les exceptions de première chance sont, par définition, non fatales à moins qu'elles ne soient pas gérées correctement avec un gestionnaire d'erreurs, auquel cas elles sont à nouveau levées en tant qu'exception de seconde chance (que seul un débogueur peut gérer).

Si aucun débogueur ne gère une exception de seconde chance, l'application est fermée.

Jeremy Thompson
la source
2

Vous pourriez légitimement soulever une exception vous-même, nous espérons que vous n'introduirez jamais un bogue exprès.

Alan B
la source
cela ressemble plus à un commentaire, voir Comment répondre
gnat
1
La concision ne signifie pas que ce n'est pas une réponse qui met en évidence la différence entre les deux choses.
Alan B
1

Toutes les exceptions ne sont pas des bogues. Il peut être un sujet de débat que tous les bogues soient des exceptions ou non.

Nous pouvons dire que les exceptions sont les événements qui ne font pas partie du flux d'application normal ou attendu. Ces événements peuvent être indépendants de la façon dont le code est écrit alors qu'un bogue est essentiellement le résultat d'un mauvais code (comme un mauvais calcul).

Voici un exemple de la façon dont ne pas gérer une exception peut être un bogue.

Supposons qu'il existe un programme qui écrit des données sur un périphérique de stockage externe. Lors de l'écriture, le périphérique de stockage externe a été débranché, s'est écrasé ou peut être détruit (pour une raison quelconque). Maintenant, c'est un cas exceptionnel, maintenant que le langage de programmation supporte une gestion exceptionnelle ou non si le programme plante ou se conduit mal à cause de cet événement, c'est un bug. (L'utilisateur final peut ne pas avoir idée de ce qui s'est passé. Il est également très désagréable) . Mais si le programme abandonne le processus gracieusement, informez l'utilisateur (en d'autres termes, gérez l'exception), ce n'est clairement pas un bogue.

Les langages de programmation try catch machanism fournissent est essentiellement un outil pour faciliter notre sortie pour gérer les événements inattendus.

Rajat Saini
la source
1

Synopsis : Les exceptions sont la preuve de mauvais résultats, les bogues sont (certaines des) causes de mauvais résultats. Le problème (à résoudre) n'est pas l'exception, c'est le problème qui a provoqué l'exception.

Resoning: Un bug est un défaut dans la conception ou l'implémentation d'un produit (non limité au logiciel). Par exemple, ne pas utiliser un relais correctement évalué (temps / sensibilité / fiabilité / capacité) en raison de spécifications incorrectes ou d'une simple erreur de construction. Une exception est une déviation du monde réel / durée de fonctionnement par rapport au comportement prévu (oserais-je dire «attendu»?), Par exemple, la perte de contrôle d'un véhicule pendant la conduite.

De toute évidence, un bogue peut provoquer une exception car l'exemple en 1) pourrait conduire à l'exemple en 2). Mais toutes les exceptions ne seraient pas causées par des bogues, par exemple, la perte de contrôle d'un véhicule en raison d'un accident vasculaire cérébral.

Kristian H
la source
0

Étant donné que cette question a été rouverte pour une prime, permettez-moi de mentionner mon article CUJ de 2003 intitulé "Une exception ou un bug?", Qui semble répondre exactement à la question du PO.

Fondamentalement, l'article définit les termes «bogue» et «exception» (en donnant des exemples) et propose des stratégies pour traiter chacun d'eux.

L'article propose de ne pas «gérer» les bogues mais plutôt de les signaler avec des assertions. En revanche, les vraies exceptions nécessitent une gestion par le biais du code (éventuellement lever / intercepter des exceptions).

Le point principal est que les bogues nécessitent la stratégie opposée exacte aux exceptions.

L'article susmentionné est maintenant disponible chez Dr.Dobb's à: http://www.drdobbs.com/an-exception-or-a-bug/184401686

Miro Samek
la source