test-driven development - principles of well crafted software
DESCRIPTION
Prezentacja na temat Test-Driven Development z dnia 29.01.2014, zaprezentowana w ramach Friday Java LabsTRANSCRIPT
![Page 1: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/1.jpg)
Test Driven DevelopmentTest Driven DevelopmentPrinciples of well crafted softwarePrinciples of well crafted software
Szymon Stępniak, 31.01.2014
![Page 2: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/2.jpg)
„By 2022 it will be not possible to get a professional programming job if you do not practice TDD routinely.”
Allan Kellyhttp://allankelly.blogspot.com/2014/01/programmers-without-tdd-will-be.html
![Page 3: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/3.jpg)
http://www.doolwind.com/images/blog/TestDrivenGameDevelopment.png
![Page 4: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/4.jpg)
http://1minus1.com/userstorage/images/dev_graphs_testdrivendev.jpg
![Page 5: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/5.jpg)
http://developpementagile.com/media/11006/chucknorristdd.png
![Page 6: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/6.jpg)
3 prawa TDD Uncle Boba● Nie pisz linijki kodu produkcyjnego, dopóki nie napiszesz
testu kończącego się niepowodzeniem● Nie pisz więcej niż jednego testu kończącego się
niepowodzeniem● Nie pisz więcej kodu produkcyjnego niż jest to wymagane
przez nieprzechodzący test
![Page 7: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/7.jpg)
1. Testy jednostkowe2. Testy integracyjne3. Testy end-to-end
![Page 8: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/8.jpg)
Charakterystyka testów jednostkowych● Szybkość wykonywania● Izolacja● Ograniczenie do zakresu odpowiedzialności testowanej
jednostki (klasy, metody, funkcji, reguły biznesowej)
![Page 9: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/9.jpg)
Po czym rozpoznać dobre testy jednostkowe?● Sprawdzają dokładnie to co zostało opisane w nazwie testu● Koncentrują się na interakcjach zachodzących w kodzie● Weryfikują reguły biznesowe za które odpowiedzialna jest
testowana jednostka, wraz z warunkami brzegowymi● Jeśli test nie przechodzi, powód jest jeden i jest on
jednoznacznie określony● Prezentują poziom co najmniej równy poziomowi kodu produkcyjnego!
![Page 10: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/10.jpg)
„Złe” testy to takie, które:● Testują zbyt wiele● Nie pełnią roli dokumentacyjnej kodu produkcyjnego● Są podatne na mutacje● Przechodzą, nawet gdy testowana jednostka w kodzie
produkcyjnym nie działa zgodnie z kryteriami akceptacyjnymi● Nie wnoszą żadnej wartości!
![Page 11: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/11.jpg)
Koncentracja na max. pokryciu kodu testami● Automatycznie testuję wszystkie settery i gettery● Stopień pokrycia kodu obiektów domenowych: 100%● Całkowity stopień pokrycia kodu: 96.4%
Jeśli moim celem jest posiadanie jak największej ilości testów oraz jak największego pokrycia, prawdopodobnie ukrywamy znacznie poważniejszy problem...
![Page 12: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/12.jpg)
Koncentracja na max. pokryciu kodu testami● Żadna klasa nie jest testowana automatycznie● Stopień pokrycia kodu obiektów domenowych: 24%● Całkowity stopień pokrycia kodu: 63.2%
Czy teraz widzimy ukryty problem?
![Page 13: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/13.jpg)
Wnioski płynące z drugiego przypadku● Kodzik nie był pisany za pomocą TDD (przypadki użycia i
testy były projektowane po napisaniu koda)● Co więcej, pisząc ten kodzik nie myśleliśmy o faktycznym
zapotrzebowaniu na dostarczane funkcjonalności● A zatem prawdopodobnie naszym celem nie było spełnienie
reguł biznesowych...● ... i stworzyliśmy 76% niepotrzebnego kodu w core domain.
![Page 14: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/14.jpg)
Wysokie pokrycie kodu nie jest niczym złym...... o ile jest „efektem ubocznym” wielu dobrze przemyślanych przypadków testowych, a nie celem samym w sobie.
![Page 15: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/15.jpg)
Testy należy traktować jako kryteria akceptacyjne
Definition of Done
![Page 16: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/16.jpg)
Co daje nam stosowanie TDD?● Poczucie bezpieczeństwa● Zredukowaną ilość zbędnego kodu● Lepiej „skrojoną” architekturę● Brak obawy przed utratą pracy w roku 2022 :-)
![Page 17: Test-Driven Development - principles of well crafted software](https://reader034.vdocuments.us/reader034/viewer/2022052323/558c5e5bd8b42a130c8b4644/html5/thumbnails/17.jpg)
Photo credits:Sunset as an exploding volcano http://www.sxc.hu/photo/116800Agenda 4 http://www.sxc.hu/photo/1328012