IB111 Úvod do programování skrze Python Přednáška 12

Podobné dokumenty
Návrh aplikace. Založeno na 9. kapitole knihy J. M. Zelle: Python Programming: An Introduction to Computer Science IB111

POČÍTAČE A PROGRAMOVÁNÍ

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: AVTK. Úvod. strana 1

Řízení reálných projektů, agilní metodiky

Programování a algoritmizace: úvod

Testování SW produktů. Jiří Sochor, Jaroslav Ráček 1

Vývoj řízený testy Test Driven Development

Obecné informace o cvičeních

Jak testovat software v praxi. aneb šetříme svůj vlastní čas

IB111 Úvod do programování skrze Python Přednáška 13

SEMINÁRNÍ PRÁCE Z MATEMATIKY

CASE nástroje. Jaroslav Žáček

12 Zajištění kvality programového vybavení

VISUAL BASIC. Přehled témat

Úvod Game designer Struktura hry Formální a dramatické elementy Dynamika her Konec. Úvod do game designu 1 / 37

12 Zajištění kvality programového vybavení

Verzovací systémy. Pořádek především!

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Java/QE Akademie - Osnova

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

Programování II. Modularita 2017/18

PB161 Programování v jazyce C++ Přednáška 7

Metody analýzy modelů. Radek Pelánek

Úvod do programovacího jazyka Python

PB161 Programování v jazyce C++ Přednáška 7

Hledání správné cesty

Úvod do programovacího jazyka Python

Agenda. Docházka Návrat k minulému praktickému cvičení Zápočtové práce. Dokumentace. Dotazy, přání, stížnosti. Co, jak a proč dokumentovat

VÝVOJ ŘÍDICÍCH ALGORITMŮ HYDRAULICKÝCH POHONŮ S VYUŽITÍM SIGNÁLOVÉHO PROCESORU DSPACE

Možnosti využití dat RÚIAN poskytovaných VDP pomocí webových služeb

Jak mluvit s roboty. Dokážeš naprogramovat robota tak, aby postavil kelímky ve správnou stavbu?

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

Správa verzí souborů na cvičení

2. úkol MI-PAA. Jan Jůna (junajan)

Bakalářky. Cyril Brom

Micro:bit lekce 3. - Konstrukci If Then a If Then Else najdete v kategorii Logic - Podmínky od If (např. porovnání < >= atd.) najdete taktéž v Logic

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Metodiky pro automatické testování webové aplikace. Ondřej Melkes, Martin Komenda

Nástroje pro vývoj software

Testování, ladění a dokumentace programů

Joelův test. 12 kroků k lepšímu programování. Jaroslav Šnajdr

Maturitní projekt do IVT Pavel Doleček

Zadání maturitní práce ve školním roce 2016/2017

Otevřený katastr (OK)

programátor vs. vývojář

Kajot Casino Ltd. Popis hry Joker 27

Prezentace CRMplus. Téma: CRMplus jako nástroj pro kontrolu a vyhodnocení rozpracovanosti dílů na zakázkách

Matematika v programovacích

SCM = Source Code Management software, základní typologie rozdělení je podle počtu a umístění základního úložiště kódu(=repository) na:

IB111 Úvod do programování skrze Python

Kajot Casino Ltd. Popis hry Joker Star 81

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Projekt Digitální knihovna pro šedou literaturu po prvním roce řešení

Profesionální služby kolem Linuxu

PHP framework Nette. Kapitola Úvod. 1.2 Architektura Nette

CASE. Jaroslav Žáček

Standardní algoritmy vyhledávací.

Úvodem... 9 Kapitola 1 Karetních

C# &.NET. Cvičení Mgr. Filip Krijt.

Obsah. O autorech 9 Earle Castledine 9 Myles Eftos 9 Max Wheeler 9 Odborný korektor 10. Předmluva 11 Komu je kniha určena 12 Co se v knize dočtete 12

Hodnocení soutěžních úloh

Kajot Casino Ltd. Popis hry Fruit Machine 27

Ročníkový projekt. Jaroslav Žáček

7. Pracovní postupy. Fakulta informačních technologií MI-NFA, zimní semestr 2011/2012 Jan Schmidt

Lekce 01 Úvod do algoritmizace

Formy komunikace s knihovnami

Osnova předmětu IB053. Historie předmětu IB053

Semestrální práce KIV/PC

Formální Metody a Specifikace (LS 2011) Formální metody pro kyber-fyzikální systémy

Ročníkový projekt. Jaroslav Žáček

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

1 Úvod 1.1 Vlastnosti programového vybavení (SW)

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Testování ovládání hry FIFA 15

Základy programovaní 3 - Java. Unit testy. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 26.,27.

Automatické testování softwaru. Testujte svůj kód! Předpoklady: Příklad: sum_digits() Možnost 1: Zkusíme funkci použít v konzoli Pythonu.

Nové jazykové brány do Caché. Daniel Kutáč

Algoritmus. Algoritmus je posloupnost kroků, které jsou potřeba k vyřešení problému.

První kapitola úvod do problematiky

Bc. Martin Majer, AiP Beroun s.r.o.

MPASM a IDE pro vývoj aplikací MCU (Microchip)

Hodnoticí standard. Programátor (kód: M) Odborná způsobilost. Platnost standardu. Skupina oborů: Informatické obory (kód: 18)

IB111 Úvod do programování skrze Python Přednáška 13

1 Nástroje pro správu verzí. 1.1 Pojmy:

Unity a Objekty (NMIN102) RNDr. Michal Žemlička, Ph.D.

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Proces vývoje HRIS Vema (Human Resources Information System) Jaroslav Šmarda

Návrh softwarových systémů - úvod, motivace

Využití chemie v procesu testování webových aplikací vytvořených pomocí technologií PHP a Java

Kajot Casino Ltd. Popis hry Big Apple

Střední odborná škola a Střední odborné učiliště, Hořovice

GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím

Počítačová Podpora Studia. Přednáška 5 Úvod do html a některých souvisejících IT. Web jako platforma pro vývoj aplikací.

Algoritmy a datové struktury

Návrh softwarových systémů - architektura softwarových systémů

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

43 HTML šablony. Záložka Šablony v systému

Mobile application developent

Martin Milata, Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od

Transkript:

IB111 Úvod do programování skrze Python Přednáška 12 Vývoj software Nikola Beneš 7. prosinec 2016 IB111 přednáška 12: vývoj software 7. prosinec 2016 1 / 34

Osnova dnešní přednášky povrchní náhled na návrh software příklad návrhu jednoduchého programu dokumentace styl psaní programů testování ladění programů bonus: správa verzí IB111 přednáška 12: vývoj software 7. prosinec 2016 2 / 34

Příklad návrhu programu Podle 9. kapitoly knihy John M. Zelle: Python Programming: An Introduction to Computer Science IB111 přednáška 12: vývoj software 7. prosinec 2016 3 / 34

Motivace Proč ve valné většině prohraju, i když jsem jen o trochu horší? Racquetball americký sport, podobný squashi body se získávají jen při podání prohraje-li podávající hráč, ztrácí podání (podobné jako stará pravidla volejbalu) vyhraje, kdo získá 15 bodů Simulace hry chceme simulovat racquetballový zápas hráči se zadanou úspěšností IB111 přednáška 12: vývoj software 7. prosinec 2016 4 / 34

Detailní specifikace Vstup: program se zeptá na potřebné údaje pravděpodobnost výhry hráče A při podání pravděpodobnost výhry hráče B při podání počet her Výstup: výsledné statistiky počet her počet výher pro hráče A (v procentech) počet výher pro hráče B (v procentech) Poznámka: Nebudeme kontrolovat správnost zadaných údajů. IB111 přednáška 12: vývoj software 7. prosinec 2016 5 / 34

Návrh shora dolů Top-down design systematický přístup k návrhu začínáme na vysoké úrovni abstrakce řešení problému vyjádříme pomocí menších problémů pokračujeme, dokud jsme problém nerozbili na problémy úplně triviální pak to všechno naprogramujeme IB111 přednáška 12: vývoj software 7. prosinec 2016 6 / 34

Návrh shora dolů simulace racquetballu Základní algoritmus vypiš úvodní informace získej vstupní údaje: proba, probb, n simuluj n her racquetballu s použitím proba a probb vypiš kolik her se hrálo, kolikrát vyhráli jednotliví hráči Jaká data si budou jednotlivé kroky mezi sebou předávat? Princip oddělení zodpovědnosti (Separation of Concerns) čtyři nezávislé úkoly jasně specifikované rozhraní (vstupy/výstupy) funkce main se nemusí starat o to, jak funguje funkce simngames, zajímá ji jen, co spočítá abstrakce umožňuje ignorovat ostatní detaily IB111 přednáška 12: vývoj software 7. prosinec 2016 7 / 34

Návrh shora dolů první úroveň main printintro proba probb n getinputs proba probb n winsa winsb simngames winsa winsb printsummary IB111 přednáška 12: vývoj software 7. prosinec 2016 8 / 34

Návrh shora dolů simulace racquetballu Druhá úroveň návrhu opakujeme stejný postup pro zbývající části funkce: printintro getinputs simngames printsummary tři z těchto funkcí můžeme napsat přímo IB111 přednáška 12: vývoj software 7. prosinec 2016 9 / 34

Návrh shora dolů druhá úroveň Funkce simngames nastav winsa a winsb na nulu opakuj nkrát: simuluj jednu hru pokud vyhrál A zvyš winsa o jedničku jinak zvyš winsb o jedničku nakonec vrať winsa a winsb IB111 přednáška 12: vývoj software 7. prosinec 2016 10 / 34

Návrh shora dolů druhá úroveň main printintro proba probb n getinputs proba probb n winsa winsb simngames winsa winsb printsummary proba probb scorea scoreb simonegame IB111 přednáška 12: vývoj software 7. prosinec 2016 11 / 34

Návrh shora dolů simulace racquetballu Třetí úroveň návrhu pokračujeme dál funkce simonegame Náčrt algoritmu nastav skóre obou hráčů na nulu nastav podávajícího hráče na A dokud hra neskončila: simuluj jedno podání aktuálně podávajícího hráče aktualizuj skóre vrať skóre obou hráčů IB111 přednáška 12: vývoj software 7. prosinec 2016 12 / 34

Návrh shora dolů třetí úroveň main printintro proba probb n getinputs proba probb n winsa winsb simngames winsa winsb printsummary proba probb scorea scoreb simonegame scorea scoreb true/false gameover IB111 přednáška 12: vývoj software 7. prosinec 2016 13 / 34

Návrh shora dolů simulace racquetballu Poslední kroky Shrnutí funkce gameover a náš program je hotov! 1. vyjádřili jsme algoritmus jako sadu menších problémů 2. ujasnili jsme si rozhraní každého menšího problému (vstup/výstup) 3. popsali jsme algoritmus s využitím rozhraní menších problémů 4. tento proces jsme opakovali pro každý menší problém IB111 přednáška 12: vývoj software 7. prosinec 2016 14 / 34

Testování simulace racquetballu Programy obsahují chyby chyby jsou běžné všichni chybují Testování programu po částech (unit testing) půjdeme zdola nahoru nejprve otestujeme funkci gameover máme-li důvěru v to, že gameover funguje správně, půjdeme dále jak testovat systematicky? IB111 přednáška 12: vývoj software 7. prosinec 2016 15 / 34

Návrh a vývoj software Přístupy k návrhu viděli jsme: návrh shora dolů (top-down design) jiné přístupy: prototypování a spirálový vývoj Prototypování prototyp: jednoduchá verze programu, ne zcela funkční návrh, implementace, testování prototypu vhodné pro ověření, zda to, co děláme, má vůbec smysl prototyp dále vylepšujeme (inkrementální vývoj) časem získáme kompletní program IB111 přednáška 12: vývoj software 7. prosinec 2016 16 / 34

Prototypování simulace racquetballu Fáze prototypování 1. První prototyp: Hra 30 podání, podávající má vždy 50% šanci výhry. Pomocný výpis po každém podání. 2. Dva parametry pro pravděpodobnost výher. 3. Test na konec hry (15 bodů). Máme funkční simulaci jedné hry. 4. Opakování několika her. Výstup: počet vyhraných her. 5. Kompletní program. Interaktivní vstup, pěkně formátovaný výstup. IB111 přednáška 12: vývoj software 7. prosinec 2016 17 / 34

Návrh a vývoj software Umění návrhu existuje řada různých návrhových technik shora dolů prototypování objektově-orientovaný návrh mohou se vzájemně doplňovat není žádný nejlepší způsob návrhu návrh software je kreativní proces IB111 přednáška 12: vývoj software 7. prosinec 2016 18 / 34

Testování, ladění, dokumentace, styl IB111 přednáška 12: vývoj software 7. prosinec 2016 19 / 34

O čem přemýšlet při vytváření programů Základní otázky je můj program dobře napsaný? budu mu rozumět, až jej uvidím po půl roce? bude mu rozumět někdo jiný? funguje můj program správně? dává očekávané odpovědi? má očekávané chování? co je vlastně očekávané? funguje můj program efektivně? je dostatečně rychlý? nevyužívá příliš mnoho paměti? a co jiné zdroje (síťová komunikace, )? IB111 přednáška 12: vývoj software 7. prosinec 2016 20 / 34

Dokumentace a styl psaní programů Dokumentace píšeme pro sebe i pro ostatní komentáře v kódu dokumentace rozhraní názvy (modulů, funkcí, proměnných) Dokumentace v Pythonu [ukázka] dokumentační řetězec (docstring) první řetězec funkce (třídy, metody, modulu) Nejlepší kód je takový, který se dokumentuje sám. IB111 přednáška 12: vývoj software 7. prosinec 2016 21 / 34

Dokumentace a styl psaní programů Styl psaní programů (coding style) programovat se dá pěkně i škaredě různá doporučení závisí na jazyce, na konkrétní společnosti apod. nejlépe je být konzistentní Rozumná doporučení pro Python https://www.python.org/dev/peps/pep-0008/ odsazení rozumná délka řádku bílé místo (mezery mezi operátory) pojmenování proměnných (funkcí, tříd, metod, modulů, ) a další IB111 přednáška 12: vývoj software 7. prosinec 2016 22 / 34

Testování a ladění programů (rozsáhlé téma, zde jen velmi lehce nakousneme) Testování velmi důležitá součást vývoje software různé úrovně testování od jednoduchých testů nejmenších kusů kódu (unit testing) až po testování celého rozsáhlého systému automatické testování kód, který má za cíl otestovat jiný kód různé nástroje mnoho vstupů (snaha pokrýt co nejvíc možností) Porovnání efektivity různých programů měření času (spotřebované paměti, jiných zdrojů) mnoho vstupů jiný způsob? IB111 přednáška 12: vývoj software 7. prosinec 2016 23 / 34

Testování a ladění programů Neúplnost testování programy mohou mít mnoho různých vstupů (často nekonečno) čím víc vstupů otestuji, tím víc programu věřím ale: nikdy nemám úplnou jistotu Verifikace aktuální výzkumné téma: jak ověřovat správnost programů? existují nástroje pro verifikaci úplné automatické ověřování programů není možné Jiné možnosti použití lidského mozku: důkaz správnosti programu o správnosti a efektivitě by měl programátor přemýšlet už při návrhu IB111 přednáška 12: vývoj software 7. prosinec 2016 24 / 34

Testování a ladění programů Ladění programů už jste viděli debugger v prostředí IDLE podobných nástrojů existuje celá řada (pro různé jazyky) typická funkcionalita: výpis aktuálních obsahů proměnných výpis funkcí na zásobníku krokování funkcí breakpoints (určená místa přerušení v programu) jiné možnosti: pomocné výpisy logování IB111 přednáška 12: vývoj software 7. prosinec 2016 25 / 34

Správa verzí IB111 přednáška 12: vývoj software 7. prosinec 2016 26 / 34

Motivace Ztráta dat je většinou nepříjemná. Vracení se ke starým verzím se občas hodí. Spolupráce: co když jeden program vyvíjí více lidí? Správa verzí (version control) hodí se nejen při programování webové stránky dokumenty apod. uchovává jednotlivé verze souborů umožňuje spolupráci vývojářů co když dva pracují na stejném souboru? větvení experimentální verze vs. stabilní verze IB111 přednáška 12: vývoj software 7. prosinec 2016 27 / 34

Správa verzí Centralizovaná repozitář na jednom místě (server) typický zástupce: Subversion (SVN) Distribuovaná každý má svůj repozitář dá se používat i centralizovaně kopie centrálního repozitáře velmi populární: Git, Darcs, Mercurial, Bazaar, podpora v podobě webových služeb: GitHub, BitBucket, IB111 přednáška 12: vývoj software 7. prosinec 2016 28 / 34

Správa verzí Centralizovaná správa verzí zdroj: http://programmers.stackexchange.com/a/35080 IB111 přednáška 12: vývoj software 7. prosinec 2016 29 / 34

Správa verzí Distribuovaná správa verzí (typické použití) zdroj: http://programmers.stackexchange.com/a/35080 IB111 přednáška 12: vývoj software 7. prosinec 2016 30 / 34

Správa verzí Distribuovaná správa verzí (plné použití) zdroj: http://programmers.stackexchange.com/a/35080 IB111 přednáška 12: vývoj software 7. prosinec 2016 31 / 34

Správa verzí Distribuovaná správa verzí (použití v open-source projektech) zdroj: http://programmers.stackexchange.com/a/35080 IB111 přednáška 12: vývoj software 7. prosinec 2016 32 / 34

Správa verzí Užitečné odkazy (SVN) fakultní administrativa: https://fadmin.fi.muni.cz/auth/ (založení Subversion účtu) SVN: http://subversion.apache.org/ TortoiseSVN: https://tortoisesvn.net/ (SVN klient pro Windows) Užitečné odkazy (Git) fakultní GitLab: https://gitlab.fi.muni.cz/ oficiální stránka: https://git-scm.com/ GitHub: https://github.com/ vyzkoušejte si GitHub: https://try.github.io IB111 přednáška 12: vývoj software 7. prosinec 2016 33 / 34

Shrnutí Návrh a vývoj software kreativní proces existují nějaké doporučené techniky návrhu Dokumentace, styl psaní programů dodržujte rozumné konvence (buďte konzistentní) používejte komentáře, dokumentujte funkce apod. (v rozumné míře) Testování velmi užitečné, ale nikdy nezaručí úplnou správnost Ladění programů (debugging) Správa verzí spolupráce vracení se ke starým verzím centralizovaná (SVN) vs. distribuovaná (Git, ) IB111 přednáška 12: vývoj software 7. prosinec 2016 34 / 34