Softverska greška je svaka pogreška u kodu koji se koristi za stvaranje računalnog programa. Bugovi mogu uzrokovati širok raspon različitih problema ovisno o vrsti programa i određenoj vrsti greške. Na primjer, neke greške mogu uzrokovati zamrzavanje programa i prestanak rada. Drugi mogu uzrokovati pogreške u izvedbi programa koje rezultiraju neočekivanim ponašanjem programa. Ponekad softverska greška može čak uzrokovati potpuno gašenje programa.
Većina stručnjaka za programiranje slaže se da je gotovo nemoguće stvoriti program bilo koje veličine bez da se pojavi neka vrsta softverske greške. Sa složenijim programima, šanse za razvoj bugova općenito se povećavaju. To je zato što programerima može biti teže pronaći sve greške u programima u kojima postoji mnogo različitih radnji koje korisnici mogu poduzeti.
Kako bi pronašli postojeće probleme s programskim greškama, programeri općenito čine sve što mogu da pažljivo testiraju programe prije nego što ih puste javnosti. Ponekad čak mogu unajmiti posebne radnike samo u svrhu što opsežnijeg testiranja softvera i izvještavanja o rezultatima programerima. Čak i uz sve te mjere zaštite, mnoge softverske greške nisu otkrivene prije nego što se programi izdaju.
U nekim slučajevima programeri mogu pronaći grešku, ali odluče da ona nije dovoljno ozbiljna da bi opravdala odgađanje izdavanja softvera. Kada se to dogodi, programer može krenuti naprijed i objaviti program, a zatim razviti ažuriranje koje će ispraviti preostale greške. Ovo je također uobičajeni pristup za rješavanje grešaka koje se otkriju nakon objavljivanja programa.
Ponekad program može biti u stalnom stanju fluktuacije jer programeri imaju tendenciju ugraditi više značajki tijekom vremena. Ovaj proces općenito uvodi nove probleme s programskim greškama sa svakim izdanjem. To može postati beskonačan ciklus, s programerima koji neprestano dodaju značajke softveru i popravljaju greške. U suštini, program možda nikada neće biti gotov. Umjesto toga, može se neprestano razvijati dok usput doživljava bolove rasta.
Izrada računalnog programa uključuje korištenje koda napisanog u programskim jezicima. Priroda računalnog kodiranja znači da čak i male pogreške u pisanju i slične pogreške mogu lako dovesti do problema s programskim bugovima, a programerima je vrlo teško izbjeći stvaranje nekoliko problema na ovaj način. Također je moguće da se pojave bugovi jer programer pravi logičku pogrešku prilikom kreiranja koda.