Napaka v programski opremi je vsaka napaka v kodi, ki se uporablja za ustvarjanje računalniškega programa. Napake lahko povzročijo veliko različnih težav, odvisno od vrste programa in določene vrste hrošča. Nekatere napake lahko na primer povzročijo zamrznitev programov in prenehanje delovanja. Drugi lahko povzročijo napake v delovanju programa, ki povzročijo, da se program nepričakovano obnaša. Včasih lahko napaka v programski opremi celo povzroči, da se program popolnoma zaustavi.
Večina strokovnjakov za programiranje se strinja, da je skoraj nemogoče ustvariti program katere koli velikosti, ne da bi se pojavila nekakšna programska napaka. Pri bolj zapletenih programih se možnosti za nastanek hroščev na splošno povečajo. To je zato, ker je programerjem težje najti vse napake v programih, kjer lahko uporabniki izvedejo veliko različnih dejanj.
Da bi odkrili morebitne obstoječe težave z napakami v programski opremi, programerji na splošno naredijo vse, kar je v njihovi moči, da skrbno testirajo programe, preden jih izdajo javnosti. Včasih lahko celo najamejo posebne delavce samo z namenom čim obsežnejšega testiranja programske opreme in poročanja rezultatov programerjem. Tudi z vsemi temi zaščitnimi ukrepi se veliko napak programske opreme ne odkrije, preden se programi izdajo.
V nekaterih primerih lahko razvijalci odkrijejo napako, vendar se odločijo, da ni dovolj resna, da bi upravičila zamudo pri izdaji programske opreme. Ko se to zgodi, lahko razvijalec izda program in nato razvije posodobitev, ki bo odpravila preostale napake. To je tudi običajen pristop za obravnavo napak, ki so odkrite po izdaji programa.
Včasih je program lahko v nenehnem stanju, ker programerji sčasoma vgrajujejo več funkcij. Ta postopek na splošno uvaja nove težave z napakami v programski opremi z vsako izdajo. To lahko postane neskončen cikel, pri čemer programerji nenehno dodajajo funkcije programski opremi in popravljajo napake. V bistvu program morda nikoli ne bo zares končan. Namesto tega se lahko nenehno razvija, medtem ko na tej poti doživlja naraščajoče bolečine.
Izdelava računalniškega programa vključuje uporabo kode, napisane v programskih jezikih. Narava računalniškega kodiranja pomeni, da lahko že majhne tipkarske in podobne napake zlahka povzročijo težave z napakami v programski opremi, programerji pa se zelo težko izognejo ustvarjanju nekaj težav na ta način. Možno je tudi, da se pojavijo hrošči, ker programer pri ustvarjanju kode naredi logično napako.