Programmfehler oder Softwarefehler oder Software-Anomalie, häufig auch Bug (englisch) genannt, sind Begriffe aus der Softwaretechnik, mit denen für Software-Systemkomponenten Abweichungen zu einem geforderten oder gewünschten Sollzustand bezeichnet werden. Diese können auftreten, wenn z. B. eine bestimmte Festlegung der Spezifikation fehlerhaft ist oder falsch umgesetzt wurde („Fehlhandlung“), und führen zunächst zu einem internen „Fehlerzustand“ im Programm, der wiederum während der Programmausführung zu einem unerwarteten Verhalten oder Ergebnis führt oder führen kann („Fehlerwirkung“).
Zur möglichst vollständigen Erkennung und Behebung von Programmfehlern wird üblicherweise in den Prozessen der Softwareentwicklung, d. h. vor dem tatsächlichen, „produktiven“ Einsatz von Software, die Projektphase „Softwaretest“ durchlaufen, wobei eine Validierung durchgeführt wird. Dabei auftretende Fehler sind üblich und sie zu finden ist Ziel des Testens,[1] während Fehler im laufenden Betrieb je nach Fehlerwirkung u. U. kritische Anomalien/Störungen darstellen. In der Praxis treten Computerprogramme ohne Programmfehler selten auf. Als Qualitätsmerkmal für Programme kennt man u. a. die Fehlerdichte. Sie bezeichnet die Anzahl an Fehlern pro 1.000 Zeilen Code (Kilo Source Lines of Code) bzw. je Function Point.
Als spezielle Instrumente zur Suche nach den Ursachen für Fehler in Programmen sind sogenannte Debugger hilfreich, mit denen ein Programm Schritt für Schritt ausgeführt und kontrolliert werden kann. Bei besonders kritischer Software (z. B. Flugzeugsteuerung) wird mitunter eine (aufwendige) formale Verifikation durchgeführt.
Zur Erfassung und Dokumentation werden sogenannte Bugtracker (wie Bugzilla oder Mantis) eingesetzt. Diese nehmen sowohl Fehlerberichte als auch Verbesserungsvorschläge und Wünsche (sog. Feature-Requests) der Nutzer oder allgemeine Vorgänge auf. Siehe auch Fehlermanagement.
Der Vorgang des Beseitigens eines Programmfehlers wird umgangssprachlich Bugfixing genannt. Das Ergebnis der Verbesserung wird in der Fachsprache als Bugfix, Patch oder Softwarepatch bezeichnet.
<ref>
-Tag; kein Text angegeben für Einzelnachweis mit dem Namen PKS.