IVS FIT VUT - Popiš, testuj, programuj

IVS FIT VUT - Popiš, testuj, programuj

Přednáška o tom, proč je důležité nejdříve přemýšlet, komunikovat a zkoušet, než vůbec začneme testovat. A proč je důležité testovat, než vůbec začneme programovat. Zlehka probereme TDD, BDD, RDD, a to včetně dobře míněných rad, podložených reálnými šrámy z fronty. Nakonec si prakticky na jednoduchém projektu ukážeme, jak lze RDD snadno použít i v domácím nebo školním prostředí.

7b2e4bf7ecca28e530e1c421f0676c0b?s=128

Honza Javorek

May 02, 2017
Tweet

Transcript

  1. Popiš, testuj, programuj Honza Javorek

  2. Běžný způsob vývoje školního projektu

  3. Dostanu zadání

  4. Jdu do parku

  5. Jdu na pivo

  6. Hraju deskovky

  7. "Tak co, jak jsi na tom?" %&

  8. "Taky nic…"

  9. Jdu na pivo…

  10. 2 dny před termínem

  11. Pořádně čtu zadání

  12. 2 dny = 1 dlouhý den ☕ ☕

  13. Otevřu soubor, bouchám kód, zkouším spouštět a koukám, co program

    dělá ,
  14. Když se zdá, že to jede, odevzdávám

  15. Když se zdá, že to nejede, ladím… 23:59 odevzdávám cokoliv

  16. Několik problémů

  17. Otevřu soubor, bouchám kód, zkouším spouštět a koukám, co program

    dělá Když se zdá, že to jede/nejede… Dostanu zadání… čtu zadání
  18. Nejasné zadání = rozdílná očekávání = nedomyšlené hraniční situace =

    ztracené body, ztracené iluze = hranolky s tatarkou nebo kečupem?
  19. Dokumentace Testy Nepotřebujeme?

  20. Běžný způsob vývoje projektu v praxi

  21. Otevřu soubor, bouchám kód, zkouším spouštět a koukám, co program

    dělá Když se zdá, že to jede/nejede… Nikdy nedostanu jasné zadání
  22. Nejasné zadání = rozdílná očekávání = nedomyšlené hraniční situace =

    smutní nebo rozzlobení lidé = rentgeny, chirurgické zákroky
  23. Žádná dokumentace = nikdo to už nikdy nebude umět použít

  24. Žádné testy = nikdo už nikdy nezjistí, jak se to

    má chovat = při úpravách kusu kódu se rozbije zbytek = opravená chyba se objeví znovu
  25. Týmová práce…

  26. Jde to jinak?

  27. TDD Test Driven Development

  28. 6 jako první napíšu test 7 spustím ho, je červený

    8 snažím se do něj trefit implementací 9 spustím ho, je zelený
  29. Automatizuje "zkouším spouštět a koukám, co program dělá" ⚙

  30. Dokumentace chování

  31. ❌ Musím vidět červený test! Vím, že jsem opravdu něco

    změnil, opravil
  32. Musím psát test podle zadání! Ne podle implementace (proto taky

    psaní předem)
  33. ❌ Mám chybu? Napíšu červený test Jasně identifikuju chybu, pak

    opravím, zabráním regresi
  34. ❌ Má někdo jiný chybu? Napíšu červený test Největší pomoc!

  35. Neexistuje dokumentace Unit testy, integrační testy Nikdy nedostanu jasné zadání

  36. BDD Behavior Driven Development

  37. Feature: Beer glass Background: Given you expect the glass to

    contain "0.5" l of beer Scenario: Empty glass When the glass contains "0" l of beer Then the glass owner will shout "ještě jedno!" And the glass will be scheduled to be filled Scenario: Full glass When the glass contains "0.5" l of beer Then the glass owner will NOT shout "ještě jedno!" And the glass will be left intact Gherkin / Cucumber
  38. 6 zadavatel napíše textové scénáře 7 nad scénáři se pobavíme,

    doladíme 8 test píšu pro jednotlivé řádky 9 pustím přes Cucumber
  39. Gherkin, Cucumber

  40. Jasné zadání

  41. Testovatelná dokumentace ⚙

  42. Scénáře může číst/psát kdokoliv C D

  43. Scénáře můžou být testovány v jakémkoliv jazyce ☕

  44. Neexistuje přehledná dokumentace Spíš integrační testy Zadavatel je někdo jiný

    Já sám jsem zadavatel → kanón na vrabce
  45. RDD

  46. RDD Readme Driven Development http://tom.preston-werner.com/2010/08/23/readme-driven- development.html

  47. # Requests The `requests` library allows you to perform HTTP

    requests from your Python code. ## Example ```python >>> r = requests.get('https://google.com') >>> r.status_code 200 ``` ## License MIT README.md
  48. Markdown

  49. Šance nejdřív přemýšlet

  50. Dokumentace je hotová

  51. Tým může věc použít dřív, než existuje

  52. Lze se o věci s kýmkoliv snadno pobavit

  53. Naučím se formulovat myšlenky a komunikovat s ostatními lidmi

  54. README se nesmí úpravami rozejít s tím, jak funguje kód

    Je to jádro toho, co slibujeme uživateli, co od programu očekává
  55. Nešlo by to nějak zajistit?

  56. python -m doctest README.md doctest

  57. Testovatelná dokumentace! ⚙

  58. Mám základní testy i dokumentaci předem a není to ani

    opruz! Díky tomu, že návrh testuji, můžu navrhovat před tím, než programuji
  59. Co můžu použít hned?

  60. Pište testy! Vždy! A jako první! ❌

  61. Chtějte školní projekty zadávány v podobě Gherkin scénářů

  62. Pro své hobby projekty si nejdříve napište README ⚽

  63. Co v Apiary?

  64. Silná kultura automatického testování a psaní dokumentace ⚙

  65. Pull Request bez testů a bez odpovídající dokumentace…

  66. Plánujeme velký přechod na Gherkin/Cucumber

  67. Cucumber + Selenium = chimp.readme.io

  68. Apiary je jedno velké RDD, akorát pro HTTP API README

    = API Blueprint doctest = Dredd
  69. Demo