Többet kellene-e a TDD-t használni?
Jó ideje követem Dave Farley Modern Software Engineering c. YouTube csatornáját, bár korántsem nézek meg minden adást.
Dave - Jez Humble mellett - a Continuous Delivery atyja, és a CD könyv másik szerzője, érdemes tehát rá odafigyelni.
Ebben az adásában Emily Bache-csel beszélget (ő a Samman Technical Coaching kidolgozója) arról, hogy a TDD-t többet kellene-e alkalmazni a szoftverfejlesztésben annál, mint amennyire most használják.
Csodálkoztam volna azon, ha a beszélgetésükből halványnyit is más jött volna ki egy egyértelmű IGEN!-nél, de meghallgattam a beszélgetést, van-e mégis valamilyen meglepő dolog benne.
Két főbb gondolat volt most, ami megragadt a beszélgetésből:
A TDD segítségével rögtön a kliens irányából fogalmazzuk meg, mit várunk el a rendszertől anélkül, hogy foglalkoznánk azzal, hogyan is lesz az implementáció. Ez az outside-in megközelítés lehetőséget biztosít arra, hogy a lehető leghamarabb szembesüljünk kemény tervezési döntésekkel. A TDD ezért elsősorban egy tervezési eszköz.
A fejlesztők alapvetően nem jó tervezők, a TDD viszont lehetőséget biztosít arra, hogy valóban azzá váljanak. Ezt mindaddig nem tudják, amíg a módszert nem alkalmazzák. (Lehet, hogy ez utóbbit nem mondták ki, és csak én hallucináltam bele.)
Hadd éljek egy kiegészítéssel: Nem gondolom, hogy ez lenne a teljes igazság, amikor rendszert tervezünk. Gondoljunk csak a Domain Driven Design aggregate-jeire, az adatbázis tranzakciókra stbstb, csak hogy pár példát említsek. Ezek olyan belső megvalósítási kényszerek, amik visszahatnak magára az interfészre is. Nem mindig minden top-down (vagy outside-in) módon megtervezhető.
Sosem értettem, hogy ezeket a szempontokat miért nem hozzák be egy ilyen beszélgetésbe. Így nekem kicsit erejüket vesztik ezek az egyoldalú beszélgetések, amiket egyébként már 20 évvel ezelőtt is hallhattunk.
Ennek ellenére fontos gondolatok hangzanak el, mindketten nagyon jól tanítanak, és én meg imádom a TDD-t, de a refaktorálást még inkább.
A TDD-re tapasztalatom szerint kevesen gondolnak tervező eszközként, és szeretnék én is többet gondolni rá így.