Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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í.

Honza Javorek

May 02, 2017
Tweet

More Decks by Honza Javorek

Other Decks in Technology

Transcript

  1. Popiš, testuj, programuj
    Honza Javorek

    View full-size slide

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

    View full-size slide

  3. Dostanu zadání

    View full-size slide

  4. Jdu do parku

    View full-size slide

  5. Hraju deskovky

    View full-size slide

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

    View full-size slide

  7. "Taky nic…"

    View full-size slide

  8. Jdu na pivo…

    View full-size slide

  9. 2 dny před termínem

    View full-size slide

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

    View full-size slide

  11. 2 dny = 1 dlouhý den
    ☕ ☕

    View full-size slide

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

    View full-size slide

  13. Když se zdá, že to jede,
    odevzdávám

    View full-size slide

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

    View full-size slide

  15. Několik problémů

    View full-size slide

  16. 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í

    View full-size slide

  17. Nejasné zadání
    = rozdílná očekávání
    = nedomyšlené hraniční situace
    = ztracené body, ztracené iluze
    = hranolky s tatarkou nebo kečupem?

    View full-size slide

  18. Dokumentace
    Testy
    Nepotřebujeme?

    View full-size slide

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

    View full-size slide

  20. 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í

    View full-size slide

  21. Nejasné zadání
    = rozdílná očekávání
    = nedomyšlené hraniční situace
    = smutní nebo rozzlobení lidé
    = rentgeny, chirurgické zákroky

    View full-size slide

  22. Žádná dokumentace
    = nikdo to už nikdy nebude umět použít

    View full-size slide

  23. Žá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

    View full-size slide

  24. Týmová práce…

    View full-size slide

  25. Jde to jinak?

    View full-size slide

  26. TDD
    Test Driven Development

    View full-size slide

  27. 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ý

    View full-size slide

  28. Automatizuje
    "zkouším spouštět a koukám, co program dělá"

    View full-size slide

  29. Dokumentace chování

    View full-size slide


  30. Musím vidět červený test!
    Vím, že jsem opravdu něco změnil, opravil

    View full-size slide


  31. Musím psát test podle zadání!
    Ne podle implementace (proto taky psaní předem)

    View full-size slide


  32. Mám chybu? Napíšu červený test
    Jasně identifikuju chybu, pak opravím, zabráním regresi

    View full-size slide


  33. Má někdo jiný chybu? Napíšu červený test
    Největší pomoc!

    View full-size slide

  34. Neexistuje dokumentace

    Unit testy, integrační testy
    Nikdy nedostanu jasné zadání

    View full-size slide

  35. BDD
    Behavior Driven Development

    View full-size slide

  36. 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

    View full-size slide

  37. 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

    View full-size slide

  38. Gherkin, Cucumber

    View full-size slide

  39. Jasné zadání

    View full-size slide

  40. Testovatelná dokumentace

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  43. Neexistuje přehledná dokumentace

    Spíš integrační testy
    Zadavatel je někdo jiný
    Já sám jsem zadavatel → kanón na vrabce

    View full-size slide

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

    View full-size slide

  45. # 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

    View full-size slide

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

    View full-size slide

  47. Dokumentace je hotová

    View full-size slide

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

    View full-size slide

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

    View full-size slide


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

    View full-size slide

  51. 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á

    View full-size slide

  52. Nešlo by to nějak zajistit?

    View full-size slide

  53. python -m doctest README.md
    doctest

    View full-size slide

  54. Testovatelná dokumentace!

    View full-size slide

  55. 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

    View full-size slide

  56. Co můžu použít hned?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  60. Co v Apiary?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  64. Cucumber + Selenium = chimp.readme.io

    View full-size slide

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

    README = API Blueprint
    doctest = Dredd

    View full-size slide