Ein Programmfehler oder Softwarefehler, häufig auch im Deutschen mit dem englischen Wort Bug (genau genommen Wanze, im erweiterten Sinne auch für jedes andere Insekt; Aussprache [bʌg]) bezeichnet, ist ein Ausdruck aus dem EDV-Bereich.
Ein Fehler tritt in Computerprogrammen auf, wenn der Programmierer einen bestimmten Zustand in der Programmlogik nicht berücksichtigt hat, oder wenn die Laufzeitumgebung an sich fehlerhaft arbeitet. Auch Unvollständigkeit, Ungenauigkeiten, Mehrdeutigkeiten o. ä. in der Spezifikation des Programms können zu Fehlern führen, bzw. als solche interpretiert werden.
Es gibt eine Regel, nach der ein Computerprogramm ab einer bestimmten Größe immer auch Programmfehler beinhaltet. Programmierfehler lassen sich auch bei sorgfältigster Programmierung nicht vermeiden. Man schätzt, dass pro 1000 Zeilen Code im Mittel etwa zwei Fehler auftreten.
Die Anzahl von Fehlern zur Lebenszeit eines komplexen Systems verhält sich nach der sogenannten Badewannenkurve. Diese besagt, dass für neue Produkte auch die Zahl der Fehler hoch ist. Die Fehler werden zum Großteil behoben, wonach eine Phase mit wenig Fehlern erreicht wird. Gegen Ende der Nutzungszeit steigt die Zahl der Fehler wieder an, was erheblich zur Softwarealterung beiträgt.
Um Fehler in Programmen besser verstehen zu können, gibt es Programme, sogenannte Debugger, mit denen man ein Programm, welches man analysiert, schrittweise ablaufen und sich dabei sämtliche internen Zustände (Variablen) des Programms anzeigen lassen kann.
So genannte Bug-Tracker (wie Bugzilla oder Mantis) dienen der Erfassung und Dokumentation von Fehlerberichten. Daneben nehmen sie auch Verbesserungsvorschläge und Wünsche der Nutzer oder allgemeine Vorgänge auf.