Razvijanje programske opreme na podlagi testov


V teh dneh sem se podal v razvoj programske opreme na podlagi testov (test-driven development, TDD). Je agilna tehnika razvoja programske opreme, kjer se naprej napiše test, še preden je napisana kakšna vrstica kode v produkciji.Pristop je populariziral Kent Beck.

Poleg tega, da nam da zagotovilo, da izvorna koda neke funkcionalnosti res deluje, nas ta metodologija sili, da razmislimo, preden začnemo pisati izvorno kodo. Če je bil kavbojski pristop včasih zaželen pri razvijanju programske opreme, pa ga današnji časi izpodrivajo v upanju na bolj zrel proces razvijanja. Pri TDD obstajajo 3 glavna pravila:

  1. Napiši neuspešen test: ne smeš napisati niti ene vrstice izvorne kode, dokler ni prisoten neuspešen test.
  2. Naredi test uspešen: ko je neuspešen test definiran, ga naredi uspešnega s čim manj napora vloženega v pisanje izvorne kode, tudi če to pomeni vračanje hardcode rezultata.
  3. Razčlenjevanje: Ko je test enkrat uspešen, šele takrat je dovoljeno razčlenjevanje izvorne kode.

Omeniti velja še, da je za dober test funkcionalnosti potrebna izolacija. To pomeni, da morajo biti vse odvisnosti funkcionalnosti, ki jo testiramo, zamenjane z lažnimi (simulatorji).

Čeprav imam nekaj teoretičnega znanja iz tega področja še iz FRI-ja (predmet Sodobni pristopi in arhitektura pri razvoju informacijskih sistemov), pa praktičnih izkušenj še nimam, zato sem se TDD-ja lotil s pomočjo knjige Laravel Testing Decoded, kjer Jeffrey Way TDD opisuje z uporabo PHPUnit-a, apliciranega na spletnem ogrodju Laravel. Za ustvarjanje lažnih odvisnosti (simulatorjev) uporablja Mockery.