Programmfehler
Ein Programmfehler, im englischen auch einfach Bug (Wanze, Käfer, Insekt; Aussprache: Bagg) genannt, ist ein Ausdruck aus dem EDV-Bereich. Ein Programmfehler tritt in Computerprogrammen auf, wenn der Programmierer einen bestimmten Zustand in der Programmlogik nicht berücksichtigt hat, oder wenn die Laufzeitumgebung selber fehlerhaft arbeitet. Auch Unvollständigkeit, Fehler, Ungenauigkeiten, Mehrdeutigkeiten o.ä. in der Spezifikation des Programms können zu Bugs führen, bzw. als solche interpretiert werden. Es gibt eine Regel, nach der ein Computerprogramm ab einer bestimmten Größe immer auch Programmfehler beinhaltet. Auch nichtinitialisierte Variablen führen im Programmablauf zu undefinierten, meist nicht reproduzierbaren Zuständen.Die Bezeichnung Bug entstand angeblich, als 1945 eine Motte in einem der ersten Computer einen Kurzschluss verursacht hatte. US Navy Captain Grace Murray Hopper, eine Pionierin der Computerwissenschaft, entdeckte den Bug und klebte die Motte in ihr Logbuch ein, das heute am Smithsonian Institute aufbewahrt wird. Daraufhin behaupteten Programmierer oft scherzhaft, es sei wohl wieder ein Insekt, wenn ihre Programme fehlerhaft waren, bis der Ausdruck Bug schließlich allgemein gebräuchlich wurde. (siehe auch moderne Legende)
Table of contents |
2 Arten von Programmfehlern 3 Folgen von Programmfehlern |
Fehlern in Computerprogrammen wird auf vielfältige Art und Weise begegnet.
Zum Einen versucht man, Programmfehler durch bestimmte Methoden während der verschiedenen Phasen der Software-Entwicklung von vornherein zu vermeiden. Unter anderem gehören dazu das Vier-Augen-Prinzip mittels regelmäßiger Code-Reviews, Paarprogrammierung und gemeinsamem Code-Besitz sowie die gute Planung, Analyse und Entwurf.
Zum Anderen will man Programmfehler möglichst schnell, zuverlässig und einfach finden. Dazu zählt u.a. das Debugging ("Entwanzung", Entfehlerung) mit Hilfe speziell dafür entwickelter Werkzeuge, genannt Debugger und die Einplanung spezieller Test-Phasen.
Manche Softwareanbieter führen diese Test-Phasen teilweise öffentlich durch und geben Betaversionen heraus, um die unvorhersehbar vielfältigen Nutzungsbedingungen verschiedener Anwender durch diese selbst testen und kommentieren zu lassen. Dies nennt man scherzhaft auch "Bananensoftware", weil sie erst beim Kunden reift.
Testss sind Prozeduren und Programme, die einen Programmfehler reproduzierbar auslösen sollen, um sie einzugrenzen und zu vermeiden, sie dienen sowohl zur Vermeidung als auch zum Auffinden von Programmfehlern.
Insbesondere in Bereichen, in denen der Einsatz von Software mit hohen finanziellen, wirtschaftlichen oder menschlichen Risiken verbunden ist, wie z.B. bei militärisch oder medizinisch genutzer Software oder in der Luft- und Raumfahrt, verwendet man zudem eine Verifizierung genannte Methode, bei der die Korrektheit einer Software formal-mathematisch nachgewiesen wird. Dieser Methode sind allerdings enge Grenzen gesetzt und sie ist daher bei komplexen Programmen praktisch unmöglich, teilweise auch theoretisch unmöglich anzuwenden; siehe auch Berechenbarkeit.
Auch die Entwicklung immer komplexerer Programmierparadigmen und Programmierstile wie die objektorientierte Programmierung, Design By Contract und die aspektorientierte Programmierung dienen unter anderem der Fehlervermeidung und Vereinfachung der Fehlersuche - bei im jeweiligen Paradigma unerfahrenen Programmierern entsteht allerdings oft eher der gegenteilige Effekt.
Es gibt verschiedene Möglichkeiten, Programmfehler zu klassifizieren.
Eine Klassifizierung nach Auffindbarkeit kategorisiert Programmfehler in Bohrbugs und Heisenbugs.
Einen in einer früheren Programmversion bereits behobenen Bug, der in einer späteren Programmversion wieder auftaucht, nennt man dort Regressionsbug.
Weitere Klassifizierungskriterien sind z.B. die Wahrscheinlichkeit des Auftretens des Bugs, der den Bug enthaltende Programmteil, die Auswirkung eines Bugs auf die praktische Einsetzbarkeit des Programms, der zur Behebung nötige Aufwand, die Wahrscheinlichkeit dass bei der Behebung neue Bugs entstehen, oder das Test-Verfahren, das den Bug identifiziert.
Die Folgen eines Programmfehlers können außerordentlich sein:
Vermeidung und Behebung von Programmfehlern
Arten von Programmfehlern
Folgen von Programmfehlern
Siehe auch: Debugging, Debugger, Ada (Programmiersprache)