Bug je obecné označení pro jakoukoliv chybu v návrhu, implementaci nebo provozu softwaru. Tyto chyby mohou sahat od drobných estetických vad (např. špatně zobrazený text) až po kritické bezpečnostní trhliny, které umožňují vznik exploitů.
Původ termínu je často spojován s legendárním incidentem z roku 1947, kdy operátoři počítače Mark II (včetně Grace Hopperové) našli skutečnou můru (anglicky „bug“) uvízlou v relé, což způsobilo chybu systému. Termín se však v technickém slangu používal již mnohem dříve, například i Thomasem Edisonem.
Chyby se dělí podle toho, ve které fázi životního cyklu softwaru vznikají nebo jak se projevují:
Vznikají při psaní kódu, kdy programátor poruší pravidla daného programovacího jazyka (např. chybějící středník). Kompilátor takový kód odmítne spustit.
Program běží, nepadá, ale dává špatné výsledky. Například místo sčítání odečítá. Jsou nebezpečné, protože se hůře odhalují.
Program se spustí, ale během práce selže (spadne). Častou příčinou je dělení nulou nebo přístup k neexistující části paměti (viz Buffer Overflow).
V profesionálním vývoji se každý nahlášený bug hodnotí dvěma parametry:
Nahlášený bug prochází procesem správy (Bug Tracking):
1. **New (Nový):** Chyba je nahlášena do systému. 2. **Assigned (Přiřazen):** Vývojář začíná na opravě pracovat. 3. **Resolved/Fixed (Vyřešen):** Kód byl opraven. 4. **Verified (Ověřen):** Tester potvrdil, že oprava funguje a nezpůsobila jiné chyby (regresní testování). 5. **Closed (Uzavřen):** Bug je definitivně vyřešen.
K minimalizaci chyb slouží:
Související pojmy: Debugging, Exploit, Buffer Overflow, Software Testing, Kompilátor, Zdrojový kód.