Tehnoloģijas

Kvalitātes testēšana: Kāpēc 100% pārklājums negarantē programmatūras kļūdas neesamību?

okei.lv redakcija
Dalīties

Kvalitātes testēšana: Vai 100% pārklājums tiešām nozīmē drošību?

Daudzi programmētāji uzskata, ka, ja koda testu pārklājums (Code Coverage) sasniedz 100% un visi testi ir “zaļi”, tad programmatūra ir pilnīgi droša. Tomēr pieredze rāda, ka tas ir mīts. Programmatūras izstrādātāji bieži saskaras ar situāciju, kad šķietami perfekti testēta sistēma pēkšņi salūst.

Kas īsti ir Code Coverage?

Code Coverage mēra tikai to, cik liela daļa koda rindu tiek izpildīta testu laikā. Svarīgi saprast: tas, ka koda rinda ir izpildīta, nenozīmē, ka tā ir pareizi pārbaudīta. Testi var izpildīt kodu, nevis patiesi pārbaudīt, vai rezultāts ir pareizs.

Galvenie iemesli, kāpēc testi nav pilnīgs risinājums

  • Zinātnes robežas (Dijkstras likums): Kā savulaik teica datorzinātnes pionieris Edsgers Deikstra: “Testēšana var pierādīt kļūdu klātbūtni, bet nekad to neesamību.”
  • Stāvokļu telpas eksplozija: Mūsdienu programmas ir tik sarežģītas, ka visu iespējamo datu kombināciju un stāvokļu pārbaude aizņemtu triljoniem gadu.
  • Orakla problēma: Testiem ir jāzina, kādam jābūt pareizajam rezultātam. Sarežģītās sistēmās bieži vien nav skaidra “pareizā” atbilžu varianta, ko salīdzināt.
  • Halteproblēma: Nav iespējams radīt universālu rīku, kas vienmēr precīzi pateiktu, vai programma nonāks bezgalīgā ciklā vai vienkārši darbojas ļoti lēni.

Kā uzlabot testēšanas kvalitāti?

Lai gan testi nevar garantēt absolūtu korektumu, tie ir lielisks veids, kā būvēt uzticību. Profesionāļi izmanto vairākas metodes, lai mazinātu risku:

Metode Apraksts
Property-based testing Testē īpašības, kas jāizpilda visiem datiem, nevis tikai atsevišķus piemērus.
Fuzzing Sistēmas “bombardēšana” ar nejaušiem datiem, lai atrastu negaidītus stāvokļus.
Mutation testing Koda mākslīga “bojāšana”, lai pārbaudītu, vai testi vispār spēj pamanīt kļūdas.

Secinājums

Testi nevar kļūt par pierādījumu. Tie ir tikai viens no instrumentiem uzticības veidošanai. Laba sistēma vienmēr jāpapildina ar reāllaika uzraudzību (monitoring), spēju ātri atjaunot iepriekšējo versiju un gatavību negaidītiem kļūmju scenārijiem.

Un kādu pieeju Tu izmanto, lai pārliecinātos, ka Tavs kods darbojas tieši tā, kā iecerēts?

✎Kļūda rakstā?
Iezīmē tekstu un spied ziņot par kļūdu.

Seko okei.lv

Tehnoloģiju jaunumi latviski. Izvēlies sev ērto tīklu.

Līdzīgi raksti