Testování  22. listopadu 2022

Materiály

Nejste účastníkem kurzu
Pro zápis do kurzu se nejprve přihlašte a následně použijte tlačítko v přehledu kurzu.

Domácí projekty

Následující úkoly na sebe navazují. Nejlepší je proto je dělat jeden po druhém.

0.

Během tohoto bloku úkolů budeme vylepšovat konzolovou kalkulačku, kterou jsme implementovali již v úkolu číslo 6 v domácích projektech na cykly. Program měl za úkol načíst od uživatele od uživatele dvě čísla a jednoznakový řetězec – buď '+', '-', '*' nebo '/'. Pak provést příslušnou operaci. Pojďme si ji připravit pro lepší rozdělení do modulů a psaní testů.

Napiš tedy znovu program, který postupně načte od uživatele dvě čísla a jednoznakový řetězec – buď '+', '-', '*' nebo '/'. Program provede na číslech příslušnou operaci. Program bude napsán v jendom modulu kalkulacka.py ve kterém budeme mít funkce pro výpočetní operace sčítání, odčítání, násobení a dělení. Můžeš vyjít z rámcového kódu, který jsme ukazovali na cvičení. Nezapomeň také do modulu doplnit konstrukci if __name__ == '__main__':.

1.

Vytvoř modul operace.py do kterého přesuň funkce na výpočty. Z tohoto modulu je pak naimportuj v modulu kalkulacka.py aby se v něm daly používat.

2.

Vytvoř testovací modul test_kalkulacka.py. Napiš do něj testy pro otestování, zda počítají opravdu správně. Nezapomeň otestovat i nestandardní vstupy a ověřit, zda dělení nulou opravdy vyhodí chybu.

3.

V modulu kalkulacka vytvoř funkci proved_vypocet, která bere tři argumenty. První číslo, druhé číslo a znak, který nám definuje operaci. Funkce s čísly provede příslušnou operaci a vrátí výsledek. Pro matematické operace se samozřejmě použijí funkce z modulu operace.

4.

Do testovacího modulu doplň test, který otestuje správné chování funkce proved_vypocet z modulu kalkulacka.

5.

Pomocí try, except ošetři program pro následující případ.

Uživatel je vyzván, aby zadal číslo, ale zadá něco, co nelze na číslo převést.

Program zachytí příslušnou výjimku, vypíše informaci o špatně zadaném vstupu a ukončí se, aniž by prováděl nějaké výpočty.

6.

Pomocí try, except ošetři program pro následující případ.

Uživatel chce dělit nulou.

Program zachytí příslušnou výjimku, vypíše informaci o špatně zadaném vstupu a ukončí se, aniž by prováděl nějaké výpočty.

7.

Pomocí try, except ošetři program pro následující případ.

Uživatel zadá neplatný operand.

Program zachytí příslušnou výjimku, vypíše informaci o špatně zadaném vstupu a ukončí se, aniž by prováděl nějaké výpočty.

Následující úkoly slouží pouze pro lepší seznámení se s modulem logging. Pro připomenutí, rychlé nastavení logovacího modulu vypadá takto:

logging.basicConfig(filename='muj_log.log',level=logging.DEBUG)

Modul logging musí být samozřejmě naimportován.

8.

Dokážeš popsat, co nám v nastavení logování dělá parametr level?

9.

V modulu kalkulacka.py nastav logování. Ty části kódu, ve kterých zachycuješ výjimky (to jsou ty hned za except:) doplň o logovací zprávu s důležitostí error.

10.

Doplň další vhodná místa v kódu o informační a debugovací zprávy. Rozhodnutí, co to jsou vhodná místa, je zcela na tobě. Pokud cheš o logy doplnit i další moduly, konfigurovat logging modul v nich už nemusíš.

Následující projekty jsou součástí projektu 1D Piškvorky. Pokud na ně máš ještě chuť, doporučuji je dělat jeden po druhém.

11.

Rozděl 1D Piškvorky na čtyři moduly:

  • ai.py, kde bude funkce tah_pocitace,
  • piskvorky.py, kde budou ostatní funkce,
  • hra.py, kde bude import a volání hlavní funkce z piskvorky.py (a nic jiného),
  • test_piskvorky.py, kde budou testy.

Jak se do importů nezamotat? Podívej se do materiálů na sekci cyklické importy.

12.

Napiš aspoň dva testy na každou funkci z Piškvorek, ke které testy napsat umíš. Testy pravděpodobně neumíš napsat na funkci input a všechny funkce, které ji (byť nepřímo) volají. A taky asi neumíš otestovat účinek funkce print.

13.

Zkus program přepsat tak, aby část, která není pokrytá automatickými testy, byla co nejmenší. Místo volání print můžeš často vrátit řetězec a print zavolat až na návratovou hodnotu. Podobně input můžeš zavolat před zavoláním funkce, která pak může příkaz od uživatele brát jako argument.

14.

Doplň funkci tah_pocitace tak, aby brala jako argument symbol, za který má počítač hrát – buď 'x', nebo 'o'. Dopiš testy.

15.

Ověř, že se funkce tah_pocitace se umí vyrovnat s jinou délkou hracího pole než 20. „Ověření” znamená napsání příslušného testu.

16.

Ověř si, že se tah_pocitace chová rozumně když dostane plné hrací pole, nebo pole s délkou 0. Rozumné chování v tomto případě znamená vyvolání rozumné výjimky.

Podle toho, jak jste se na sraze domluvili, pošli soubor ai.py (s funkcí tah_pocitace) e-mailem (např. organizátorům, koučovi, nebo vůbec). Posílej ho jako přílohu, nekopíruj ho do textu e-mailu. Jestli procházíš kurz sama a můžeš programování konzultovat s někým zkušenějším, je tento úkol na takovou konzultaci ideální téma.

Dozvíš se, jak si tvá strategie stojí proti ostatním – a proti testům, které napíše organizátor. :) Strategii je možné i vylepšovat a poslat několik různých verzí. Neboj se poslat i první nástřel! Stejně tak se neboj funkci poslat, i kdyby ještě nebyla úplně dodělaná.

Na některém dalším srazu bude turnaj o ceny!

Máš-li Piškvorky hotové, můžeš si naprogramovat ještě jednu hru! Jestli na to tedy máš čas a chuť.

17.

Vytvoř hru sibenice podle následujícího popisu. Snaž se projekt rozdělit do funkcí a modulů s hezkými jmény, piš testy a dokumentační řetězce, funkční kousky dávej postupně do Gitu.

  • Počítač náhodně zvolí slovo (zatím třeba ze tří možností). Pro jednoduchost používej malá písmena a nepoužívej slova, ve kterých se stejné písmeno opakuje dvakrát (třeba čokoláda).
  • Nastav výchozí stav: řetězec s tolika podtržítky, kolik je ve vybraném slově písmen.
  • Nastav počet neúspěšných pokusů na nulu.
  • Každý tah:
    • Zeptej se hráče na písmeno.
    • Pokud je to písmeno ve vybraném slově, zaměň příslušná podtržítka za ono písmeno. Bude se hodit řetězcová metoda index_ a funkce zamen z piškvorek.
    • Pokud dané písmeno není ve vybraném slově, započítej neúspěšný pokus.
    • Vypiš stav (slovo s případnými podtržítky).
    • Pokud už ve slově nejsou podtržítka, pogratuluj hráči a ukonči hru.
    • Podle počtu neúspěšných pokusů vypiš „obrázek”. Obrázky jsou ke stažení na http://pyladies.cz/v1/s005-modules/obrazky.txt a můžeš je dát do víceřádkových řetězců (s trojitými uvozovkami).
    • Pokud jsi právě vypsala poslední obrázek, hráč prohrál. Dej mu to najevo a ukonči program.
+---.
|   |
|   O
| --|--
|  /
|
~~~~~~~

p_t__n
18.

Funguje-li ti předchozí hra, můžeš ji vylepšit.

  • Zařiď, aby fungovala slova s více stejnými písmeny.
  • Když hráč nezadá písmeno (zadá např. ABC nebo !), nepovažuj to za tah.
  • Po skončení dej hráči možnost hru opakovat.