Warum nicht das Wort Bug anstelle von Exception verwenden? [geschlossen]


18

Wenn wir Ausnahmen als Fehler bezeichnen, warum nicht einfach einen Fehler anstelle einer Ausnahme?

Wenn es im Code als Ausnahme bezeichnet wird und sobald es auftritt, wird es als Fehler bezeichnet. Warum nennst du es dann nicht gleich einen Bug?

Vielen Dank für jede Antwort oder Kommentar.


Ich hoffe, dass die technischen Details, die ich erwähne, dabei helfen, die Unterscheidung zwischen einer Ausnahme und einem Fehler zu klären. Große Frage BTW, +1
Jeremy Thompson


1
Ich weiß eigentlich nicht, wie Sie sie verwirren könnten, da es sich um sehr unterschiedliche Dinge handelt. Eine Ausnahme bilden Fälle, die vom Code behandelt werden und auf einen Fehler hinweisen. Typischerweise sind Fehler vager Art, nicht genau erklärbar und so. - Während Bugs ... ist ein Bug per Definition nicht durch Code selbst behandelt. Sie sind nicht einmal Fehler, sie weisen auf einen Mangel an Logik hin, wo es nicht sein sollte.
tvCa

1
@ NiklasRtz: Warum das große Kopfgeld? Unzählige Menschen hätten trotzdem geantwortet.
ThePopMachine

@ThePopMachine Weil ich riesige Kopfgelder für Fragen mag, die andere Leute vielleicht interessant finden. Ich stelle meine "populären" Fragen und beantworte so viel ich kann. Ich hatte viel Hilfe von den guten und lustigen Fragen und Antworten. Ich bereite auch eine neue Frage über Fehlerbehandlung und Fehlercodes für diese Programmierer vor. Diese ist nicht spezifisch, wie man Code schreibt, sondern wie man Fehler auf eine begrenzte und hoffentlich standardisierte Weise behandelt, zum Beispiel für Webapps, die eine begrenzte Anzahl von zurückgeben können Fehlercodes, wie gut Gehörlose sind und Benennung von Codeteilen.
Niklas

Antworten:


93

Nun, es ist ziemlich einfach: Nicht alle Ausnahmen sind Fehler (und in ähnlicher Weise manifestieren sich nicht alle Fehler als Ausnahmen).

Als Beispiel für eine Ausnahme, die kein Fehler ist, wenn Sie eine Datei von einem USB-Laufwerk lesen und jemand das Laufwerk aus dem Sockel zieht. Das wird eine Ausnahme auslösen (in den meisten Sprachen, die also Ausnahmen unterstützen). Aber es ist kein Fehler im Code.

Umgekehrt kann sich ein Fehler als Rechenfehler oder ähnliches manifestieren. Du bekommst immer noch eine Antwort, es ist einfach nicht die richtige.

Having said that, eine Ausnahme, die ihren Weg wahrscheinlich den ganzen Weg an die Spitze des Stapels macht ist ein Fehler. In meinem obigen USB-Beispiel sollten Sie in der Lage sein, diese Ausnahme abzufangen und dem Benutzer einen netten Fehler mit der Meldung "Wir konnten nicht aus der Datei lesen, da sie nicht mehr verbunden ist." oder so. Wenn Sie ihnen nur einen IOExceptionund einige funky Fehlercode präsentieren, dann ist das ein Fehler. Aber die Ausnahme selbst ist nicht.


1
Sie sind korrekt, auch wenn ich mir anschaue, wie ich es mache: Wenn eine Methode den Namen der nächsten Stadt (Los Angeles) nicht abruft, wird eine Ausnahme abgefangen und der Name des größeren Verwaltungsbereichs (z. B. Kalifornien) zurückgegeben, da dies jedoch zutrifft Für jede Koordinate ist ein Ort ohne nahe Stadt kein Fehler, sondern eine Ausnahme. Sind Sie einverstanden?
Niklas

1
@Nicke: Ja, dem würde ich zustimmen.
Dean Harding

1
Das Präsentieren einer IOException und eines Fehlercodes ist nicht immer ein Fehler. Es ist eine Diagnose. Ich mache das oft für persönliche Skripte, bei denen ein Misserfolg bedeutet, dass ich nur falsche Argumente eingebe.
Thomas Eding

23

Schlicht und einfach, eine Ausnahme ist nicht (immer) ein Fehler!

Eine Ausnahme wird ausgelöst (oder sollte es sein), wenn etwas Außergewöhnliches passiert. Wenn es ein Problem mit meiner Festplatte gibt und eine Datei nicht geschrieben werden kann, ist das kein Fehler. Das ist ein Hardwarefehler.

Ein Fehler ist in der Regel auf eine schlechte Programmierung zurückzuführen. Wenn eine Anwendung etwas tut, das aufgrund eines Programmierfehlers nicht erwartet wird, ist dies ein Fehler.


1
Heh, wir haben fast zur gleichen Zeit geantwortet und im Grunde genommen auch das gleiche Beispiel :-)
Dean Harding

5
@DeanHarding Großartige Köpfe denken gleich, ja? : D

1
Während ich mit Ihrem ersten Satz einverstanden bin, muss ich mit Ihrem letzten Satz nicht einverstanden sein. Der erste Computerfehler (obwohl apokryphisch) war in der Tat eine Motte, die zwischen den Punkten eines Relais gefangen war. Wie unterscheidet sich eine fehlerhafte Festplatte?
Scott Whitlock

1
@ ScottWhitlock Ich denke, "Bug" hat mehr als eine Definition. Ich habe immer angenommen, dass es sich um Fehler handelt, die von Menschen verursacht wurden: en.wikipedia.org/wiki/Software_bug

1
@ScottWhitlock: und angeblich würden Programmierer sagen "nicht meine Schuld, muss ein Fehler sein", was nach hinten losging, als "Fehler" einen Softwarefehler bedeutete. Heutzutage wird ein Hardwarefehler nicht als Fehler bezeichnet, obwohl ein Fehler zu einem Hardwarefehler führen kann.
Jmoreno

20

Sie sind nicht dasselbe.

Ein Fehler ist ein unbeabsichtigtes Verhalten einer Software: Die Software tut nicht das, was sie tun soll. Fehler können auf allen Ebenen der Softwareentwicklung auftreten, von einfachen alten Tippfehlern über logische Fehler bis hin zu unzureichenden Funktionsspezifikationen.

Eine Ausnahme kann sich dagegen entweder auf einen ungewöhnlichen Zustand eines Programms beziehen, der vom normalen Betrieb abweicht, oder genauer auf das Sprachkonstrukt, das zum Signalisieren und Behandeln solcher Zustände verwendet wird.

Die Tatsache, dass eine Ausnahme auftritt, kann ein Zeichen für einen Fehler sein, ist es aber häufig nicht. Beispielsweise kann eine Anwendung, die ein Dokument von einer URL herunterladen und lokal verarbeiten soll, eine Ausnahme auslösen, wenn der Remoteserver heruntergefahren ist: Die Anwendung weicht vom normalen Betrieb ab (sie kann das Dokument nicht herunterladen und verarbeiten), aber wenn dies der Fall ist Behandelt die Ausnahme richtig und stellt sie wieder her, dann liegt kein Fehler vor.

Umgekehrt ist das Vorhandensein eines Fehlers nicht unbedingt eine Ausnahme. Eine Anwendung verwirft möglicherweise im Hintergrund die eingegebenen Daten, anstatt sie in der Datenbank zu speichern. Es wird keine Ausnahme geworfen, aber es ist immer noch ein Fehler.


+1 für die Definition Ihrer Begriffe. Im Allgemeinen sollten die Leute das öfter machen!
Yfeldblum

Dies ist definitiv die klarste Antwort. sehr klar und prägnant. Gut gemacht!
Locke

5

Ausnahmen und Bugs hängen überhaupt nicht zusammen. Klar, manchmal wirft man eine Ausnahme und das bedeutet einen Fehler. Aber manchmal bedeutet es nur einen außergewöhnlichen, ungewöhnlichen Umstand, der nicht unbedingt ein Programmfehler ist. Besonders in einer ausnahmefreudigen Sprache wie Java, in der jede Standardoperation und ihr Hund ungefähr fünf verschiedene Ausnahmen auslöst - zum Beispiel: Öffnen der Datei fehlgeschlagen, Lesen der Datei fehlgeschlagen usw.


3

Ausnahmen hängen nicht immer mit Fehlern zusammen. Betrachten Sie es als etwas, das mit dem, was Sie tun, schief gehen könnte.

Ein Beispiel dafür ist InetAddress.getByName (), mit dem ein Domänenname aufgelöst wird. Wenn etwas passiert und eine UnknownHostException ausgelöst wird, handelt es sich nicht wirklich um ein Code-Problem.


2

Ein Softwarefehler ist der häufig verwendete Begriff, um einen Fehler, einen Defekt, einen Fehler, einen Fehler oder einen Fehler in einem Computerprogramm oder -system zu beschreiben, der ein falsches oder unerwartetes Ergebnis erzeugt oder dazu führt, dass es sich unbeabsichtigt verhält. Könnte sogar ein Rechtschreibfehler auf einem Etikett sein.

Ausnahmen unterscheiden sich von Bugs. Jede Art von Ausnahme (Zugriffsverletzung, Stapelüberlauf usw.) kann als Ausnahme "erste Chance" oder "zweite Chance" in einen Debugger umgewandelt werden. Ausnahmen der ersten Chance sind per Definition nicht schwerwiegend, es sei denn, sie werden nicht ordnungsgemäß mit einem Fehlerbehandlungsprogramm behandelt. Ab diesem Zeitpunkt werden sie erneut als Ausnahme der zweiten Chance (die nur ein Debugger behandeln kann) ausgelöst.

Wenn kein Debugger eine Ausnahme der zweiten Chance behandelt, wird die Anwendung beendet.


2

Sie könnten legitimerweise selbst eine Ausnahme auslösen, Sie würden hoffentlich nie absichtlich einen Fehler einführen.


Dies liest sich eher wie ein Kommentar, siehe Wie man
Mücke

1
Kürze bedeutet nicht, dass es keine Antwort ist, die den Unterschied zwischen den beiden Dingen hervorhebt.
Alan B

1

Alle Ausnahmen sind keine Bugs. Es kann ein Diskussionsthema sein, dass alle Bugs Ausnahmen sind oder nicht.

Wir können sagen, dass Ausnahmen die Ereignisse sind, die nicht Teil des normalen oder erwarteten Anwendungsflusses sind. Diese Ereignisse können unabhängig davon sein, wie der Code geschrieben wird, wobei ein Fehler im Wesentlichen auf einen fehlerhaften Code zurückzuführen ist (z. B. auf eine falsche Berechnung).

Hier ist ein Beispiel, wie die Nichtbehandlung einer Ausnahme ein Fehler sein kann.

Nehmen wir an, es gibt ein Programm, das Daten auf ein externes Speichergerät schreibt. Während des Schreibens wurde das externe Speichergerät vom Stromnetz getrennt, ist abgestürzt oder kann zerstört werden (aus welchem ​​Grund auch immer). Dies ist ein Ausnahmefall. Unabhängig davon, ob die Programmiersprache eine außergewöhnliche Behandlung unterstützt oder nicht, ob das Programm aufgrund dieses Ereignisses abstürzt oder sich nicht richtig verhält, handelt es sich um einen Fehler. . Wenn das Programm den Vorgang jedoch ordnungsgemäß abbricht, benachrichtigen Sie den Benutzer (mit anderen Worten, behandeln Sie die Ausnahme), ist dies eindeutig kein Fehler.

Die Try-Catch-Machanism-Programmiersprachen sind im Wesentlichen ein Werkzeug, um uns den Weg zur Bewältigung unerwarteter Ereignisse zu erleichtern.


1

Synopsis : Ausnahmen sind Anzeichen für schlechte Ergebnisse, Fehler sind (einige der) Ursachen für schlechte Ergebnisse. Das zu lösende Problem ist nicht die Ausnahme, sondern die Ursache der Ausnahme.

Resonanz: Ein Fehler ist ein Fehler im Design oder in der Implementierung eines Produkts (nicht auf Software beschränkt). Verwenden Sie zum Beispiel kein Relais mit korrekter Nennleistung (Zeit / Empfindlichkeit / Zuverlässigkeit / Kapazität), weil die technischen Daten nicht korrekt sind oder ein einfacher Fehler vorliegt. Eine Ausnahme ist eine Abweichung der realen Welt / Laufzeit vom vorhergesagten (wage ich zu sagen "erwartet"?) Verhalten, z. B. der Verlust der Kontrolle über ein Fahrzeug während der Fahrt.

Offensichtlich kann ein Fehler eine Ausnahme verursachen, da das Beispiel in 1) zu dem Beispiel in 2) führen könnte. Aber nicht alle Ausnahmen würden durch Fehler verursacht, z. B. den Verlust der Kontrolle über ein Fahrzeug, weil der Bediener einen Schlaganfall hatte.


0

Da diese Frage für ein Kopfgeld wieder geöffnet wurde, möchte ich meinen CUJ-Artikel aus dem Jahr 2003 mit dem Titel "Eine Ausnahme oder ein Bug?" Erwähnen, der genau die Frage des OP zu beantworten scheint.

Grundsätzlich werden in dem Artikel die Begriffe "Fehler" und "Ausnahme" (mit Beispielen) definiert und Strategien für den Umgang mit diesen vorgeschlagen.

Der Artikel schlägt vor, Fehler nicht zu "behandeln", sondern mit Behauptungen zu kennzeichnen. Im Gegensatz dazu erfordern echte Ausnahmen die Behandlung durch Code (möglicherweise das Auslösen / Abfangen von Ausnahmen).

Der wichtigste Punkt ist, dass Fehler die genau entgegengesetzte Strategie als Ausnahmen erfordern .

Der oben genannte Artikel ist ab sofort bei Dr.Dobb unter folgender Adresse erhältlich: http://www.drdobbs.com/an-exception-or-a-bug/184401686

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.