Programmatūras kļūda ir datorprogrammas koda problēma, kuras dēļ tā nedarbojas pareizi. Tās var radīt neērtības lietotājam, un dators var sabojāties vai iesaldēties. Lielākajā daļā datorprogrammu ir kļūdas. Programmu, kurā ir liels skaits kļūdu (vai, iespējams, viena vai dažas nopietnas kļūdas), sauc par kļūdainu.
Lielāko daļu kļūdu izraisa izstrādātāja slikta programmēšana, taču dažkārt tās var radīt arī kompilatora problēmas. Kad tiek atklātas kļūdas, cilvēki nosūta kļūdas ziņojumus izstrādātājam, lai informētu viņu par kļūdu un ļautu to novērst. Kļūdu dzīves cikls parasti ietver atklāšanu, ziņošanu, novērtēšanu (triāžu), labošanu, testēšanu un izplatīšanu kā atjauninājumu vai izlabotu versiju.
Dažreiz cilvēki saka, ka datorā ir kļūda, ja ar to kaut kas nav kārtībā. Problēmu parasti izraisa datorvīruss, kas ir inficējis viņu datoru un liek tam darboties lēni vai darīt dažādas lietas. Tomēr jāpiezīmē, ka ļaunprogrammatūra (vīrusi, trojāņi u. c.) nav tas pats, kas programmēšanas kļūda — ļaunprogrammatūra ir nodoma rezultāts, kamēr kļūdas parasti rodas nejauši vai no nepilnībām izstrādes procesā.
Kļūdu veidi
- Loģikas kļūdas — programma dara nepareizas darbības, jo kodā ir nepareiza loģika (piem., nepareizas nosacījumu pārbaudes).
- Sintakses kļūdas — nepareizs koda formāts, ko bieži atrisina kompilators vai šķirotājs (interpreter).
- Izpildes (runtime) kļūdas — kļūdas, kas parādās programmas darbības laikā (piem., dalījums ar nulli, nulles rādītāja piekļuve).
- Resursu pārvaldības kļūdas — atmiņas noplūdes, bloķēšanās (deadlock), resursu nepietiekamība.
- Sinhronizācijas / konkurences kļūdas — sacensības apstākļi (race conditions) daudz pavedienu vidē.
- Drošības ievainojamības — piemēram, bufera pārplūdes, kas var ļaut uzbrucējiem izpildīt ļaunprātīgu kodu.
- Interfeisa kļūdas — lietotāja saskarnes (UI) neparedzēta izturēšanās vai nepareiza datu attēlošana.
Cēloņi
- Neuzmanība vai cilvēka kļūda kodēšanas laikā.
- Nepietiekami izstrādes procesi: trūkst testēšanas, koda pārskatu vai prasību specifikācijas.
- Sarežģīta vai nekorekta prasību definīcija — izstrādātāji īsteno nepareizas prasības.
- Trešo pušu komponentu vai bibliotēku kļūdas (atkarības problēmas).
- Platformas/kompilatora kļūdas vai atšķirības starp operētājsistēmām un aparatūru.
- Laika spiediens un nogurums, kas noved pie steigas risinājumiem.
Kā atklāt un ziņot par kļūdām
- Reprodukcijas soļi: skaidri aprakstiet, kā atkārtot problēmu — soļi, sagaidāmais rezultāts un novērotais rezultāts.
- Pievienojiet lietotāja vidi: OS versiju, programmas versiju, izmantotās bibliotēkas, aparatūru.
- Izmantojiet žurnālfailus (logs), kļūdu izdrukas (stack traces) un ekrānuzņēmumus.
- Ziņošanas rīki: daudzas programmas piedāvā iebūvētas kļūdu ziņošanas iespējas vai izmanto ārējus rīkus (issue trackers).
Kā kļūdas tiek labotas
Kļūdas labošana parasti ietver problēmas reproducēšanu, cēloņa analīzi, izmaiņu veikšanu kodā, vienību testu un integrācijas testu pievienošanu, pēc tam izlabotā izlaiduma publicēšanu. Bieži vien tiek izlaisti patch vai drošības atjauninājumi (security patches), īpaši, ja kļūda ir nopietna vai apdraud lietotāju datus.
Novēršana un labas prakses
- Izmantojiet vienību testus (unit tests), integrācijas testus un automatizētās testēšanas rīkus.
- Veiciet koda pārskatīšanas (code reviews) un pair programming, lai samazinātu cilvēka kļūdas.
- Ieviesiet nepārtrauktas integrācijas (CI) procesus, kas automātiski pārbauda jaunas izmaiņas.
- Izmantojiet statisko koda analīzi un rīkus, kas atklāj potenciālas kļūdas pirms izpildes.
- Documentējiet prasības un veiciet pēc iespējas vairāk testa scenāriju, arī robežstāvokļiem (edge cases).
Sev jāpatur prātā — kļūdu nopietnība un sekas
- Kļūdas var būt tikai kosmētiskas (neietekmē funkcionalitāti) vai kritiskas (apdraud drošību, dzīvību vai datus).
- Reālās dzīves piemēri rāda, ka dažas kļūdas var radīt smagas sekas: finanšu zaudējumus, drošības pārkāpumus vai pat cilvēku bojāeju medicīnas un aviācijas nozarēs.
- Ātra un pārdomāta kļūdu novēršana un lietotāju informēšana par atjauninājumiem ir būtiska risku mazināšanai.
Praktiski padomi lietotājiem
- Pārliecinieties, ka izmantojat programmu jaunāko versiju — atjauninājumi bieži satur kļūdu labojumus.
- Regulāri dublējiet svarīgus datus, lai kļūdu vai programmatūras bojājumu gadījumā varētu atjaunot darbību.
- Ja sastopaties ar kļūdu, mēģiniet saglabāt izsmeļošu ziņojumu par reproducēšanu un nosūtiet to izstrādātājam.
- Pārliecinieties par pretvīrusu programmatūras esamību, lai atšķirtu ļaunprogrammatūru radītās problēmas no programmēšanas kļūdām.
Dažas kļūdas ir nekaitīgas, piemēram, daudzas videospēles nepareizi ļauj objektiem pārvietoties caur sienām. Citas kļūdas ir nopietnākas, piemēram, kļūda navigācijas sistēmā, kas izraisa lidmašīnas sprādzienu. Tāpēc ir svarīgi gan izstrādātājiem, gan lietotājiem saprast kļūdu cēloņus, rīkoties atbildīgi un ievērot drošības un kvalitātes praksi.