Par testiem

Permalink • Kompīši • 19.02.09

Pēdējos laikos man ir bijusi privilēģija un iespēja rakstīt testus pirms koda. Un ir tīri labi iegājies un patīk. Šķiet, nozīmīgākā lieta manā programmētāja izaugsmē kopš OOP atklāsmes.

“Privilēģija”, jo var būt dažādi iemesli, kāpēc testu rakstīšanu piekopt būtu neērti. Man uzreiz prātā nāk divi:

  • Jādarbojas ar vecu kodu, kas sapiņķerēts tā, ka atsevišķas daļas grūti atsevišķi notestēt. Vai vēl trakāk, neviens īsti nezin, kā tām vispār pareizi jāstrādā.
  • Nav infrastruktūras. Ja izstrādes vide ir jauna un nenobriedusi, tad var gadīties testēšanas ērtībām vajadzīgas lietas rakstīt pašam. Bet tam nav laika, jo slinkums un “daudz darba”.

Nu ja, bet man ir sanācis trāpīt ideālā situācijā, testi rakstās viegli.
Kā es daru:

  • Pirms rakstīt jaunu koda gabaliņu, rakstu testu, kas šo gabaliņu pārbauda.
  • Pirms labot kļūdu, rakstu testu, kas šo kļūdu demonstrē (izgāžas), tad salaboju kļūdu.
  • Tests pārbauda man vajadzīgo funkcionalitāti nevis implementācijas sīkumus. Implementācijas ir tikai tik daudz, lai tests izpildītos.

Šis ir plāns standartsituācijām, vienmēr jau tā nevar. Un vispār, dzelžaini priekšraksti, tāpat kā dzelžaini uzskati, ir bīstami.

Katram sīkumam rakstīt testu ir ilgāk, nekā veicīgi uzrakstīt un iet mājās. Bet, lūk, labumi:

  • Kā uzrakstīt testu, ja tu nemaz nezini, ko testēt, kā tavs veidojums strādās? Nuja, nākas izdomāt, uzkonstruēt iepriekš, galvā vai uz papīra. Nevis uzreiz bliezt un pēcāk izmest un pārrakstīt. Testa rakstīšanas laikā arī var sanākt atcerēties kādu apsvērumu, par kuru aizmirsts.
  • Var taisīt lielas un drosmīgas izmaiņas un beigās, pēc testu izdarbināšanas, tomēr ir kāda pārliecība, ka gala rezultāts vēl strādā.
  • Tests ir atkļūdošanas palīgs: labojot kļūdu un pārbaudot, vai ir salabota, testu izdarbināt parasti ir ātrāk, nekā manuāli mēģināt kļūdu atkal izprovocēt.
  • Vienkārši patīkama sajūta un lielāka pārliecība, ka veidojums strādā. Pilnīgi droša garantija, protams, nav, bet labāk kā nekas.

Šeit viena saite, kas jauki demonstrē domu gājienu rakstot testus pirms koda / reizē ar kodu: An Extreme Programming Episode
Automātiski darbināmi testi droši vien nav universālais glābiņš, un gan jau ar laiku būs izdomāts kas progresīvāks, bet šobrīd man patīk!