Programmfehler, Bugs, sind logische Fehler innerhalb von Programmen, die nicht bei der Prüfung der Syntax durch den Compiler gefunden werden können. Sie tauchen erst während der Ausführung auf, wenn das Programm einen bestimmten Zustand erreicht oder bestimmte Datenkonstellationen verarbeiten soll. Typische Bugs sind daher Laufzeitfehler, Runtime Errors.
Programmierer nutzen spezielle Programme, die Debugger, um Bugs in ihren eigenen Programmen auf die Spur zu kommen. Außerdem werden immer häufiger automatisierte Softwaretests durchgeführt, die Bugs ohne menschliche Hilfe entdecken können.
Die englische Bezeichnung Bug (Wanze) für technische Fehler wurde schon von Thomas Edison im 19. Jahrhundert verwendet und erlebte eine Renaissance in den 1940er Jahren, als tatsächlich Insekten Fehlfunktionen in den noch mechanisch arbeitenden ersten Großrechnern verursachten. Wird ein Bug durch ein Update behoben, dann spricht man von einem Bugfix oder Patch. Ein solcher Bugfix kann Fehler beheben und vorhandene Sicherheitslücken schließen.