Softwarefehler

A Softwarefehler ist ein Fehler, Fehler oder Fehler in der Gestaltung, Entwicklung oder Betrieb von Computer Software Dies führt dazu, dass es ein falsches oder unerwartetes Ergebnis erzielt oder sich auf unbeabsichtigte Weise verhalten kann. Der Prozess des Findens und Korrigierens von Fehler wird bezeichnet. "Debuggen"Und verwendet häufig formelle Techniken oder Tools, um Fehler zu bestimmen. Seit den 1950er Jahren wurden einige Computersysteme so konzipiert, dass sie verschiedene Computerfehler während des Betriebs abhalten, erkennen oder automatisch korrigieren.

Fehler in der Software können aus Fehlern und Fehlern entstehen, die beim Interpretieren und Extrahieren von Benutzern gemacht wurden. Bedarf, planen die eines Programms Entwurf, schreibe sein Quellcodeund aus der Interaktion mit Menschen, Hardware und Programmen, wie z. Betriebssysteme oder Bibliotheken. Ein Programm mit vielen oder ernsthaften Bugs wird oft als beschrieben als Buggy. Fehler können Fehler auslösen, die möglicherweise haben können Welligkeitseffekte. Die Auswirkungen von Fehler können subtil sein, wie z. B. unbeabsichtigte Textformatierung, bis hin zu offensichtlicheren Effekten, wie z. B. ein Programm zu verursachen Absturz, Einfrieren der Computer oder verursacht Schäden an Hardware. Andere Fehler qualifizieren sich als Sicherheitsfehler und könnte zum Beispiel a aktivieren a böswilliger Benutzer umgehen Zugangskontrollen um zu Nicht autorisierte Privilegien erhalten.[1]

Einige Softwarefehler wurden mit Katastrophen verknüpft. Fehler im Code, der die steuerte Therac-25 Strahlentherapie Die Maschine war in den 1980er Jahren direkt für den Todesfälle von Patienten verantwortlich. Im Jahr 1996 die Europäische Weltraumagentur's US -Dollar -Prototyp in Höhe von 1 Milliarde US -Dollar Die Ariane 5 -Rakete wurde zerstört Weniger als eine Minute nach dem Start aufgrund eines Fehlers im On-Board-Leitfaden-Computerprogramm.[2] Im Jahr 1994 ein Raf Chinook -Hubschrauber stürzte ab, töten 29; Dies wurde zunächst auf Pilotfehler verantwortlich gemacht, wurde jedoch später angenommen, dass er durch einen Software -Fehler in der Motorkontrollcomputer.[3] Buggy -Software verursachte das frühe 21. Jahrhundert Britische Post -Office -Skandal, die am weitesten verbreitete Fehlgeburt in der britischen Rechtsgeschichte.[4]

Im Jahr 2002, eine von den USA in Auftrag gegebene Studie Wirtschaftsministerium's Nationales Institut für Standards und Technologie Zugekommen, dass "Softwarefehler oder Fehler so weit verbreitet und schädlich sind, dass sie die US -Wirtschaft pro Jahr schätzungsweise 59 Milliarden US -Dollar oder etwa 0,6 Prozent des Bruttoinlandsprodukts kosten".[5]

Geschichte

Das mittlere englische Wort Bugge ist die Grundlage für die Begriffe "Bugbear" und "Bugaboo" als Begriffe, die für ein Monster verwendet werden.[6]

Der Begriff "Fehler" zur Beschreibung von Mängel ist seit den 1870er Jahren Teil des Ingenieurjargons[7] und Vorsprung von Elektronik und Computern; Möglicherweise wurde es ursprünglich in Hardwaretechnik verwendet, um mechanische Fehlfunktionen zu beschreiben. Zum Beispiel, Thomas Edison schrieb in einem Brief an einen Mitarbeiter im Jahr 1878:[8]

... Schwierigkeiten auftreten - dieses Ding gibt heraus und [es] dann "Bugs" - wie kleine Fehler und Schwierigkeiten genannt -, schauen sich selbst[9]

Schallkugeldie erste mechanische Flipper Game, wurde 1931 als "frei von Bugs" beworben.[10] Probleme mit militärischer Ausrüstung während Zweiter Weltkrieg wurden als Fehler bezeichnet (oder Glitches).[11] In einem 1942 veröffentlichten Buch, Louise Dickinson RichApropos angetrieben Eisschnitt Machine sagte: "Das Eissägen wurde suspendiert, bis der Schöpfer hereingebracht werden konnte, um die Käfer aus seinem Liebling zu nehmen."[12]

Isaac asimov verwendete den Begriff "Fehler", um sich auf Probleme mit einem Roboter in seiner Kurzgeschichte zu beziehen. "Fang dieses Kaninchen", veröffentlicht 1944.

Eine Seite aus der Harvard Mark II Das elektromechanische Computerprotokoll mit einer toten Motte, die vom Gerät entfernt wurde.

Der Begriff "Fehler" wurde in einem Konto von Computer Pioneer verwendet Grace Hopper, der die Ursache einer Fehlfunktion in einem frühen elektromechanischen Computer bekannt machte.[13] Eine typische Version der Geschichte ist:

Als Hopper 1946 aus dem aktiven Dienst entlassen wurde, trat sie der Harvard -Fakultät des Computation Laboratory bei, wo sie ihre Arbeit an der fortsetzte Markus II und Markus III. Die Bediener verfolgten einen Fehler in der Mark II bis a Motte in einem Relais gefangen, den Begriff prägt Insekt. Dieser Fehler wurde sorgfältig entfernt und in das Logbuch aufgezeichnet. Wenn wir uns aus dem ersten Fehler stammen, rufen wir heute Fehler oder Störungen in einem Programm a an Insekt.[14]

Hopper war nicht anwesend, als der Fehler gefunden wurde, aber er wurde eine ihrer Lieblingsgeschichten.[15] Das Datum im Logbuch war der 9. September 1947.[16][17][18] Die Betreiber, die es fanden, einschließlich William "Bill" Burke, später der Labor für Marinewaffen, Dahlgren, Virginia,[19] waren mit dem technischen Begriff vertraut und hielten das Insekt amüsiert mit der Notation "Erster Fall des Findens". Dieses Logbuch mit beigefügter Motte ist Teil der Sammlung des Smithsonian Nationalmuseum der amerikanischen Geschichte.[17]

Der damit verbundene Begriff "debuggen"Scheint auch vor der Verwendung im Computer zu sein: die Oxford Englisch Wörterbuch'Die S -Etymologie des Wortes enthält eine Bescheinigung aus dem Jahr 1945 im Zusammenhang mit Flugzeugmotoren.[20]

Das Konzept, dass die Software Fehler enthält, stammt aus Ada Lovelaces 1843 Notizen zur Analysemotor, in dem sie von der Möglichkeit von Programmkarten für "Karten" spricht Charles Babbage's analytischer Motor fehlerhaft sein:

... Ein Analyseprozess muss gleichermaßen durchgeführt worden sein, um den analytischen Motor mit den erforderlichen operativ Daten; und das kann hier auch eine mögliche Fehlerquelle liegen. Zugegeben, dass der tatsächliche Mechanismus in seinen Prozessen unrandt, die Karten kann es falsch bestellen.

"Fehler im System" Bericht

Das Open Technology Institute, betrieben von der Gruppe, New America,[21] veröffentlichte im August 2016 einen Bericht "Bugs in the System", in dem besagt, dass die US -politischen Entscheidungsträger Reformen durchführen sollten, um Forschern zu helfen, Softwarefehler zu identifizieren und zu beheben. Der Bericht "zeigt den Reformbedarf im Bereich der Entdeckung und Offenlegung von Software -Schwachstellen."[22] Einer der Autoren des Berichts gab an, dass der Kongress nicht genug getan habe, um die Sicherheitsanfälligkeit von Cyber ​​-Software anzugehen, obwohl der Kongress eine Reihe von Rechnungen zur Bekämpfung des größeren Problems der Cybersicherheit verabschiedet hat.[22]

Regierungsforscher, Unternehmen und Cyber ​​-Sicherheitsexperten sind die Personen, die in der Regel Software -Fehler entdecken. Der Bericht erfordert die Reform der Computerkriminalität und des Urheberrechts.[22]

Das Gesetz über Computerbetrug und Missbrauch, das Gesetz über das digitale Millennium Copyright Act und das Datenschutzgesetz für elektronische Kommunikation kriminalisieren und schaffen zivile Strafen für Maßnahmen, die Sicherheitsforscher routinemäßig betreiben und gleichzeitig legitime Sicherheitsforschung durchführen, heißt es in dem Bericht.[22]

Terminologie

Während die Verwendung des Begriffs "Fehler" zur Beschreibung von Softwarefehlern häufig ist, haben viele vorgeschlagen, dass er aufgegeben werden sollte. Ein Argument ist, dass das Wort "Bug" von dem Gefühl getrennt wird, dass ein Mensch das Problem verursacht hat, und impliziert stattdessen, dass der Defekt für sich entstand "Defekt", mit begrenztem Erfolg.[23] Seit den 1970er Jahren Gary Kildall Etwas humorvoll vorgeschlagen, den Begriff "Fehler" zu verwenden.[24][25]

In Software Engineering, Fehler Metamorphismus (aus Griechisch Meta = "Änderung", Morph = "Form") bezieht sich auf die Entwicklung eines Defekts in der letzten Phase der Softwarebereitstellung. Die Transformation eines "Fehlers", der von einem Analyst in den frühen Stadien des Lebenszyklus der Softwareentwicklung begangen wurde, was zu einem "Defekt" in der letzten Phase des Zyklus führt, wurde als "Fehler -Metamorphismus" bezeichnet.[26]

Verschiedene Stadien eines "Fehlers" im gesamten Zyklus können als "Fehler", "Anomalien", "Fehler", "Fehler", "Fehler", "Ausnahmen", "Abstürze", "Pannen", "Fehler" beschrieben werden. , "Defekte", "Vorfälle" oder "Nebenwirkungen".[26]

Verhütung

Fehler aufgrund eines Software -Fehlers, der auf zwei Bildschirmen auf angezeigt wird La Croix de Berny Station in Frankreich.

Die Softwareindustrie hat sich viel Mühe gegeben, die Fehlerzählungen zu reduzieren.[27][28] Diese beinhalten:

Schreibfehler

Fehler treten normalerweise auf, wenn der Programmierer a macht Logikfehler. Verschiedene Innovationen in Programmierstil und Defensivprogrammierung sind so konzipiert, dass diese Fehler weniger wahrscheinlich oder leichter zu erkennen sind. Einige Tippfehler, insbesondere von Symbolen oder logisch/Mathematische OperatorenErmöglichen Sie dem Programm, falsch zu arbeiten, während andere wie ein fehlendes Symbol oder ein falsch geschriebener Name verhindern können, dass das Programm operiert. Kompilierte Sprachen können einige Tippfehler aufzeigen, wenn der Quellcode kompiliert wird.

Entwicklungsmethoden

Mehrere Schemata unterstützen die Verwaltung der Programmiereraktivität, damit weniger Fehler erzeugt werden. Softwareentwicklung (Das befasst sich auch mit Software -Designproblemen) wendet viele Techniken an, um Mängel zu verhindern. Zum Beispiel formell Programmspezifikationen Geben Sie das genaue Verhalten von Programmen an, damit Designfehler beseitigt werden können. Leider sind formale Spezifikationen für alles andere als die kürzesten Programme aufgrund von Problemen von unpraktisch Kombinatorische Explosion und Unbestimmtheit.

Unit -Tests Beinhaltet ein Test für jede Funktion (Einheit), die ein Programm ausführen soll.

Im Testgetriebene Entwicklung Unit -Tests werden vor dem Code geschrieben und der Code wird nicht als vollständig angesehen, wenn alle Tests erfolgreich abgeschlossen sind.

Agile Software Entwicklung beinhaltet häufige Software -Releases mit relativ kleinen Änderungen. Defekte werden durch das Feedback des Benutzer enthüllt.

Open Source -Entwicklung ermöglicht es jedem, den Quellcode zu untersuchen. Eine Denkschule populär von populär von Eric S. Raymond wie Linus 'Gesetz sagt das beliebt Quelloffene Software Hat mehr Chancen, nur wenige oder gar keine Fehler als andere Software zu haben, denn "wenn genügend Augäpfel genügend Augäpfel sind, sind alle Fehler flach".[29] Diese Behauptung wurde jedoch umstritten: Computersicherheitsspezialist Elias Levy schrieb, dass "es leicht ist, Schwachstellen in komplexen, wenig verstandenen und ohne Papiere Quellcode zu verbergen", weil "auch wenn die Leute den Code überprüfen, bedeutet das nicht, dass sie dafür qualifiziert sind."[30] Ein Beispiel für einen Open-Source-Software-Fehler war der 2008 OpenSSL -Verwundbarkeit in Debian.

Programmiersprache Unterstützung

Programmiersprachen Fügen Sie Merkmale hinzu, um Fehler zu verhindern, wie z. B. Static Typsysteme, eingeschränkt Namespaces und Modulare Programmierung. Zum Beispiel, wenn ein Programmierer schreibt (Pseudocode) Lassen Sie real_value pi = "drei und ein bisschen"Obwohl dies syntaktisch korrekt sein kann, schlägt der Code a fehl a Geben Sie Check ein. Kompilierte Sprachen fangen dies an, ohne das Programm ausführen zu müssen. Interpretierte Sprachen fangen solche Fehler zur Laufzeit auf. Einige Sprachen schließen absichtlich Funktionen aus, die auf Kosten einer langsameren Leistung leicht zu Fehler führen Wartungskosten ist erheblich. Zum Beispiel die Java -Programmiersprache unterstützt nicht Zeiger Arithmetik; Implementierungen einiger Sprachen wie z. Pascal und Skriptsprachen oft Laufzeit haben Grenzenprüfung von Arrays, zumindest in einem Debugging -Build.

Codeanalyse

Werkzeuge für Codeanalyse Helfen Sie Entwicklern, den Programmtext zu inspizieren, der über die Fähigkeiten des Compilers hinausgeht, um potenzielle Probleme zu erkennen. Obwohl im Allgemeinen das Problem des Auffindens aller Programmierfehler angesichts einer Spezifikation nicht lösbar ist (siehe Problem stoppen), Diese Tools nutzen die Tatsache, dass menschliche Programmierer dazu neigen, beim Schreiben von Software häufig bestimmte Arten von einfachen Fehlern zu machen.

Instrumentierung

Tools zur Überwachung der Leistung der Software im Ausführen, entweder speziell, um Probleme wie z. Engpässe oder um die Sicherheit zu geben, dass die Arbeit korrekt ist, kann explizit in den Code eingebettet sein (vielleicht so einfach wie eine Aussagesprache Druck "Ich bin hier") oder als Werkzeuge bereitgestellt. Es ist oft eine Überraschung, herauszufinden, wo die meiste Zeit von einem Code genommen wird, und diese Entfernung von Annahmen kann dazu führen, dass der Code umgeschrieben wird.

Testen

Softwaretester sind Menschen, deren Hauptaufgabe es ist, Fehler zu finden oder Code zu schreiben, um Tests zu unterstützen. Bei einigen Projekten können mehr Ressourcen für das Testen aufgewendet werden als für die Entwicklung des Programms.

Messungen während des Tests können eine Schätzung der Anzahl der verbleibenden Fehler liefern. Dies wird zuverlässiger, je länger ein Produkt getestet und entwickelt wird.

Debuggen

Die typische Fehlergeschichte (GNU -Klassenpfad Projektdaten). Ein vom Benutzer eingereichter neuer Fehler ist unbestätigt. Sobald es von einem Entwickler reproduziert wurde, ist es a Bestätigt Insekt. Die bestätigten Fehler sind später Fest. Fehler, die zu anderen Kategorien gehören (nicht produzierbar, nicht repariert usw.) sind normalerweise in der Minderheit,

Fehler finden und behoben werden, oder Debuggen, ist ein großer Teil von Computerprogrammierung. Maurice WilkesEin frühes Computerpionier beschrieb seine Erkenntnis Ende der 1940er Jahre, dass ein Großteil seines Lebens damit verbracht werden würde, Fehler in seinen eigenen Programmen zu finden.[31]

Normalerweise ist es der schwierigste Teil des Debuggens darin, den Fehler zu finden. Sobald es gefunden wurde, ist es normalerweise relativ einfach, es zu korrigieren. Programme bekannt als Debugger Helfen Sie den Programmierern, Fehler zu lokalisieren, indem Sie die Codezeile nach Zeile ausführen, Variablenwerte und andere Funktionen beobachten, um das Programmverhalten zu beobachten. Ohne Debugger kann Code hinzugefügt werden, damit Nachrichten oder Werte in eine Konsole oder in ein Fenster oder eine Protokolldatei geschrieben werden, um die Programmausführung zu verfolgen oder Werte anzuzeigen.

Selbst mit Hilfe eines Debuggers ist es eine Art Kunst, Bugs zu lokalisieren. Es ist nicht ungewöhnlich, dass ein Fehler in einem Abschnitt eines Programms in einem völlig anderen Abschnitt Fehler verursacht, was es besonders schwierig macht, dies zu verfolgen (z. B. einen Fehler in einer Grafik Rendering Routine verursacht eine Datei I/o Routine zu scheitern) in einem scheinbar nicht verwandten Teil des Systems.

Manchmal ist ein Fehler kein isolierter Fehler, sondern stellt einen Denkfehler oder eine Planung des Programmierers dar. Eine solche Logikfehler verlangen, dass ein Abschnitt des Programms überarbeitet oder neu geschrieben wird. Als ein teil von Code-ReviewWenn Sie den Code durchtreten und den Ausführungsprozess vorstellen oder transkribieren, kann dies häufig Fehler feststellen, ohne den Fehler als solche zu reproduzieren.

In der Regel besteht der erste Schritt beim Auffinden eines Fehlers darin, ihn zuverlässig zu reproduzieren. Sobald der Fehler reproduzierbar ist, kann der Programmierer einen Debugger oder ein anderes Tool verwenden, während der Fehler reproduziert, um den Punkt zu finden, an dem das Programm in die Irre gegangen ist.

Einige Fehler werden durch Eingaben enthüllt, die für den Programmierer schwierig sein können, um neu zu erstellen. Eine Ursache der Therac-25 Strahlungsmaschinen -Todesfälle waren ein Fehler (insbesondere a Rassenbedingung), das nur auftrat, wenn der Maschinenbetreiber sehr schnell in einen Behandlungsplan eintrat; Es dauerte Tage der Übung, um dies zu tun, sodass sich der Fehler nicht im Test manifestierte oder als der Hersteller versuchte, ihn zu duplizieren. Andere Fehler können nicht mehr auftreten, wenn das Setup erweitert wird, um den Fehler zu finden, z. B. das Programm mit einem Debugger auszuführen. Diese nennt man Heisenbugs (Humor nach dem benannt Heisenberg Unsicherheitsprinzip).

Seit den 1990er Jahren, insbesondere nach dem Ariane 5 Flug 501 Katastrophe, Interesse an automatisierten AIDS zur Debuggierung von Rose, wie z. Statische Codeanalyse durch Abstrakte Interpretation.[32]

Einige Fehlerklassen haben nichts mit dem Code zu tun. Fehlerhafte Dokumentation oder Hardware kann zu Problemen bei der Verwendung von Systemen führen, obwohl der Code mit der Dokumentation übereinstimmt. In einigen Fällen beseitigen Änderungen des Code das Problem, obwohl der Code dann nicht mehr mit der Dokumentation übereinstimmt. Eingebettete Systeme häufig Arbeiten Sie herum Hardware -Fehler, da eine neue Version von a Rom ist viel billiger als die Wiederaufbereitung der Hardware, insbesondere wenn dies der Fall ist Rohstoffgegenstände.

Benchmark für Käfer

Um die reproduzierbare Forschung zu Tests und Debuggen zu erleichtern, verwenden Forscher kuratierte Benchmarks von Bugs:

  • Der Siemens -Benchmark
  • Manybugs[33] ist ein Maßstab von 185 C-Bugs in neun Open-Source-Programmen.
  • Defekt4J[34] ist ein Maßstab von 341 Java-Bugs aus 5 Open-Source-Projekten. Es enthält die entsprechenden Patches, die eine Vielzahl von Patch -Typen abdecken.[35]
  • BÄREN[36] ist ein Maßstab für kontinuierliche Integrationsaufbaufehler, die sich auf Testausfälle konzentrieren. Es wurde durch Überwachung von Builds aus Open-Source-Projekten erstellt Travis CI.

Bug -Management

Das Fehlerverwaltung umfasst den Prozess der Dokatei-, Kategorisierung, Zuweisung, Reproduktion, Korrektur und Freigabe des korrigierten Code. Vorgeschlagene Änderungen an Software - Fehler sowie Verbesserungsanforderungen und sogar ganze Veröffentlichungen - werden üblicherweise verfolgt und verwaltet Fehlerverfolgungssysteme oder Ausgabe von Tracking -Systemen.[37] Die hinzugefügten Elemente können als Fehler, Tickets, Probleme oder, folgt dem, bezeichnet werden agile Entwicklung Paradigma, Geschichten und Epen. Kategorien können objektiv, subjektiv oder eine Kombination sein, wie z. Versionsnummer, Bereich der Software, Schweregrad und Priorität sowie welche Art von Problem, z. B. eine Funktionsanforderung oder einen Fehler.

Eine Fehler -Triage bewertet Fehler und entscheidet, ob und wann sie behoben werden sollen. Die Entscheidung basiert auf der Priorität des Fehlers und den Faktoren wie Projektplänen. Die Triage soll nicht die Ursache von Fehlern untersuchen, sondern die Kosten für die Behebung. Die Triage erfolgt regelmäßig und durchläuft durch das vorherige Treffen geöffnet oder wiedereröffnet. Die Teilnehmer des Triage -Prozesses sind in der Regel der Projektmanager, Entwicklungsmanager, Testmanager, Build Manager und technische Experten.[38][39]

Schwere

Schwere Ist die Intensität der Auswirkungen, die der Fehler auf den Systembetrieb hat.[40] Diese Auswirkungen können Datenverlust, finanzieller, guten Willen und Verschwendung sein. Die Schweregradniveaus sind nicht standardisiert. Die Auswirkungen unterscheiden sich in der Branche. Ein Absturz in einem Videospiel hat einen völlig anderen Einfluss als ein Absturz in einem Webbrowser oder in Echtzeitüberwachungssystem. Beispielsweise können die Schweregrade des Fehlers "Crash oder Hang", "keine Problemumgehung" sein (dh, es gibt keine Möglichkeit, dass der Kunde eine bestimmte Aufgabe erfüllen kann), "hat eine Problemumgehung" (dh der Benutzer kann die Aufgabe weiterhin erledigen), "visuelle visuelle Defekt "(z. B. ein fehlendes Bild oder eine fehlende Taste oder ein Formularelement) oder" Dokumentationsfehler ". Einige Software -Publisher verwenden qualifiziertere Schweregrad wie "kritisch", "hoch", "niedrig", "Blocker" oder "trivial".[41] Der Schweregrad eines Fehlers kann eine separate Kategorie für seine Priorität für die Behebung sein, und die beiden können separat quantifiziert und verwaltet werden.

Priorität

Priorität Steuerelemente, bei denen ein Fehler auf die Liste der geplanten Änderungen fällt. Die Priorität wird von jedem Softwareproduzenten entschieden. Prioritäten können numerisch sein, wie z. B. 1 bis 5 oder benannt, wie "kritisch", "hoch", "niedrig" oder "aufgeschoben". Diese Bewertungsskalen können ähnlich oder sogar identisch sein wie Schwere Bewertungen, werden jedoch als eine Kombination der Schwere des Fehlers mit geschätzten Bemühungen zur Behebung bewertet. Ein Fehler mit geringem Schweregrad, aber leicht zu beheben kann eine höhere Priorität als ein Fehler mit moderatem Schweregrad haben, der übermäßige Anstrengungen erfordert, um zu beheben. Prioritätsbewertungen können mit Produktveröffentlichungen in Einklang gebracht werden, z.

Software -Veröffentlichungen

Es ist üblich, Software mit bekannten Fehler mit niedriger Priorität zu veröffentlichen. Fehler von ausreichend hoher Priorität kann eine Sonderveröffentlichung eines Teils des Codes mit nur Modulen mit diesen Korrekturen rechtfertigen. Diese sind bekannt als als Patches. Die meisten Releases enthalten eine Mischung aus Verhaltensänderungen und mehreren Fehlerbehebungen. Veröffentlichungen, bei denen Fehlerbehebungen betonen, werden als bekannt als als bezeichnet als Wartung Veröffentlichungen, um es von wichtigen Releases zu unterscheiden, die die Funktionen oder Änderungen der Merkmale hervorheben.

Gründe dafür, dass ein Software -Verlag sich entscheidet, einen bestimmten Fehler nicht zu patchen oder sogar zu beheben, umfassen:

  • Eine Frist muss eingehalten werden und die Ressourcen sind nicht ausreichend, um alle Fehler nach der Frist zu beheben.[42]
  • Der Fehler ist bereits in einer bevorstehenden Veröffentlichung behoben und hat keine hohe Priorität.
  • Die Änderungen, die zur Behebung des Fehlers erforderlich sind, sind zu kostspielig oder betreffen zu viele andere Komponenten, was eine wichtige Testaktivität erfordert.
  • Es kann vermutet oder bekannt sein, dass sich einige Benutzer auf das vorhandene Fehlerverhalten verlassen. Eine vorgeschlagene Fix kann eine brechende Veränderung einführen.
  • Das Problem liegt in einem Bereich, der mit einer bevorstehenden Veröffentlichung veraltet sein wird. Es ist unnötig, es zu beheben.
  • "Es ist kein Fehler, es ist ein Feature".[43] Es ist ein Missverständnis zwischen erwarteten und wahrgenommenen Verhalten aufgetreten oder undokumentiertes Merkmal.

Typen

In Softwareentwicklungsprojekten kann zu jedem Zeitpunkt ein Fehler oder Fehler eingeführt werden. Fehler ergeben sich aus Aufsicht oder Missverständnis durch ein Software -Team während der Spezifikation, des Designs, der Codierung, der Konfiguration, der Dateneingabe oder der Dokumentation. Zum Beispiel, ein relativ einfaches Programm zum Alphabetisieren einer Liste von Wörtern, kann das Design möglicherweise nicht überlegen, was passieren soll, wenn ein Wort a enthält Bindestrich. Oder beim Konvertieren eines abstrakten Designs in Code kann der Codierer versehentlich eine erstellen Off-by-One-Fehler Welches kann ein "<" sein, wobei "<=" beabsichtigt war, und das letzte Wort in einer Liste nicht sortieren.

Eine andere Kategorie von Fehler wird als a genannt Rassenbedingung Dies kann auftreten, wenn Programme mehrere Komponenten gleichzeitig ausführen. Wenn die Komponenten in einer anderen Reihenfolge interagieren als der Entwickler, könnten sie sich gegenseitig beeinträchtigen und das Programm daran hindern, seine Aufgaben zu erledigen. Diese Fehler sind möglicherweise schwer zu erkennen oder zu antizipieren, da sie bei jeder Ausführung eines Programms möglicherweise nicht auftreten.

Konzeptionelle Fehler sind das Missverständnis eines Entwicklers darüber, was die Software tun muss. Die resultierende Software kann nach dem Verständnis des Entwicklers funktionieren, aber nicht das, was wirklich benötigt wird. Andere Arten:

Arithmetik

Bei Operationen zu numerischen Werten können Probleme auftreten, die zu einer unerwarteten Ausgabe, einer Verlangsamung eines Prozesses oder zum Absturz führen.[44] Diese können aus einem Mangel an Bewusstsein für die Eigenschaften der Datenspeicherung wie a liegen Präzisionsverlust wegen Rundung, numerisch instabil Algorithmen, arithmetischer Überlauf und Unterfluss, oder aus mangelnder Bewusstsein dafür, wie Berechnungen durch verschiedene Software -Codierungssprachen wie z. Durch Null teilen die in einigen Sprachen eine Ausnahme auswerfen können, und in anderen kann ein besonderer Wert zurückgeben, wie z. Nan oder Unendlichkeit.

Steuerfluss

Steuerfluss Fehler sind diejenigen, die in Prozessen mit gültiger Logik zu finden sind, die jedoch zu unbeabsichtigten Ergebnissen führen, wie z. Unendliche Schleifen und unendlich Rekursion, falsche Vergleiche für bedingte Aussagen wie die Verwendung des Falschen Vergleichsbetreiber, und Auslösende Fehler (Zählen Sie ein oder eine zu wenige Iterationen beim Looping).

Schnittstelle

  • Falsche API -Verwendung.[45]
  • Falsche Protokollimplementierung.
  • Falsches Hardwarehandling.
  • Falsche Annahmen einer bestimmten Plattform.
  • Inkompatible Systeme. Ein neuer API oder Kommunikationsprotokoll Kann zu funktionieren, wenn zwei Systeme unterschiedliche Versionen verwenden, es können jedoch Fehler auftreten, wenn eine in einer Version implementierte Funktion oder Funktion in einer anderen geändert oder fehlt. In Produktionssystemen, die kontinuierlich ausgeführt werden müssen, ist das Herunterfahren des gesamten Systems für ein großes Update möglicherweise nicht möglich, z. B. in der Telekommunikationsbranche[46] oder das Internet.[47][48][49] In diesem Fall werden kleinere Segmente eines großen Systems einzeln verbessert, um die Störung eines großen Netzwerks zu minimieren. Einige Abschnitte konnten jedoch übersehen und nicht aktualisiert werden und verursachen Kompatibilitätsfehler, die schwer zu finden und zu reparieren sind.
  • Falsche Code -Anmerkungen[50]

Multi-Threading

Ressourcen

Syntax

  • Verwendung des Falschen Zeichen, wie z. B. die Ausführung der Zuordnung statt von Gleichheitstest. In einigen Sprachen wird beispielsweise x = 5 den Wert von x bis 5 festlegen, während x == 5 prüft, ob x derzeit 5 oder eine andere Zahl ist. Interpretierte Sprachen lassen einen solchen Code fehlschlagen. Kompilierte Sprachen können solche Fehler vor dem Testen fangen.

Zusammenarbeit

  • Unpagierte Updates; z.B. Der Programmierer ändert "myAdd", vergisst aber, "MySubtract" zu ändern, was denselben Algorithmus verwendet. Diese Fehler werden durch die gemildert Wiederhole dich nicht Philosophie.
  • Kommentare veraltet oder falsch: Viele Programmierer nehmen die Kommentare an, den Code genau zu beschreiben.
  • Unterschiede zwischen Dokumentation und Produkt.

Implikationen

Der Betrag und die Art von Schäden, die ein Software-Fehler auf natürliche Weise beeinflusst, wirkt sich auf die Entscheidungsfindung, Prozesse und Richtlinien in Bezug auf Softwarequalität aus. In Anwendungen wie z. menschlicher Raumflug, Luftfahrt, Atomkraft, Gesundheitsvorsorge, öffentlicher Verkehr oder AutomobilsicherheitDa Software -Fehler das Potenzial haben, Menschenverletzungen oder sogar Todesfälle zu verursachen, wird eine solche Software weitaus mehr Kontrolle und Qualitätskontrolle haben als beispielsweise eine Online -Einkaufswebsite. Bei Anwendungen wie Bankgeschäften, bei denen Softwarefehler einer Bank oder ihren Kunden schwerwiegende finanzielle Schäden verursachen, ist die Qualitätskontrolle auch wichtiger als beispielsweise eine Anwendung zur Bildbearbeitung. NASAs Software Assurance Technology Center gelang es, die Anzahl der Fehler auf weniger als 0,1 pro 1000 Codezeilen zu reduzieren (Codezeilen (Sloc) Aber dies war nicht für Projekte in der Geschäftswelt machbar.

Laut einer NASA -Studie zur "Flugsoftwarekomplexität" kann "ein außergewöhnlich guter Softwareentwicklungsprozess Defekte auf nur 1 Defekt pro 10.000 Codezeilen zurückhalten".[51]

Abgesehen von den Schäden, die durch Fehler verursacht werden, sind einige ihrer Kosten auf den Aufwand zurückzuführen, das in die Behebung von ihnen investiert wurde. 1978 haben Lientz et al. zeigten, dass der Median der Projekte 17 Prozent der Entwicklungsaufwand für die Fixierung des Fehlers investiert.[52] In der Forschung im Jahr 2020 auf GitHub Repositorys zeigten, dass der Median 20%beträgt.[53]

Bekannte Fehler

Eine Reihe von Softwarefehler ist bekannt geworden, normalerweise aufgrund ihrer Schwere: Beispiele umfassen verschiedene Raum- und Militärflugzeugeunfälle. Möglicherweise der berühmteste Fehler ist der Jahr 2000 Problem oder Y2K -Fehler, der viele Programme ließ, die lange vor dem Übergang von 19xx zu 20xx geschrieben wurden, um zu fördern, beispielsweise ein Datum wie "25. Dezember 04" als 1904 zu behandeln, wobei "19100" statt "2000" und so angezeigt wird an. Eine große Anstrengung am Ende des 20. Jahrhunderts löste die schwersten Probleme auf, und es gab keine wesentlichen Konsequenzen.

Das 2012 Börsenhandelsstörungen beinhaltete eine solche Inkompatibilität zwischen der alten API und einer neuen API.

In der Populärkultur

  • In beiden 1968er Roman 1968 2001: Ein Weltraum -Odyssey und der entsprechende Film von 1968 2001: Ein Weltraum -Odyssey, ein Raumschiff an Bord, Computer, Hal 9000, Versuche, alle seine Besatzungsmitglieder zu töten. In dem Follow-up-Roman von 1982,, 2010: Odyssey zweiund der begleitende Film von 1984, 2010Es wird gezeigt, dass diese Aktion durch den Computer verursacht wurde, der mit zwei widersprüchlichen Zielen programmiert worden war: um alle seine Informationen vollständig offenzulegen und den wahren Zweck des Fluges vor der Besatzung geheim zu halten; Dieser Konflikt führte dazu, dass Hal paranoid und schließlich mörderisch wurde.
  • In der englischen Version des Nena 1983 -Songs 99 Luftballons (99 rote Ballons) Als Ergebnis von "Bugs in der Software" wird eine Veröffentlichung einer Gruppe von 99 roten Ballons mit einem feindlichen Atomraketenstart verwechselt, der eine gleichwertige Startreaktion erfordert, was zu Katastrophen führt.
  • In der amerikanischen Komödie von 1999 Büroraum, drei Mitarbeiter versuchen (erfolglos), die Beschäftigung ihres Unternehmens mit dem Y2K-Computerfehler mit einem Computervirus auszunutzen, das abgerundete Fraktionen eines Pennys auf ihr Bankkonto sendet-eine lang bekannte Technik als beschriebene Technik Salami schneiden.
  • Der Roman von 2004 Der Käfer, durch Ellen UllmanEs handelt sich um den Versuch eines Programmierers, in einer Datenbankanwendung einen schwer fassbaren Fehler zu finden.[54]
  • Der kanadische Film 2008 Steuerung Alt löschen Es handelt sich um einen Computerprogrammierer Ende 1999, der darum kämpft, Fehler in seinem Unternehmen im Zusammenhang mit dem Problem des Jahres 2000 zu beheben.

Siehe auch

Verweise

  1. ^ Mittal, Varun; Aditya, Shivam (1. Januar 2015). "Jüngste Entwicklungen im Bereich der Fehlerreparatur". Verfahren Informatik. Internationale Konferenz über Computer, Kommunikation und Konvergenz (ICCC 2015). 48: 288–297. doi:10.1016/j.Procs.2015.04.184. ISSN 1877-0509.
  2. ^ "Ariane 501 - Präsentation des Berichtsausschusses für Anfragen". www.esa.int. Abgerufen 29. Januar, 2022.
  3. ^ Prof. Simon Rogerson. "Die Chinook -Hubschrauberkatastrophe". Ccsr.cse.dmu.ac.uk. Archiviert von das Original am 17. Juli 2012. Abgerufen 24. September, 2012.
  4. ^ "Post -Office -Skandal ruiniert das Leben, Anfrage hört". BBC News. 14. Februar 2022.
  5. ^ "Software -Fehler kosten uns die Wirtschaft, Schatz". 10. Juni 2009. Archiviert aus dem Original am 10. Juni 2009. Abgerufen 24. September, 2012.{{}}: CS1 Wartung: Ungeeignete URL (Link)
  6. ^ Computerworld -Mitarbeiter (3. September 2011). "Motte in der Maschine: Debugging der Ursprünge von 'Bug' '". Computerwelt. Archiviert Aus dem Original am 25. August 2015.
  7. ^ "Insekt". Oxford Englisch Wörterbuch (Online ed.). Oxford University Press. (Abonnement oder teilnehmende Institutsmitgliedschaft erforderlich.) 5a
  8. ^ "Wussten Sie, dass Edison den Begriff" Bug "geprägt hat"". 1. August 2013. Abgerufen 19. Juli, 2019.
  9. ^ Edison nach Puskas, 13. November 1878, Edison Papers, Edison National Laboratory, US -Nationalparkdienst, West Orange, N.J., zitiert in Hughes, Thomas Parke (1989). Amerikanische Genesis: Ein Jahrhundert der Erfindung und technologischer Begeisterung, 1870-1970. Penguin -Bücher. p. 75. ISBN 978-0-14-009741-2.
  10. ^ "Baffle Ball". Internet -Flipper -Datenbank. (Siehe Bild der Werbung im Referenzeintrag)
  11. ^ "Moderne Flugzeugträger sind das Ergebnis von 20 Jahren intelligentem Experimentieren". Leben. 29. Juni 1942. p. 25. Archiviert Aus dem Original am 4. Juni 2013. Abgerufen 17. November, 2011.
  12. ^ Dickinson Rich, Louise (1942), Wir gingen in den Wald, JB Lippincott Co, p. 93, Lccn 42024308, OCLC 405243, archiviert Aus dem Original am 16. März 2017.
  13. ^ FCAT -NRT -Test, Harcourt, 18. März 2008
  14. ^ "Danis, Sharron Ann:" Konteradmiral Grace Murray Hopper "". ei.cs.vt.edu. 16. Februar 1997. Abgerufen 31. Januar, 2010.
  15. ^ James S. Huggins. "Erster Computerbug". Jamesshuggins.com. Archiviert von das Original am 16. August 2000. Abgerufen 24. September, 2012.
  16. ^ "Insekt Archiviert 23. März 2017 bei der Wayback -Maschine",", Die Jargon -Datei, ver. 4.4.7. Abgerufen am 3. Juni 2010.
  17. ^ a b "Logbuch mit Computerfehler Archiviert 23. März 2017 bei der Wayback -Maschine", Nationales Museum für amerikanische Geschichte, Smithsonian Institution.
  18. ^ "Der erste "Computerbug"", Marine Historical Center. Aber beachten Sie das Harvard Mark II Der Computer war erst im Sommer 1947 abgeschlossen.
  19. ^ IEEE Annals of the History of Computing, Vol 22 Ausgabe 1, 2000
  20. ^ Zeitschrift der Royal Aeronautical Society. 49, 183/2, 1945 "Es reichte ... durch die Bühne des Typs und Flugtests und" Debugging "..."
  21. ^ Wilson, Andi; Schulman, Ross; Bankston, Kevin; Herr, Trey. "Fehler im System" (PDF). Open Policy Institute. Archiviert (PDF) Aus dem Original am 21. September 2016. Abgerufen 22. August, 2016.
  22. ^ a b c d Rozens, Tracy (12. August 2016). "Cyber ​​-Reformen, die zur Stärkung der Software -Fehlerentdeckung und -Differenzierung erforderlich sind: New America Report - Homeland Reparedness News". Abgerufen 23. August, 2016.
  23. ^ "Nachrichten bei SEI 1999 Archiv". CMU.edu. Archiviert Aus dem Original am 26. Mai 2013.
  24. ^ Shutek, Len (2. August 2016). "In seinen eigenen Worten: Gary Kildall". Bemerkenswerte Menschen. Computergeschichte Museum. Archiviert Aus dem Original am 17. Dezember 2016.
  25. ^ Kildall, Gary Arlen (2. August 2016) [1993]. Kildall, Scott; Kildall, Kristin (Hrsg.). "Computerverbindungen: Menschen, Orte und Ereignisse in der Entwicklung der Personalcomputerindustrie" (Manuskript, Teil 1). Kildall Familie: 14–15. Archiviert Aus dem Original am 17. November 2016. Abgerufen 17. November, 2016. {{}}: Journal zitieren erfordert |journal= (Hilfe)
  26. ^ a b "Testerfahrung: TE: Das Magazin für professionelle Tester". Testfahrung. Deutschland: TestingExperience: 42. März 2012. ISSN 1866-5705. (Abonnement erforderlich)
  27. ^ Huizinga, Dorota; Kolawa, Adam (2007). Automatisierte Defektprävention: Best Practices im Softwaremanagement. Wiley-ieee Computer Society Press. p. 426. ISBN 978-0-470-04212-0. Archiviert Aus dem Original am 25. April 2012.
  28. ^ McDonald, Marc; Musson, Robert; Smith, Ross (2007). Der praktische Leitfaden zur Verhinderung von Defekten. Microsoft Press. p.480. ISBN 978-0-7356-2253-1.
  29. ^ "Frühe loslassen, oft veröffentlichen" Archiviert 14. Mai 2011 bei der Wayback -Maschine, Eric S. Raymond, Die Kathedrale und der Basar
  30. ^ "Breite Open Source" Archiviert 29. September 2007 bei der Wayback -Maschine, Elias Levy, SecurityFocus, 17. April 2000
  31. ^ Maurice Wilkes Zitate
  32. ^ "Polyspace Technologies History". christele.faure.pagesperso-orange.fr. Abgerufen Der 1. August, 2019.
  33. ^ Le Goues, Claire; Holtschulte, Neal; Smith, Edward K.; Brun, Yuriy; Devanbu, Premkumar; Forrest, Stephanie; Weimer, Westley (2015). "Die Manybugs und Introclass -Benchmarks für die automatisierte Reparatur von C -Programmen". IEEE -Transaktionen auf Software -Engineering. 41 (12): 1236–1256. doi:10.1109/tse.2015.2454513. ISSN 0098-5589.
  34. ^ Nur, René; Jalali, Darioush; Ernst, Michael D. (2014). "Defekt4J: Eine Datenbank vorhandener Fehler, um kontrollierte Teststudien für Java -Programme zu ermöglichen". Verfahren des Internationalen Symposiums 2014 über Softwaretests und -analyse - ISSTA 2014. S. 437–440. Citeseerx 10.1.1.646.3086. doi:10.1145/2610384.2628055. ISBN 9781450326452. S2CID 12796895.
  35. ^ Sobreira, Victor; Durieux, Thomas; Madeiral, Fernanda; Monperrus, Martin; de Almeida Maia, Marcelo (2018). "Dissektion eines Fehlerdatensatzes: Anatomie von 395 Patches aus Defects4J". 2018 IEEE 25. Internationale Konferenz für Softwareanalyse, Evolution und Reengineering (saner). S. 130–140. Arxiv:1801.06393. doi:10.1109/saner.2018.8330203. ISBN 978-1-5386-4969-5. S2CID 4607810.
  36. ^ Madeiral, Fernanda; URLI, Simon; Maia, Marcelo; Monperrus, Martin; Maia, Marcelo A. (2019). "Bären: Ein erweiterbarer Java -Bug -Benchmark für automatische Programmreparaturstudien". 2019 IEEE 26. Internationale Konferenz für Softwareanalyse, Evolution und Reengineering (saner). S. 468–478. Arxiv:1901.06024. doi:10.1109/saner.2019.8667991. ISBN 978-1-7281-0591-8. S2CID 58028949.
  37. ^ Allen, Mitch (Mai - Juni 2002). "Fehlverfolgungs -Grundlagen: Ein Anfängerleitfaden zum Berichten und Verfolgen von Defekten". Software -Test- und Qualitäts -Engineering -Magazin. Vol. 4, nein. 3. S. 20–24. Abgerufen 19. Dezember, 2017.
  38. ^ Rex Black (2002). Verwalten des Testprozesses (2. Aufl.). Wiley India Pvt. Begrenzt. p. 139. ISBN 9788126503131. Abgerufen 19. Juni, 2021.
  39. ^ Chris Vander Mey (24. August 2012). Versandgröße - Praktische Lektionen zum Aufbau und Start von herausragender Software, das bei Google und Amazon bei der Arbeit gelernt wurde. O'Reilly Media. S. 79–81. ISBN 9781449336608.
  40. ^ Soleimani Neysiani, Behzad; Babamir, Seyed Morteza; Aritsugi, Masayoshi (1. Oktober 2020). "Effizientes Merkmalextraktionsmodell für die Verbesserung der Validierungsleistung der Erkennung doppelter Fehlerbericht in Software -Fehler -Triage -Systemen". Informations- und Softwaretechnologie. 126: 106344. doi:10.1016/j.infsof.2020.106344. S2CID 219733047.
  41. ^ "5.3. Anatomie eines Fehlers". bugzilla.org. Archiviert Aus dem Original am 23. Mai 2013.
  42. ^ "The Next Generation 1996 Lexikon A bis Z: Slipstream Release". Nächste Generation. Nr. 15. Stellen Sie sich Medien vor. März 1996. p. 41.
  43. ^ Carr, Nicholas (2018). "'Es ist kein Fehler, es ist ein Feature.' Trite - oder genau richtig? ". Wired.com.
  44. ^ Di Franco, Anthony; Guo, Hui; Cindy, Rubio-González. "Eine umfassende Studie über numerische Fehlereigenschaften der realen Welt" (PDF).
  45. ^ Monperrus, Martin; Bruch, Marcel; Mezini, Mira (2010). "Erkennen fehlender Methodenaufrufe in objektorientierter Software". ECOOP 2010-Objektorientierte Programmierung (PDF). Vorlesungsnotizen in Informatik. Vol. 6183. S. 2–25. doi:10.1007/978-3-642-14107-2_2. ISBN 978-3-642-14106-5. S2CID 16724498.
  46. ^ Kimbler, K. (1998). Feature -Interaktionen in Telekommunikations- und Softwaresystemen v. IOS Press. p. 8. ISBN 978-90-5199-431-5.
  47. ^ Syed, Mahbubur Rahman (1. Juli 2001). Multimedia -Netzwerk: Technologie, Management und Anwendungen: Technologie, Management und Anwendungen. Idea Group Inc (IGI). p. 398. ISBN 978-1-59140-005-9.
  48. ^ Wu, Chwan-Hwa (John); Irwin, J. David (19. April 2016). Einführung in Computernetzwerke und Cybersicherheit. CRC Press. p. 500. ISBN 978-1-4665-7214-0.
  49. ^ RFC 1263: "TCP -Erweiterungen als schädliches Zitat:" Die Zeit, um die neue Version des Protokolls an alle Hosts zu verteilen (für immer). Chaos kann dazu führen. "
  50. ^ Yu, zhongxing; Bai, Chenggang; Seinturier, Lionel; Monperrus, Martin (2019). "Charakterisierung der Verwendung, Entwicklung und Auswirkungen von Java -Anmerkungen in der Praxis". IEEE -Transaktionen auf Software -Engineering. 47 (5): 1. Arxiv:1805.01965. doi:10.1109/tse.2019.2910516. S2CID 102351817.
  51. ^ Dvorak, Daniel L. 1 NASA -Studie zur Komplexität der Flugsoftware. Citeseerx 10.1.1.711.2976.
  52. ^ Lientz, B. P.; Swanson, E. B.; Tompkins, G. E. (1978). "Merkmale der Wartung von Anwendungssoftware". Kommunikation der ACM. 21 (6): 466–471. doi:10.1145/359511.359522. S2CID 14950091.
  53. ^ Amit, Idan; Feitelson, Dror G. (2020). "The Corrective Commit -Wahrscheinlichkeitscode -Qualitätsmetrik". Arxiv:2007.10912 [cs.se].
  54. ^ Ullman, Ellen (2004). Der Käfer. Picador. ISBN 978-1-250-00249-5.

Externe Links