Test Driven Development
Tesztelés
Az alábbi ábra mutatja a tesztelések eloszlását hagyományos és agilis fejlesztéseknél. Az egész lényege, hogy minél előbb és a fejlesztőhöz a lehető legközelebb derüljön ki a hiba, mert annál gyorsabb és olcsóbb annak javítása. Könnyen belátható, hogy egy leszállított terméket kell visszahívni az körülményesebb mintha a fejlesző a run tests gombra nyomva azonnal, helyben az adott kód részlet írása közben (amikor még az a kontextus van a fejében) kap egy képet arról, hogy mi nem jó. De még midnig jobb ha pl. sprinten belül egy automatizált integrációs teszt fogja meg a hibát, stb.
TDD
- What is Test Driven Development?
- Introduction to Test Driven Development (TDD)
- TDD
- TDD Laws
- Az eredeti egy refaktorált verziója innen:
- Write production code only to make a failing unit test pass.
- Write only enough of a unit test to fail.
- Write only enough production code to make the failing unit test pass.
- Az eredeti egy refaktorált verziója innen:
- TDD wikiről
TDD cycle
As the tests get more specific, the code gets more generic.
-- Uncle Bob
Red
- tesztelj egyszerre egy dolgot
- a teszt legyen nagyon egyszerű
- folyamatosan növeld teszt(esetek) komplexitását
- mockold a függőségeket
Writing Unit Tests
Green
- a lehető legegszerűbb kóddal felelj meg a teszt által támasztott követelménynek
- nem baj ha csúnya, ebben a lépésben csak az számít, hogy a teszt ne bukjon
- amint a teszt zöld (és másik sem bukik), ez a fázis kész
Refactor
- Refactoring by Martin Fowler
- Refactoring methods
- Refactoring methods
- Refactoring Java Code
- Refactoring vs. Rewrite
Transformation Priority Premise
Beragadás esetén visszalépés, vagy másik módszert kell választani. A beragadás megelőzésére van a TPP.
- Robert C. Martin (Uncle Bob) írása, összefoglalásul pedig a transformációk:
- ({} -> nil) no code at all -> code that employs nil
- (nil -> constant)
- (constant -> constant+) a simple constant to a more complex constant
- (constant -> scalar) replacing a constant with a variable or an argument
- (statement -> statements) adding more unconditional statements.
- (unconditional -> if) splitting the execution path
- (scalar -> array)
- (array -> container)
- (statement -> tail-recursion)
- (if -> while)
- (expression -> function) replacing an expression with a function or algorithm
- (variable -> assignment) replacing the value of a variable.
- Advanced TDD: The Transformation Priority Premise
- 1 órás videó, Robert C. Martintól
Coding Dojo
Egyéb a TDD-hez (lazábban) kapcsolódó anyagok
- Behavior Driven Development
- Ez a TDD kiterjesztése, lényege, hogy a megrendelővel (és nem is annyira egy menedzserrel, hanem sokkal inkább egy domain szakértőjével) való egyeztetés folyamán, egy strukturált, ám természetes nyelvi szöveggel leírt „szabályok” formájában kerül leírásra az elvárt működés. Ezek alapján aztán a fejlesztő több tesztet is ír (szemben a TDD-vel, ahogy egyszerre szigorúan egyet), majd a tesztek összességének megfelelő kódot ír
- TDD vs. BDD
- Wikipédia BDD cikke
- Agile alliance összefoglalója a BDD-ről
- Readme Driven Development
- Különösen ajánlom elolvasni, kb. egy oldal
- Acceptance Test Driven Development (ATDD)
- types vs. tests
- video ~21 min
- I don't need types
- blogposzt a típusosságról