test-driven development - principles of well crafted software

17
Test Driven Development Test Driven Development Principles of well crafted software Principles of well crafted software Szymon Stępniak, 31.01.2014

Upload: szymon-stepniak

Post on 26-Jun-2015

88 views

Category:

Technology


1 download

DESCRIPTION

Prezentacja na temat Test-Driven Development z dnia 29.01.2014, zaprezentowana w ramach Friday Java Labs

TRANSCRIPT

Page 1: Test-Driven Development - principles of well crafted software

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

„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

http://www.doolwind.com/images/blog/TestDrivenGameDevelopment.png

Page 4: Test-Driven Development - principles of well crafted software

http://1minus1.com/userstorage/images/dev_graphs_testdrivendev.jpg

Page 5: Test-Driven Development - principles of well crafted software

http://developpementagile.com/media/11006/chucknorristdd.png

Page 6: Test-Driven Development - principles of well crafted software

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

1. Testy jednostkowe2. Testy integracyjne3. Testy end-to-end

Page 8: Test-Driven Development - principles of well crafted software

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

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

„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

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

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

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

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

Testy należy traktować jako kryteria akceptacyjne

Definition of Done

Page 16: Test-Driven Development - principles of well crafted software

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

Photo credits:Sunset as an exploding volcano http://www.sxc.hu/photo/116800Agenda 4 http://www.sxc.hu/photo/1328012