Slide 1

Slide 1 text

Popiš, testuj, programuj Honza Javorek

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Dostanu zadání

Slide 4

Slide 4 text

Jdu do parku

Slide 5

Slide 5 text

Jdu na pivo

Slide 6

Slide 6 text

Hraju deskovky

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

"Taky nic…"

Slide 9

Slide 9 text

Jdu na pivo…

Slide 10

Slide 10 text

2 dny před termínem

Slide 11

Slide 11 text

Pořádně čtu zadání

Slide 12

Slide 12 text

2 dny = 1 dlouhý den ☕ ☕

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

Několik problémů

Slide 17

Slide 17 text

Slide 18

Slide 18 text

Slide 19

Slide 19 text

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í

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

Dokumentace Testy Nepotřebujeme?

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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í

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

Týmová práce…

Slide 28

Slide 28 text

Jde to jinak?

Slide 29

Slide 29 text

TDD Test Driven Development

Slide 30

Slide 30 text

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ý

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

Dokumentace chování

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

BDD Behavior Driven Development

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

Gherkin, Cucumber

Slide 42

Slide 42 text

Jasné zadání

Slide 43

Slide 43 text

Testovatelná dokumentace ⚙

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

RDD

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

# 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

Slide 50

Slide 50 text

Markdown

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

Dokumentace je hotová

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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á

Slide 57

Slide 57 text

Nešlo by to nějak zajistit?

Slide 58

Slide 58 text

python -m doctest README.md doctest

Slide 59

Slide 59 text

Testovatelná dokumentace! ⚙

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

Co můžu použít hned?

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

Co v Apiary?

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

Cucumber + Selenium = chimp.readme.io

Slide 70

Slide 70 text

Apiary je jedno velké RDD, akorát pro HTTP API README = API Blueprint doctest = Dredd

Slide 71

Slide 71 text

Demo