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 Slide

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

    View Slide

  3. Dostanu zadání

    View Slide

  4. Jdu do parku

    View Slide

  5. Jdu na pivo

    View Slide

  6. Hraju deskovky

    View Slide

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

    View Slide

  8. "Taky nic…"

    View Slide

  9. Jdu na pivo…

    View Slide

  10. 2 dny před termínem

    View Slide

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

    View Slide

  12. 2 dny = 1 dlouhý den
    ☕ ☕

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. Několik problémů

    View Slide


  17. View Slide


  18. View Slide

  19. 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 Slide

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

  21. Dokumentace
    Testy
    Nepotřebujeme?

    View Slide

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

    View Slide

  23. 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 Slide

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

    View Slide

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

    View Slide

  26. Žá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 Slide

  27. Týmová práce…

    View Slide

  28. Jde to jinak?

    View Slide

  29. TDD
    Test Driven Development

    View Slide

  30. 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 Slide

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

    View Slide

  32. Dokumentace chování

    View Slide


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

    View Slide


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

    View Slide


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

    View Slide


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

    View Slide

  37. Neexistuje dokumentace

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

    View Slide

  38. BDD
    Behavior Driven Development

    View Slide

  39. 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 Slide

  40. 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 Slide

  41. Gherkin, Cucumber

    View Slide

  42. Jasné zadání

    View Slide

  43. Testovatelná dokumentace

    View Slide

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

    View Slide

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

    View Slide

  46. Neexistuje přehledná dokumentace

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

    View Slide

  47. RDD

    View Slide

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

    View Slide

  49. # 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 Slide

  50. Markdown

    View Slide

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

    View Slide

  52. Dokumentace je hotová

    View Slide

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

    View Slide

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

    View Slide


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

    View Slide

  56. 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 Slide

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

    View Slide

  58. python -m doctest README.md
    doctest

    View Slide

  59. Testovatelná dokumentace!

    View Slide

  60. 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  65. Co v Apiary?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  69. Cucumber + Selenium = chimp.readme.io

    View Slide

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

    README = API Blueprint
    doctest = Dredd

    View Slide

  71. Demo

    View Slide