Erreur de programmation
Une erreur de programmation de (ou juste " ; bug" ;) est une erreur, une paille, une erreur, un échec , ou un défaut dans un programme informatique qui l'empêche de se comporter comme prévu (par exemple, produisant un résultat incorrect). La plupart des bogues résultent des erreurs et des erreurs faites par des personnes dans le code source du d'un programme ou sa conception , et uns sont provoqués par les compilateurs produisant le code incorrect. Un programme qui contient un grand nombre de bogues, et/ou bogues qui interfèrent sérieusement sa fonctionnalité, serait le boguet . Des rapports détaillant des bogues dans un programme sont généralement connus en tant que rapports de bogue de , rapports de défaut, rapports de problème, rapports d'ennui, demandes de changement, et ainsi de suite.
Effets
Les bogues peuvent avoir une large variété d'effets, avec des niveaux de variation de dérangement à l'utilisateur du programme. Quelques bogues ont seulement un effet subtile sur la fonctionnalité du programme, et peuvent se trouver ainsi non détecté pendant longtemps. Des bogues plus sérieux peuvent causer le programme à l'accident ou le gel menant à un déni de service . D'autres qualifient comme les bogues de sécurité de et pourraient par exemple permettre à un utilisateur malveillant de dévier les contrôles d'accès afin d'obtenir des privilèges non autorisés.Les résultats des bogues peuvent être extrêmement sérieux. Un bogue dans le code commandant la machine de la thérapie radiologique de du Therac-25 était directement responsable de quelques décès patientes dans les années 80. En 1996, le la fusée d'Ariane 5 de prototype de s US$1 milliard d'agence spatiale le européen 'a été détruite moins qu'une minute après le lancement, dû à un bogue dans le programme informatique à bord de conseils. En juin 1994, un Chinook de Royal Air Force s'est écrasé dans le chauffage de Kintyre, tuant 29. Ceci a été au commencement écarté en tant qu'erreur pilote, mais une recherche par ordinateur hebdomadaire de a découvert des éléments de preuve suffisants pour convaincre une Chambre des Lords de l'enquête qu'elle a pu avoir été provoquée par une erreur de programmation dans l'ordinateur pilote de moteur du de l'avion .
Étymologie
Le concept que le logiciel pourrait contenir des erreurs remonte à 1842 en ADA de les notes que de Byron sur le moteur analytique en lequel elle parle de la difficulté de préparer le programme « carde » pour le le moteur analytique de s de Babbage Charles ':… un processus de analyse doit également avoir été effectué afin de fournir le moteur analytique avec les données effectives nécessaires ; et cela ci-dessus peut également se trouver une source d'erreur possible. Reconnaissant que le mécanisme réel est infaillible dans ses processus, les cartes peuvent lui donner des ordres faux.
Utilisation du " de limite ; bug" ; pour décrire des défauts inexplicables a été une partie de jargon de technologie pendant beaucoup de décennies et antidate les ordinateurs et le logiciel ; elle a pu avoir été à l'origine employée dans la technologie de matériel pour décrire des défauts de fonctionnement mécaniques. Par exemple, le Thomas Edison a écrit les mots suivants dans une lettre à un associé dans le 1878 :
Il a été juste ainsi en tout de mes inventions. La première étape est une intuition, et vient avec un éclat, puis arise&mdash de difficultés ; cette chose donne dehors et le est puis qui " ; Bugs" ; &mdash ; car de tels petits défauts et difficultés sont called&mdash ; l'exposition elles-mêmes et les mois de l'observation, de l'étude et du travail intenses sont requis avant que le succès ou l'échec commercial soit certainement atteint.
Des problèmes avec l'électronique de radar pendant la deuxième guerre mondiale désigné sous le nom du bogue s de (ou des problèmes), et il y a d'évidence additionnelle que l'utilisation remonte beaucoup plus tôt.
L'invention de la limite souvent est incorrectement attribuée au distributeur de grace de , qui a rendu la cause d'un défaut de fonctionnement dans un ordinateur électromécanique tôt publique. Une version typique de l'histoire est donnée par cette citation :
En 1946, quand le distributeur a été libéré du service actif, elle a joint le corps enseignant de Harvard au laboratoire de calcul où elle a continué son travail sur la marque II et des opérateurs de la marque III. a retrouvé une erreur dans la marque II à une mite emprisonnée dans un relais, inventant le bogue limite. Ce bogue a été soigneusement enlevé et attaché du ruban adhésif carnet au du 1945 du 9 septembre ''. Provenant du premier bogue, aujourd'hui nous appelons des erreurs ou le du problème '' dans un programme un bogue de .
Le distributeur n'était pas réellement la personne qui a trouvé l'insecte, car elle a aisément reconnu. Et la date était le 9 septembre , mais dans le 1947 , non 1945. Les opérateurs qui l'ont trouvée (" y compris de William ; Bill" ; Burke, plus tard du laboratoire d'armes navales, Dahlgren Va. ), étaient au courant de la limite de technologie et, amusé, maintenu l'insecte avec le " de notation ; Premier cas réel du bogue étant found." ; Le distributeur a aimé raconter l'histoire.
Tandis qu'il est certain que les opérateurs de la marque II n'aient pas inventé le " de limite ; bug" ; , on lui a suggéré qu'ils aient inventé la limite relative, " ; Le corrigent le " de ;. Même c'est peu probable, depuis l'entrée du dictionnaire de l'anglais d'Oxford de pour le " ; debug" ; contient une utilisation de " ; debugging" ; dans le cadre des moteurs d'avion en 1945 (voir l'article de l'élimination des imperfections pour plus).
Empêchement
Les bogues sont une conséquence de la nature des facteurs humains dans la tâche de programmation. Ils résultent des inadvertances faites par les informaticiens pendant la conception, le codage et la saisie de données. Par exemple : En créant un programme relativement simple pour assortir une liste de mots dans l'ordre alphabétique, sa conception pourrait échouer pour considérer ce qui devrait se produire quand un mot contient un trait d'union . Peut-être, en convertissant la conception abstraite en langage de programmation choisi, on pourrait par distraction créer un Au loin-par-un l'erreur et pour assortir le dernier mot dans la liste. En conclusion, en dactylographiant le programme en résultant dans l'ordinateur, on pourrait accidentellement dactylographier « < » où « > » a été prévu, peut-être ayant pour résultat les mots étant assortis dans l'ordre alphabétique renversé. Des bogues plus complexes peuvent résulter des interactions fortuites entre différentes parties d'un programme informatique. Ceci se produit fréquemment parce que les programmes informatiques peuvent être complexes - des millions de lignes longtemps dans certains cas - souvent programmé par beaucoup de personnes au-dessus d'une grande durée, de sorte que les programmeurs ne puissent pas dépister mentalement chaque manière possible dont les pièces peuvent agir l'un sur l'autre. Une autre catégorie de bogue appelée une condition de compétitivité de vient au sujet de l'un ou l'autre quand un processus fonctionne en plus d'un fil ou deux processus ou plus courus simultanément, et l'ordre exact de l'exécution des ordres critiques du code n'ont pas été correctement synchronisés.L'industrie de logiciel a déployé beaucoup d'efforts dans trouver des méthodes pour empêcher des programmeurs de présenter par distraction des bogues tout en écrivant le logiciel. Ceux-ci incluent :
; Modèle de programmation : Tandis que les typos dans le code de programme très probablement sont attrapés par le compilateur, un bogue apparaît habituellement quand le programmeur fait une erreur de logique. De diverses innovations dans le modèle de programmation et le de programmation défensif sont conçues pour faire ces bogues moins probablement, ou plus facile à repérer.
; Techniques de programmation : Les bogues créent souvent des contradictions dans les données internes d'un programme courant. Des programmes peuvent être écrits pour vérifier l'uniformité de leurs propres données internes tout en courant. Si une contradiction est produite, le programme peut immédiatement s'arrêter, de sorte que le bogue puisse être localisé et corrigé. Alternativement, le programme peut simplement informer l'utilisateur, essayer de corriger la contradiction, et continuer de courir.
; Méthodologies de développement : Il y a plusieurs arrangements pour l'activité de gestion de programmeur, de sorte que peu de bogues soient produits. Beaucoup de ces chute sous la discipline de la technologie de la programmation (qui aborde des issues de conception de logiciel aussi bien.) Par exemple, les caractéristiques de programme formelles sont employées pour énoncer le comportement exact des programmes, de sorte qu'on puisse éliminer des bogues de conception.
; Appui de langage de programmation : Les langages de programmation incluent souvent les dispositifs qui aident des programmeurs à avoir affaire avec des bogues, tels que la manipulation d'exception . En outre, beaucoup de langues récent-inventées ont délibérément exclu les dispositifs qui peuvent facilement mener aux bogues. Par exemple, le langage de programmation de Java ne soutient pas l'arithmétique de l'indicateur .
Élimination des imperfections
voient également :
l'élimination des imperfections
Conclusion et bogues de réparation, ou " ; debugging" ; , a toujours été une partie de programmation par ordinateur . Le Maurice Wilkes , un pionnier de calcul tôt, a décrit sa réalisation vers la fin des années 40 qu'une grande partie du reste de sa vie serait passé trouvant des erreurs dans ses propres programmes. Pendant que les programmes informatiques se développent plus complexes, les bogues deviennent plus communs et difficiles à fixer. Souvent les programmeurs consacrent plus de temps et d'effort trouvant et les bogues de réparation que le nouveau code d'écriture.
Habituellement, la partie d'élimination des imperfections la plus difficile plac la partie incorrecte du code source . Une fois que l'erreur est trouvée, la correction de elle est habituellement facile. Les programmes connus sous le nom de programmes de mise au point existent pour aider des programmeurs à localiser des bogues. Cependant, même à l'aide d'un programme de mise au point, localiser des bogues est quelque chose d'un art. Il n'est pas rare que un bogue dans une section d'un programme cause des échecs dans une section complètement différente, de ce fait la rendant particulièrement difficile à dépister (par exemple, une erreur dans une routine graphique de rendu causant une routine d'entrée-sortie de dossier à l'échouer) ; ceci le plus généralement est provoqué par les erreurs qui mènent à la corruption des instructions ou des variables de programme dans la mémoire.
Typiquement, la première étape en localisant un bogue trouve une manière de la reproduire facilement. Une fois que le bogue est reproduit, le programmeur peut utiliser un programme de mise au point ou un autre outil pour surveiller l'exécution du programme dans la région défectueuse, et trouve le point auquel le programme s'est égaré. Parfois, un bogue n'est pas une instruction défectueuse simple, mais représente une erreur de la pensée ou de la planification de la part du programmeur. De telles erreurs de logique de 'exigent d'une section du programme d'être révisée ou récrite.
Il n'est pas toujours facile de reproduire des bogues. Quelques bogues sont déclenchés par des entrées au programme il peut être difficile pour que le programmeur recrée que. Une cause des décès de machine de rayonnement du Therac-25 était un bogue qui s'est produit seulement quand l'opérateur a très rapidement écrit un plan de traitement ; cela a pris des jours de la pratique de devenir capable de faire ceci, ainsi le bogue ne s'est pas manifesté dans l'essai ou quand le fabricant a essayé de le reproduire. D'autres bogues peuvent disparaître quand le programme est lancé avec un programme de mise au point ; ce sont Heisenbugs (plein d'humour baptisé du nom du principe d'incertitude de Heisenberg .)
L'élimination des imperfections est toujours une tâche pénible exigeant la main d'oeuvre considérable. Depuis les années 90, particulièrement suivantes le désastre du vol 501 d'Ariane 5 de , il y a eu un intérêt remplacé pour le développement des aides automatisées efficaces à l'élimination des imperfections. Par exemple, les méthodes d'analyse statique de code de par l'interprétation d'abrégé sur ont déjà fait des accomplissements significatifs, tout en restant toujours beaucoup des travaux en cours.
Bogues de gestion
Il est pratique commune pour que le logiciel soit libéré avec les bogues connus qui sont considérés non critiques. Tandis que les logiciels contiennent un nombre inconnu de bogues inconnus une fois transportées, les mesures pendant l'essai peuvent fournir une évaluation statistiquement fiable du nombre de rester probable de bogues. La plupart des grands projets de logiciel maintiennent une liste de " ; bugs" connu ;. Cette liste informent des utilisateurs au sujet des bogues qui ne sont pas corrigés dans la version actuelle, ou non fixe du tout, et souvent un contournement est offert en plus. Il y a de diverses raisons d'une telle liste :
Les réalisateurs souvent n'ont pas le temps pour corriger tous les bogues non-graves.
Le bogue pourrait être corrigé dans nouvelle une pièce rapportée de version ou de qui n'est pas encore libérée.
Les changements au code exigé pour corriger le bogue seraient grands, et apporteraient avec eux la possibilité de présenter d'autres bogues dans le système.
Etant donné ce qui précède, on le considère souvent impossible d'écrire le logiciel complètement exempt d'erreurs de n'importe quelle vraie complexité. Ainsi des bogues sont classés par catégorie par sévérité, et des bogues non critiques de bas-sévérité sont tolérés, car ils n'effectuent pas l'opération appropriée du système, pour la majorité d'utilisateurs. Le SATC de la NASA est parvenu à ramener le nombre d'erreurs moins d'à 0.1 par 1000 lignes de code (le SLOC ) mais ceci n'a pas été senti pour être faisable pour aucun projet de monde réel.
Une école de pensée, popularisée par le Eric S. Raymond en tant que loi de Linus de dans son d'essai la cathédrale et le bazar , soutient que le logiciel populaire d'Ouvrir-source de tient une meilleure possibilité de n'avoir peu ou aucun bogue que l'autre logiciel, parce que " ; donné assez de globes oculaires, tous les bogues sont shallow" ;. Cette affirmation a été contestée, de quelque manière que : le prélèvement d'Elias de de spécialiste en degré de sécurité d'ordinateur a écrit ce " ; il est facile de cacher des vulnérabilités en code source de complexe, peu comprise et non documenté, " ; parce que, " ; même si les gens passent en revue le code, cela ne signifie pas qu'ils sont qualifiés faire so." ;
Bogues célèbres d'ordinateur
Exploration d'espace
Le marin 1 de la NASA est allé au loin-cours pendant le lancement, dû à des disparus overbar dans les caractéristiques pour son logiciel de Fortran ( le 22 juillet , 1962 ). Noter que le reportage initial de cette erreur de programmation était incorrrect (un autre bogue !). Problème d'atterrissage d'Apollo 11 de la NASA ( le 20 juillet , 1969 ).
Voyager de la NASA 2 ( le 25 janvier , 1986 ).
Phobos 1 perdu ( 10 septembre , 1988 ).
Autodestruction du vol 501 d'Ariane 5 de d'ESA 40 secondes après décollage ( le 4 juin , 1996 ).
La navette spatiale de climat de Mars de de la NASA a détruit en raison de l'entrée des données de l'élan dans les unités impériales au lieu du système métrique ( le 23 septembre , 1999 ).
Mars Lander polaire perdu ( 3 décembre , 1999 ).
Gels de Mars Rover de la NASA dus à trop de dossiers ouverts dans la mémoire Flash ( le 21 janvier , 2004 ).
L'échec de batterie de Mars Global Surveyor de la NASA était le résultat d'une série d'événements liés à une erreur d'ordinateur faite cinq mois avant ( 2 novembre , 2006 ).
médical
Les accidents du Therac-25 (1985-1987), qui ont causé au moins les cinq décès.
calculant
Le problème de l'an 2000 de , populairement connu sous le nom de " ; Bug" de Y2K ; , craintes engendrées de l'effondrement économique mondial et une industrie des conseillers fournissant des difficultés de dernière minute. Le bogue du Pentium FDIV de .
Transmission de courant électrique
La panne d'électricité 2003 de l'Amérique du Nord a été déclenchée par une panne locale qui a disparu en raison non détecté d'une condition de compétitivité dans le logiciel de surveillance du XA/21 de l'énergie de General Electric.
Télécommunications
Accident de réseau de fond d'AT&T ( le 15 janvier , 1990), documenté dans de s de Bruce sterling le 'le resserrement d'intrus.
militaire
L'erreur de logiciel de MIM-104 d'un patriote , qui a finalement contribué aux décès de 28 Américains dans le Dhahran , Arabie Saoudite ( le 25 février , 1991 ). L'accident chinook de chauffent dessus de Kintyre : la cause de cet événement demeure un mystère, mais des soupçons forts ont été augmentés que les problèmes logiciels étaient un facteur contribuant.
Le bateau intelligent USS Yorktown a été laissé des morts dans l'eau en 1998 pendant presque 3 heures après qu'un clivage de par l'erreur zéro de .
Jeux vidéo
Le Missingno et la ville de problème branche sur table d'écoute, ont trouvé de la série de Pokémon de Le monde moindre dans la version de NES des frères superbes de Mario de
Le d'Eve en ligne « de s le déploiement de la pièce rapportée de trinité, qui a effacé le dossier de boot.ini au loin des plusieurs de mille utilisateurs » des ordinateurs (le codage réel était supposent pour effacer le dossier de boot.ini à partir de l'annuaire de /eve de noyau).
Failles de la sécurité
Le logiciel malveillant peut essayer d'exploiter des vulnérabilités connues dans un système - qui des mai ou mai ne pas être des bogues. Les virus sont des bogues du pas dans eux-mêmes - ils sont typiquement des programmes qui font avec précision ce qu'ils ont été conçus pour faire. Cependant, des virus désigné de temps en temps sous le nom de tels dans la presse populaire.
Types communs de bogues d'ordinateur
Clivage de par zéro Déréférence du pointeur NUL
Boucles infinies * débordement arithmétique ou courant de fond
Dépasser des limites de la rangée
Using une variable Uninitialized
Mémoire d'accès non possédée (violation d'accès )
Fuite de mémoire ou fuite de poignée de
Débordement ou courant de fond de la pile
Débordement d'amortisseur de
Impasse
au loin par une erreur
Condition de compétitivité
Perte de précision dans conversion de types
Bogues dans la culture populaire
Dans le 2001 de de 1968 romans : Une odyssée (et le film correspondant ), l'ordinateur embarqué d'un vaisseau spatial, le HAL 9000 de l'espace, est programmée avec deux objectifs contradictoires : pour révéler entièrement toute son information, et garder le but vrai du secret de vol de l'équipage. Ce conflit fait essayer par la suite HAL de tuer tous les membres d'équipage (puisque, s'il n'y avait aucun équipage, là ne serait aucune contradiction). Dans les ballons 1984 rouges du 99 de de chanson (cependant pas dans la version allemande originale), " ; bogues dans le software" ; mener à un ordinateur confondant un groupe de ballons avec un missile nucléaire et commençant une guerre nucléaire .
Le 2004 original le bogue , par le Ellen Ullman , est au sujet de la tentative d'un programmeur de trouver un bogue évasif dans une application de base de données.
Voir également
Problème OIN 9126 , qui classifie un bogue comme défaut ou non-conformité
Contournement
Système de piste de bogue
Putréfaction de peu de
Anti-modèle
Erreurs de programmation peu communes (schroedinbug, heisenbug, bogue de Bohr, et mandelbug)
Les raisins secs hysteriques , ou dur-à-expliquent les dispositifs qui sont gardés pour la compatibilité ascendante
.
| Random links: | Skink Cinq-rayé du sud-est | Voix juive pour la paix | Centre de la Science de Harvard | La partie d'ouvriers révolutionnaire (Pérou) | Insecto_de_software |