čtvrtek 14. dubna 2005

Do pranice: Integrační vs. Unit testy

Jaký druh testů vlastně píšete, položili jste si někdy tuto otázku? Já jsem si tuhle otázku párkrát položil. Možná jste si tuhle otázku položili i vy, ale v jiném kontextu. Co třeba, proč vlastně nepíšu tesy? V mojí praxi jsem shledal několik důvodů, proč vývojáři nepíši testy

  • Nikdy o automatizovaných testech neslyšeli a ani je neviděli.
  • Automatizované testy považují za zbytečnost, jejich kód je bez chyb.
  • Chápou výhody automatizovaných testů, ale neví jak na to.
  • Pracují v tak rychle měnících se podmínkách, že náklady na tvorbu testu, převyšují jeho platnost.

Možná vás napadne ještě nějaký důvod, ale to nic nemění na faktu, že minimálně první, druhý a třetí bod mají něco společného. Podle mého názoru je ten společný jmenovatel nedostatečná osvěta v tomto směru. Nedivil bych si, kdyby jste si teď zaklepali na čelo a namístě odpřísáhli, že o automatizovaných testech se toho píše dost. Máte pravdu je oblast, o které se toho napsalo dost a dost. Tou oblastí jsou takzvané jednotkové alias unit testy.

Integrační vs. Unit testy

Připusťme, že chápeme výhody unit testů a dále připusťme, že tu máme velké množství materiálu, které ukazují jak psát unit testy na velice jednoduchých příkladech. Ještě lépe, na příkladech, které jsou jak vystižené a kde nejsou takměř žádné náklady na napsání testu. A to je ten problém.

Kolik takových unit testů jste v praxi napsali? Jaké množství unit testů připadá na celkový počet vašich testů? Jestli netušíte kam tím mířím, poskytnu malou nápovědu, unit test je pouze a jenom takový test, kdy je objekt testován v izolaci. Kolik objektů ve vašich projektech pracuje autonomně na zbytku systému a můžete je otestovat v izolaci? Pozor to není chyba, ale vlastnost! Ještě jednou se zamyslete, kolik procent z celkového počtu testů tvoří unit testy? V mém případě to bude do 10%.

Dámy a pánové, 90% testů, které jsem napsal, je povahy nejednotkové. Ten zbytek tvoří integrační testy. Přijímám fakt, že integrační testy, tedy testy, kdy se testuje součinnost několika objektů (komponent), jsou náročnější na tvorbu než unit testy. Nepřijímám prostý fakt, že testy nelze psát. Testy nelze psát pouze za určitých podmínek.

Vidím několik specifických sfér, na které by se testy "asi" nedaly napasovat. Opravdovým problémem je to, že na zbytek se vývojáři snaží napasovat unit testy, což je mnohdy krkolemné až nemožné. Říkám:Pišme testy, učme se psát testy, šiřme osvětu a především nezapomínejme, že svět testů nezačíná a nekončí s unit testem....

Do pranice