Testno voden razvoj (Test Driven Development – TDD, test-first programming, test-driven design, test-first design) je agilen iterativni (po delih) proces razvoja programske kode, kjer programer napiše avtomatizirane teste posameznih programskih enot pred kodo, v kateri nato implementira zahtevano funkcionalnost. Enota je najmanjša možna testna komponenta (metoda, lahko tudi razred). Nato sledi preoblikovanje kode. Cilj testno vodenega razvoja je čista koda, ki deluje in ne sredstvo za odkrivanje napak (bugov).

TDD koraki uredi

  1. groba analiza in načrtovanje funkcionalne zahteve
  2. napiši test, ki testira majhen košček funkcionalnosti zahteve
  3. zaženi test, ki mora PROPASTI
  4. napiši NAJMANJŠO možno kodo, ki še pozitivno opravi test.
  5. izvedi vse teste, ki morajo biti uspešni
  6. preoblikuj kodo in ponovi prejšnji korak
  7. če zahteva ni končana skoči na 2. korak, sicer naslednja zahteva (1. korak)

TDD pravila uredi

  • Novo poslovno logiko je dovoljeno pisati samo, če je propadel izbran test
  • Vsak test mora biti neodvisen od ostalih
Vsako obnašanje mora biti stestirano zgolj z enim testom.
  • Ne piši nepotrebnih assertov
Testne enote (unit test) je specifikacija, kako bi naj enota delala, ne pa seznam ::opazovanj, kaj je koda naredila.
  • Testira se samo ena metoda
Zaradi napake propade samo test ene enote. Lažje ugotovimo vzrok napake.
  • Izključi vse zunanje storitve in podatke s stanjem
Drugače lahko storitve vplivajo na več testov hkrati, ter testne enote na drug drugi izhod.
  • Ne testiraj konfiguracijske kode
Po definiciji, konfiguracijske nastavitve niso del nobene enote.
  • Poimenuj teste enot jasno in konsistentno
Npr. imeMetodeTest().
  • Razumljivi testi
Testi so kratki, enostavno napisani, tako da je očitna funkcionalnost enot.

Plusi TDD uredi

  • živa dokumentacija
  • manjša potreba po debuggerju
  • TDD je več kot testiranje, pomeni načrtovanje programa
  • kljub več kode (testi!) časovno hitrejša pot do programa
  • bolj modularna, rahlo sklopljena koda
  • vsa koda pokrita s testi
  • regresijsko testiranje boljše pri odkrivanju skritih napak

Minusi TDD uredi

  • vseh stvari ni mogoče ali je težko testirati (legacy, UI, ...)
  • navidezna izguba časa s pisanjem testov
  • vzdrževanje kopice (slabih) testov
  • skušnjava, da ob prenavljanju ignoriramo propadle teste
  • teste in kodo piše isti programer
  • neupravičeno zanašanje na teste
  • vidljivost kode (private...)

Preoblikovanje kode (refactoring) uredi

Preoblikovanje kode je proces spreminjanja programske kode, na način da ne spremeni zunanje obnašanje kode, ampak izboljša njeno zgradbo in delovanje. S preoblikovanjem kode, odpravljamo podvajanje kode in nejasnosti, ter se izogibamo težavam v prihodnje. Preoblikovanje ne sme vnašati nove funkcionalnosti!

Viri uredi