Category Archives: Test Driven Development

TDD is dead. Tényleg?

Pont TDD tanfolyam volt előző héten, amikor volt egy videó, amiben David Heinemeier Hansson, Martin Fowler és Kent Back beszéltek (vitatkoztak?) a témáról. A kiváltó cikk ez.
A második két ember gondolom közismert, David Heinemeier Hansson a Ruby on Rails létrehozója.

Az első rész nem volt túl mély, remélem a másodikban kicsit jobban belejönnek, bár lehet, hogy kár ezt várni. Van, amikor természetesen jön a TDD, van, amikor nem, ilyenkor igyekszünk utólag tesztelni, ha sikerül. Semmi se szentírás a szakmában, van, aki elölről szereti, van, aki hátulról. Mint az Eurovíziós dalfesztiválon. :)

Meghalt a Pex, éljen a Code Digger!

Van/volt a Microsoft Research-nek egy Pex nevű kis Visual Studio Extensionje. Automatikusan képes volt Unit teszteket generálni. Nem egyszerűen permutálta egy tesztelendő metódus paramétereit, hanem belenézett a kódjukba, kihalászta belőle a literálokat (a == 3, case “alma”, b *= 4, ezekből a 3, 4 és amát), és ezeket is felhasználva generált paramétereket a teszteléshez. Miközben futtatta a tesztelt kódot, közben profilerrel nézte mely ágakat fedte le, így addig próbálta nyúzni a kódot, míg 100%-os lefedettséget nem ért el. Null és üres string ellenőrzési hiányosságokat, túlcsordulásokat és tömb túlcímzéseket másodpercek alatt ki tudott váltani. A generált unit teszteket aztán át lehetett mozgatni a saját tesztjeink közé.
No, sajnos a Pex egyelőre meghalt, a cimboráját, a Moles-s termékesítették, ez lett a Fakes, de ő kimaradt ebből a menetből. Így ő csak VS 2010-ben futtatható, újabbakban nem.

Cserébe viszont most kiadtak egy “Pex light”-ot, ez a Code Digger.

Ugyanaz az engine van benne, mint a Pexben, csak nem generál a metódus macerálás végén unit teszteket, csak megmutatja, melyik paraméterre mit reagált.

Egy-egy kényesebb metódusra érdemes lefuttatni, tanulságos lehet.

TDD tanfolyam

Test Driven Development – I like it

Egyre több dolgot TDD módon írok meg. Ami szembetűnő a korábbi, először implementálok aztán ha van rá idő írok hozzá tesztet (nem fogok) módszerhez az a következő:
-Sokkal kevesebbet, nagyon sokszor egyáltalán nem debugolok. Ez eszement sok időt spóroló tevékenység, gyűlölöm, amikor 2-3 percet is nyomkodok, mire eljutok a betegnek vélt ponthoz a debuggerben. Ott aztán sokszor kilép a debugger (pont timeoutolt a web worker process), release kód miatt nem mutat változókat, továbbléptetem, aztán kezdhetem elölről (lehet mozgatni a current pointert, de ha már okoztunk mellékhatásokat hiába megyünk vissza), stb. Szeretem az advanced debuggung témát, de utálom az időt vele feleslegesen tölteni.
-A GUI-t alig indítom el, ezáltal megint nagyon sok időt takarítok meg.
-Az implementált dolgaim azonnal mennek, amikor a GUI-t is elindítom, már csak élvezni kell az eredményt.
-Hamarabb készen vagyok a feladattal. Tudom, ezt nem lehet objektíven mérni, mert nincs mihez viszonyítani. De az első két pont miatt érzésre annyi időt megtakarítunk, ami felülmúlja a tesztekre szánt időt.

Igazából a TDD nem is a tesztelésről szól. Ez komplexitás és félelem kezelés. Arról szól, hogyan implementáljuk egy bonyolult feladatot sok kicsit változaton keresztül úgy, hogy ne őrüljünk bele, ne legyen sok kudarcunk. Az már csak egy plusz, hogy sokkal jobb lesz a kódminőség.