SlideShare a Scribd company logo
Píšeme čitelný kód #5
Jak otestovat spaghetti kód a přejít na TDD
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Testujete?
$result = $car->getFullCarName();
//var_dump($result);
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Každý testuje.
Kdo říká, že ne, ten testuje nejvíc.
Matěj Rokos | Driveto.cz
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Soutěžní otázka 1: Co lze jednotkově
testovat?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Rozbor odpovědi 1-3
• Využívá zdroje (Databáze, filesystem, webové služby, aj.)
• Dále více věcí najednou (získá data, spočítá výsledek)
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Rozbor odpovědi 1-1
+Oddělená business logika
- Stále není jednotkově testovatelné
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Rozbor odpovědi 1-2
+Deterministicky testovatelné (na zadaný vstup -> očekávatelný výstup)
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Jak můžeme testovat?
• Unit testy:
• Nejmenší součást kódu
• Bez externích závislostí
• Integrační testy:
• Funkcionalita více služeb „pohromadě“
• Akceptační testy:
• Testujeme „celek“
• Request->response
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Př. 1: REST API – mobilní aplikace
App
Api
DatabázeAvg. calculator
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Př. 2: Symfony PHP backend
Web Controller Avg. calculator
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Soutěžní otázka 2: Co je „TDD“?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Jak na otestování špaget?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
1. Ručně otestovat web/aplikaci
• Funguje vůbec?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
2. Identifikovat business logiku
• Které části kódu jsou klíčové?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
3. Přesun logiky do služeb
• Business logika je klíčová -> nutno testovat
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
4. Otestovat znovu
• Nerozbil jsem nic?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
5. Testování
1. Příprava prostředí
2. Napíšeme test
1. Přidáme různé vstupy, které nás napadnou,
bez ohledu na to, jestli mohou či nemohou nastat
2. Velmi pravděpodobně nalezneme spoustu chyb
3. Opravíme kód třídy tak, aby testy procházely
- tento postup již připomíná TDD
https://phpunit.de/getting-started/phpunit-7.html
<2, 3> 2,5
<10, 20> 15
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Testování v praxi
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Soutěžní otázka 4: Co nebyla business logika?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Shrnutí
1. Všichni již stejně testujeme (var_dump?)
2. Oddělená business logika – SRP
viz samostatná přednáška:
https://www.slideshare.net/PetrBechyn/phpkai-peme-iteln-kd-2-by-petr-bechyn-driveto)
3. Unit test
1. nevyužívá externí zdroje (databáze, webservices)
2. Je rychlejší než integrační testy (= rychlejší zpětná vazba)
3. Nevyžaduje komplexní sadu vstupů k otestování všech scénářů
4. Díky výše zmíněnému je snadno a rychle debugovatelný
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Kam dál?
1. Automatické testy -> CI:
1. Školení
1. https://pehapkari.cz/kurz/ci-a-cd-s-gitlab-ci-z-0-na-100/)
2. Nástroje?
1. Github – lze zdarma využít Travis, nebo CircleCI
2. Gitlab – build-in nástroj pipelines
3. Bitbucket – build-in nástroj pipelines
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Reference
• Další čtení:
• https://martinfowler.com/bliki/UnitTest.html
• https://phpunit.de/getting-started-with-phpunit.html
• Testovací repo:
• https://github.com/driveto/writing-readable-code-5
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Dotazy
• Dotazy, náměty, připomínky…?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
Díky za pozornost!
• We are hiring 
www.driveto.cz
Petr Bechyně petr.bechyne@driveto.cz
CTO Driveto 736 761 183
Michal Hojgr michal.hojgr@driveto.cz
Senior developer Driveto
github.com/driveto
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně

More Related Content

Similar to Péhápkaři - Píšeme čitelný a testovatelný kód #5 by Driveto dev team

SEO Restart 2024: Martina Zrzavá Libřická - SEO & DEV: Jak na vývojáře od poc...
SEO Restart 2024: Martina Zrzavá Libřická - SEO & DEV: Jak na vývojáře od poc...SEO Restart 2024: Martina Zrzavá Libřická - SEO & DEV: Jak na vývojáře od poc...
SEO Restart 2024: Martina Zrzavá Libřická - SEO & DEV: Jak na vývojáře od poc...
Taste
 
Jak mít lepší web pomocí řízených změn pro UX Monday v Ostravě
Jak mít lepší web pomocí řízených změn pro UX Monday v OstravěJak mít lepší web pomocí řízených změn pro UX Monday v Ostravě
Jak mít lepší web pomocí řízených změn pro UX Monday v Ostravě
Vojtech Mikula
 
PhpStorm @ Poslední Sobota 29.10.2016
PhpStorm @ Poslední Sobota 29.10.2016PhpStorm @ Poslední Sobota 29.10.2016
PhpStorm @ Poslední Sobota 29.10.2016
Tomáš Fejfar
 
SEO Restart 2022: Marek Prokop - Analýza klíčových slov v R
SEO Restart 2022: Marek Prokop - Analýza klíčových slov v RSEO Restart 2022: Marek Prokop - Analýza klíčových slov v R
SEO Restart 2022: Marek Prokop - Analýza klíčových slov v R
Taste
 
Veronika Rojkovičová: Jak mít lepší web pomocí řízených změn
Veronika Rojkovičová: Jak mít lepší web pomocí řízených změnVeronika Rojkovičová: Jak mít lepší web pomocí řízených změn
Veronika Rojkovičová: Jak mít lepší web pomocí řízených změn
H1.cz
 
SEO pohledem datového analytika
SEO pohledem datového analytikaSEO pohledem datového analytika
SEO pohledem datového analytika
Taste Medio
 
Rizika použití WordPressu
Rizika použití WordPressuRizika použití WordPressu
Rizika použití WordPressu
SUPERKODERS
 
Performance testy v době continuous delivery (ITvečer na FIT ČVUT)
Performance testy v době continuous delivery (ITvečer na FIT ČVUT)Performance testy v době continuous delivery (ITvečer na FIT ČVUT)
Performance testy v době continuous delivery (ITvečer na FIT ČVUT)
SmartMeter.io
 
SEO pro eshopy a jejich majitele/správce - Eshopvíkend 2015 :-)
SEO pro eshopy a jejich majitele/správce - Eshopvíkend 2015 :-)SEO pro eshopy a jejich majitele/správce - Eshopvíkend 2015 :-)
SEO pro eshopy a jejich majitele/správce - Eshopvíkend 2015 :-)
Jakub Kašparů
 

Similar to Péhápkaři - Píšeme čitelný a testovatelný kód #5 by Driveto dev team (9)

SEO Restart 2024: Martina Zrzavá Libřická - SEO & DEV: Jak na vývojáře od poc...
SEO Restart 2024: Martina Zrzavá Libřická - SEO & DEV: Jak na vývojáře od poc...SEO Restart 2024: Martina Zrzavá Libřická - SEO & DEV: Jak na vývojáře od poc...
SEO Restart 2024: Martina Zrzavá Libřická - SEO & DEV: Jak na vývojáře od poc...
 
Jak mít lepší web pomocí řízených změn pro UX Monday v Ostravě
Jak mít lepší web pomocí řízených změn pro UX Monday v OstravěJak mít lepší web pomocí řízených změn pro UX Monday v Ostravě
Jak mít lepší web pomocí řízených změn pro UX Monday v Ostravě
 
PhpStorm @ Poslední Sobota 29.10.2016
PhpStorm @ Poslední Sobota 29.10.2016PhpStorm @ Poslední Sobota 29.10.2016
PhpStorm @ Poslední Sobota 29.10.2016
 
SEO Restart 2022: Marek Prokop - Analýza klíčových slov v R
SEO Restart 2022: Marek Prokop - Analýza klíčových slov v RSEO Restart 2022: Marek Prokop - Analýza klíčových slov v R
SEO Restart 2022: Marek Prokop - Analýza klíčových slov v R
 
Veronika Rojkovičová: Jak mít lepší web pomocí řízených změn
Veronika Rojkovičová: Jak mít lepší web pomocí řízených změnVeronika Rojkovičová: Jak mít lepší web pomocí řízených změn
Veronika Rojkovičová: Jak mít lepší web pomocí řízených změn
 
SEO pohledem datového analytika
SEO pohledem datového analytikaSEO pohledem datového analytika
SEO pohledem datového analytika
 
Rizika použití WordPressu
Rizika použití WordPressuRizika použití WordPressu
Rizika použití WordPressu
 
Performance testy v době continuous delivery (ITvečer na FIT ČVUT)
Performance testy v době continuous delivery (ITvečer na FIT ČVUT)Performance testy v době continuous delivery (ITvečer na FIT ČVUT)
Performance testy v době continuous delivery (ITvečer na FIT ČVUT)
 
SEO pro eshopy a jejich majitele/správce - Eshopvíkend 2015 :-)
SEO pro eshopy a jejich majitele/správce - Eshopvíkend 2015 :-)SEO pro eshopy a jejich majitele/správce - Eshopvíkend 2015 :-)
SEO pro eshopy a jejich majitele/správce - Eshopvíkend 2015 :-)
 

More from Petr Bechyně

Glami - jak řešíme performance, aneb jak neshodit web TV reklamou
Glami - jak řešíme performance, aneb jak neshodit web TV reklamouGlami - jak řešíme performance, aneb jak neshodit web TV reklamou
Glami - jak řešíme performance, aneb jak neshodit web TV reklamou
Petr Bechyně
 
Adam Szabo: Jak jsme v Driveto zlepšovali konverze
Adam Szabo: Jak jsme v Driveto zlepšovali konverzeAdam Szabo: Jak jsme v Driveto zlepšovali konverze
Adam Szabo: Jak jsme v Driveto zlepšovali konverze
Petr Bechyně
 
Péhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, DrivetoPéhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, Driveto
Petr Bechyně
 
Doctrine Data migrations | May 2017
Doctrine Data migrations | May 2017Doctrine Data migrations | May 2017
Doctrine Data migrations | May 2017
Petr Bechyně
 
SEO Restart 2015 - Collabim
SEO Restart 2015 - CollabimSEO Restart 2015 - Collabim
SEO Restart 2015 - Collabim
Petr Bechyně
 
Péhápkaři - Píšeme čitelný kód #3 by Driveto
Péhápkaři - Píšeme čitelný kód #3 by DrivetoPéhápkaři - Píšeme čitelný kód #3 by Driveto
Péhápkaři - Píšeme čitelný kód #3 by Driveto
Petr Bechyně
 
Péhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, DrivetoPéhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, Driveto
Petr Bechyně
 
Péhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, DrivetoPéhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, Driveto
Petr Bechyně
 
Svlékněte konkurenci donaha: Jiří Koutný, Collabim
Svlékněte konkurenci donaha: Jiří Koutný, CollabimSvlékněte konkurenci donaha: Jiří Koutný, Collabim
Svlékněte konkurenci donaha: Jiří Koutný, Collabim
Petr Bechyně
 
Pionýři Digitálu #2 - Klíčová analýza slov
Pionýři Digitálu #2 - Klíčová analýza slovPionýři Digitálu #2 - Klíčová analýza slov
Pionýři Digitálu #2 - Klíčová analýza slov
Petr Bechyně
 

More from Petr Bechyně (10)

Glami - jak řešíme performance, aneb jak neshodit web TV reklamou
Glami - jak řešíme performance, aneb jak neshodit web TV reklamouGlami - jak řešíme performance, aneb jak neshodit web TV reklamou
Glami - jak řešíme performance, aneb jak neshodit web TV reklamou
 
Adam Szabo: Jak jsme v Driveto zlepšovali konverze
Adam Szabo: Jak jsme v Driveto zlepšovali konverzeAdam Szabo: Jak jsme v Driveto zlepšovali konverze
Adam Szabo: Jak jsme v Driveto zlepšovali konverze
 
Péhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, DrivetoPéhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, Driveto
 
Doctrine Data migrations | May 2017
Doctrine Data migrations | May 2017Doctrine Data migrations | May 2017
Doctrine Data migrations | May 2017
 
SEO Restart 2015 - Collabim
SEO Restart 2015 - CollabimSEO Restart 2015 - Collabim
SEO Restart 2015 - Collabim
 
Péhápkaři - Píšeme čitelný kód #3 by Driveto
Péhápkaři - Píšeme čitelný kód #3 by DrivetoPéhápkaři - Píšeme čitelný kód #3 by Driveto
Péhápkaři - Píšeme čitelný kód #3 by Driveto
 
Péhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, DrivetoPéhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, Driveto
 
Péhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, DrivetoPéhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, Driveto
 
Svlékněte konkurenci donaha: Jiří Koutný, Collabim
Svlékněte konkurenci donaha: Jiří Koutný, CollabimSvlékněte konkurenci donaha: Jiří Koutný, Collabim
Svlékněte konkurenci donaha: Jiří Koutný, Collabim
 
Pionýři Digitálu #2 - Klíčová analýza slov
Pionýři Digitálu #2 - Klíčová analýza slovPionýři Digitálu #2 - Klíčová analýza slov
Pionýři Digitálu #2 - Klíčová analýza slov
 

Péhápkaři - Píšeme čitelný a testovatelný kód #5 by Driveto dev team

  • 1. Píšeme čitelný kód #5 Jak otestovat spaghetti kód a přejít na TDD Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 2. Testujete? $result = $car->getFullCarName(); //var_dump($result); Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 3. Každý testuje. Kdo říká, že ne, ten testuje nejvíc. Matěj Rokos | Driveto.cz Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 4. Soutěžní otázka 1: Co lze jednotkově testovat? Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 5. Rozbor odpovědi 1-3 • Využívá zdroje (Databáze, filesystem, webové služby, aj.) • Dále více věcí najednou (získá data, spočítá výsledek) Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 6. Rozbor odpovědi 1-1 +Oddělená business logika - Stále není jednotkově testovatelné Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 7. Rozbor odpovědi 1-2 +Deterministicky testovatelné (na zadaný vstup -> očekávatelný výstup) Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 8. Jak můžeme testovat? • Unit testy: • Nejmenší součást kódu • Bez externích závislostí • Integrační testy: • Funkcionalita více služeb „pohromadě“ • Akceptační testy: • Testujeme „celek“ • Request->response Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 9. Př. 1: REST API – mobilní aplikace App Api DatabázeAvg. calculator Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 10. Př. 2: Symfony PHP backend Web Controller Avg. calculator Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 11. Soutěžní otázka 2: Co je „TDD“? Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 12. Jak na otestování špaget? Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 13. 1. Ručně otestovat web/aplikaci • Funguje vůbec? Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 14. 2. Identifikovat business logiku • Které části kódu jsou klíčové? Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 15. 3. Přesun logiky do služeb • Business logika je klíčová -> nutno testovat Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 16. 4. Otestovat znovu • Nerozbil jsem nic? Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 17. 5. Testování 1. Příprava prostředí 2. Napíšeme test 1. Přidáme různé vstupy, které nás napadnou, bez ohledu na to, jestli mohou či nemohou nastat 2. Velmi pravděpodobně nalezneme spoustu chyb 3. Opravíme kód třídy tak, aby testy procházely - tento postup již připomíná TDD https://phpunit.de/getting-started/phpunit-7.html <2, 3> 2,5 <10, 20> 15 Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 18. Testování v praxi Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 19. Soutěžní otázka 4: Co nebyla business logika? Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 20. Shrnutí 1. Všichni již stejně testujeme (var_dump?) 2. Oddělená business logika – SRP viz samostatná přednáška: https://www.slideshare.net/PetrBechyn/phpkai-peme-iteln-kd-2-by-petr-bechyn-driveto) 3. Unit test 1. nevyužívá externí zdroje (databáze, webservices) 2. Je rychlejší než integrační testy (= rychlejší zpětná vazba) 3. Nevyžaduje komplexní sadu vstupů k otestování všech scénářů 4. Díky výše zmíněnému je snadno a rychle debugovatelný Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 21. Kam dál? 1. Automatické testy -> CI: 1. Školení 1. https://pehapkari.cz/kurz/ci-a-cd-s-gitlab-ci-z-0-na-100/) 2. Nástroje? 1. Github – lze zdarma využít Travis, nebo CircleCI 2. Gitlab – build-in nástroj pipelines 3. Bitbucket – build-in nástroj pipelines Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 22. Reference • Další čtení: • https://martinfowler.com/bliki/UnitTest.html • https://phpunit.de/getting-started-with-phpunit.html • Testovací repo: • https://github.com/driveto/writing-readable-code-5 Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 23. Dotazy • Dotazy, náměty, připomínky…? Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně
  • 24. Díky za pozornost! • We are hiring  www.driveto.cz Petr Bechyně petr.bechyne@driveto.cz CTO Driveto 736 761 183 Michal Hojgr michal.hojgr@driveto.cz Senior developer Driveto github.com/driveto Píšeme čitelný a testovatelný kód #5 11. 10. 2018 Petr Bechyně