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