Programování. Debugging a testování. Martin Urza



Podobné dokumenty
Programování. Psaní čistého kódu. Martin Urza

Náhradní text k cvičení 4.11.

Algoritmizace a programování

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

5 ÚVOD DO TESTOVÁNÍ SOFTWARE. 6 Testování software ve vývojovém prostředí MICROSOFT VISUAL STUDIO V hlavním menu volba Debug

Přehled verzí aplikace WinTechnol

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Sada 1 - Základy programování

Úvod do programování

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

ISPOP 2016 MANUÁL K VYPLNĚNÍ FORMULÁŘŮ PRO OHLAŠOVÁNÍ ÚDAJŮ PRO VODNÍ BILANCI

Okno Editoru nabízí v panelu nástrojů

HypEd4 Uživatelská příručka 2004 HYPEL

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Anotace. Soubory a práce s nimi, rekurze podruhé, struktury (datový typ record), Martin Pergel,

10. Editor databází dotazy a relace

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Programování. Programování s řetězci. Martin Urza

Programovací jazyk Pascal

dovolují dělení velkých úloh na menší = dekompozice

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

Programy v prostředí operačního systému

Vysoké učení technické v Brně Fakulta elektrotechniky a komunikačních technologií

DUM 01 téma: Obecné vlastnosti tabulkového editoru, rozsah, zápis do buňky, klávesové zkratky

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Algoritmizace a programování

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

MANUÁL uživatelská příručka Speciální IT systémové řešení

ArduinotechGSMShield knihovna

MenuLIB KNIHOVNA SIMPLE4 PRO TVORBU UŽIVATELSKÉHO ROZHRANÍ NA PLC MICROPEL

Téma 9: Administrace systému CentOS. Představení a používání aplikací pro administraci CentOS

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

TESTER SC-8108-A CZ manuál

Programování. Jak fungují imperativní jazyky. Martin Urza

VISUAL BASIC. Práce se soubory

Instalační příručka. pro systém videovrátných XtendLan Víceúčastnický CAT5 systém

VY_32_INOVACE_08_2_04_PR

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: :01:48

Manuál k užívání aplikace Monitoringrejstriku.cz

Návod na práci s přípravkem a programy uscope a FLIP na cvičeních

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Příklad Nákup-Prodej a vyrovnání položek zboží

Informatika pro moderní fyziky (7) Tvorba textových dokumentů

Anotace. Dynamické programování, diskrétní simulace.

PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/ PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/ stran 1

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

Software je ve světě IT vše, co není Hardware. Do softwaru patří aplikace, program, proces, algoritmus, ale i data (text, obrázky), operační systém

Metodika. Architecture First. Rudolf Pecinovský

Přijímací zkouška z informatiky Dz

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

UŽIVATELSKÁ PŘÍRUČKA KLÁVESNICE

Aktivní saldo. Copyright 2009 CÍGLER SOFTWARE, a.s.

1. krok Přihlaste se. Klikněte na políčko Přihlášení

Rozdílová dokumentace k ovládání IS KARAT.net

Interpret jazyka IFJ2011

NPRG030 Programování I, 2017/18 1 / :22:16

Anotace. Ordinalni typy - typ char, funkce ord, chr, succ, prev, inc, dec,

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Textové popisky. Typ dat

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

NPRG030 Programování I, 2018/19 1 / :25:37

Sada 1 - Základy programování

Závěrečná zkouška z informatiky 2011

Spinelterminal. Terminálový program pro ladění aplikací s protokolem Spinel. 20. září 2005 w w w. p a p o u c h. c o m v

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ , 5.1 a 5.2 8/14

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

Úvod do objektově orientovaného programování s použitím jazyka C# pro střední školy

Anotace. Pointery. Martin Pergel,

Laboratorní zdroj - 6. část

zswi/pc-testování.d 10. května

C# bez předchozích znalostí

Obsah. Začínáme pracovat v InventorCAMu - frézování SolidCAM All Rights Reserved.

NPRG030 Programování I, 2010/11

A7B36SI2 Tematický okruh SI08 Revidoval: Martin Kvetko

Anotace. Objekt self, Zapouzdření, polymorfismus,

Západočeská univerzita v Plzni FAKULTA PEDAGOGICKÁ KATEDRA VÝPOČETNÍ A DIDAKTICKÉ TECHNIKY

Tento počítač. 1 Seznámení s programem. 2 Spuštění programu. Adresářové operace Popis programu Tento počítač, podstata adresářových operací.

síťová verze - zaúčtování příjemek / výdejek POZOR! <ENTER> párování příjemek s fakturou umazávání plachty při nízkém kreditu

Zoner photo studio část

Algoritmus Minimax. Tomáš Kühr. Projektový seminář 1

Sada 1 - Základy programování

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

Střední škola informačních technologií a sociální péče, Brno, Purkyňova 97. Vybrané části Excelu. Ing. Petr Adamec

Real time tlakový snímač

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

4. Optické senzory polohy

NPRG030 Programování I, 2016/17 1 / :58:13

Poznámky k předmětu Aplikovaná statistika, 9.téma

Ukázka knihy z internetového knihkupectví

BEZPEČNOSTNÍ OPATŘENÍ Prosíme o důkladné přečteni manuálu instrukce obsluhy.

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Úvod do programování. Úvod do programování. ing. Miroslav Jílek 2009, SJOP Poděbrady

Transkript:

Programování Debugging a testování Martin Urza

Co je debugging? V počítačích nulté generace byly důvodem některých chyb zkraty, které způsoboval mimo jiné hmyz, jenž do těchto strojů zalézal. Odstraňování chyb tedy probíhalo někdy i tak, že se technici vydali na výlet do hlubin počítače, kde lovili brouky. Brouk se řekne anglicky bug. Debugging pak vlastně znamená odstraňování brouků z počítače (původně z počítače, který zabíral celou budovu). Za čas se přestalo tímto termínem označovat hledání chyb v počítačích; začal se používat pro hledání chyb v programech.

Co je testování? Testování slouží k odhalování chyb v aplikacích. Jde o velmi důležitou fázi při vývoje software, bez které nelze zajistit kvalitu výsledného produktu. Průběh testování je takový, že se tester snaží dostat aplikaci do co nejvíce stavů (běžných i extrémních) a objevit chyby. Rozhodně se nejedná o nějakou podřadnou činnost; jde o zodpovědnou, důležitou a náročnou práci, jež nemůže být zastána každým. Testeři často bývají programátoři, případně analytici, kteří aplikaci navrhli (a nejlépe ví, jak má fungovat). Testeři by ideálně neměli testovat vlastní práci.

Rozdíl mezi debuggingem a testováním Debuggování i testování jsou činnosti, které vedou k odhalování a opravování chyb v programu; přesto se jedná o různé činnosti. Při testování používají testeři program podobně, jak by ho používali uživatelé (v tom smyslu, že nemusí mít k dispozici nic víc než hotový program). Cílem debuggingu je typicky odstranění nalezených chyb. Tester tedy objeví v programu chybu a úkolem programátora je chybu lokalizovat (v kódu) a poté ji odstranit. Debugging je proces lokalizace chyby v kódu. K debuggování je třeba více zdrojů a nástrojů než k testování (např. zdrojový kód, ale nejen to).

Debugging - základní prostředky Základním kamenem debuggování je breakpoint, což je nástroj, který dává programátorovi vývojové prostředí. Tento nástroj slouží k označení nějaké řádky kódu; když k ní pak program při svém běhu dorazí, je na tom místě zastaven. Programátor může pozorovat stav takto zastaveného programu (stav jsou zejména hodnoty proměnných). Pozastavený program lze také krokovat; to znamená pouštět jej krok za krokem dál. Po každém takovém kroku se program znovu zastaví a chová se naprosto stejně jako po zastavení na breakpointu. Jeden krok typicky odpovídá jedné řádce kódu.

Debugging - další prostředky Zde se nejedná přímo o nástroj, který by poskytovalo vývojové prostředí, ale o fígle, kterých může využít programátor k dosažení podobných cílů. Jednou z možností jsou ladící výpisy, jenž spočívají v tom, že programátor nechá na nějakém místě kódu program něco vypsat, např. do souboru či na výstup. To lze využít mimo jiné v případě, kdy program někde spadne, případně se zacyklí, ale programátor neví kde. Ladící výpisy lze nahradit breakpointy, což se může hodit v prostředí, které breakpointy nepodporuje. Další možnost jsou výjimky, kterými se ale budeme podrobněji zabývat až za nějaký čas.

Breakpointy v Pascalu Breakpoint do kódu umístíte volbou Breakpoint v menu Debug (zkratka ctrl+f8). Breakpoint je v tom případě umístěn na řádku kódu, kde je kurzor. Odstranění breakpointu probíhá stejně jako přidávání, záleží jen na tom, jestli je na pozici kurzoru v tu chvíli zrovna breakpoint (pak je odstraněn), nebo není (pak je přidán). Položkou Breakpoint List v menu Debug lze zobrazit seznam všech breakpointů v kódu. To se hodí v případě, že je program moc dlouhý a nelze jej snadno prohlédnout. Podobně to funguje i v jiných prostředích a jazycích.

Krokování Zastaví-li se program na breakpointu, je dále možné jej krokovat řádku po řádce. Krok lze vyvolat v menu Run položkou Step Over (F8). Je-li na řádce funkce či procedura, Step Over (jak již název napovídá) ji přeskočí (a samozřejmě vykoná), aniž vejde do jejího kódu. To se může hodit, avšak je možné, že hledaná chyba bude právě v přeskočeném kódu. Chceme-li skočit do funkce či procedury na aktuální řádce a nepřeskočit ji, existuje možnost Trace Into v menu Run (zkratka F7). Během krokování lze používat alt+f5.

Watches V menu Debug je položka Watches, která otvírá okno se sledovanými proměnnými. Toto okno je defaultně prázdné, je třeba do něj dát proměnné, které chceme sledovat. To lze udělat klikem pravým tlačítkem myši na okno watches, což vyvolá nabídku s možností new watch. Téhož výsledku lze dosáhnout stiskem ctrl+f7. Napsáním jména proměnné do new watch lze tuto proměnnou přidat do watches. Watches ukazují hodnoty všech sledovaných výrazů, které jsou aktualizovány v každém kroku krokování. Watches se nejlépe využívají s krokováním.

Cvičení krokování Zkuste si krokování ve svém překladači na kódu, který je na tomto slajdu. Dejte breakpoint na první řádku kódu, spusťte program a krokujte jej až do jeho konce. Povšimněte si, že krokování skutečně odpovídá chování programu, a např. v podmínce je navštívena jen jedna větev. program foo; var bar : integer; baz : integer; begin bar := 2; baz := 2 * bar; bar := 2 * baz; writeln(bar); if (2 > bar) then writeln('++') else writeln('--'); while (2 < bar) do bar := bar div 2; writeln(bar); end. Poté, co kód odkrokujete naprázdno, přidejte proměnné bar a baz do watches a odkrokujte celý program znovu. Sledujte, jak se hodnoty proměnných mění a v každém kroku se aktualizují. Nově aktualizované proměnné jsou označeny.

Další debuggovací nástroje Pascalu V menu Debug lze najít mnoho zajímavých nástrojů, které zatím nebudeme podrobně rozebírat, avšak je dobré o nich vědět. Disassemble ukazuje kód programu v assembleru, což je nízkoúrovňový jazyk, jehož příkazy jsou přímo instrukce procesoru. Registers ukazuje tabulku, která zachycuje obsah registrů procesoru. Floating point unit umožňuje zobrazit stav registrů FPU (jednotka pro práci s desetinnými čísly). Vector unit ukazuje stav SSE registrů procesoru, což je jednotka pro práci s vektory čísel.

Testování aplikace Testování je velmi komplexní proces; je to vlastně asi podobor programování. Existuje mnoho postupů a způsobů testování. Jejich rozbor je výrazně nad rámec této přednášky, proto je zjednodušíme jen na návod k testování jednoduché aplikace. Nejjednodušší způsob testování spočívá asi v tom, že děláte s programem přibližně to, co by dělal uživatel a sledujete, zda program dělá to, co dělat má. Testování je doopravdy důležité. Měla by mu být věnována patřičná pozornost a čas. Programy téměř nikdy nejsou napsány bez chyb.

Chyby v testování Asi nejobvyklejší chybou při testování je, když tester zkouší pouze pozitivní vlastnosti programu, tedy zda dělá to, co dělat má, ale už nezkouší, zda nedělá nic, co dělat nemá. Příklad takového špatného testování velmi jednoduché aplikace, která má zjišťovat, jestli je číslo na vstupu prvočíslo, by bylo testovat pouze prvočísla a nepodívat se, jestli program správně funguje i pro ostatní čísla. Tento příklad je dost jednoduchý, nicméně složitější případy na stejném principu se dějí často. Další častou chybou je, když tester ignoruje extrémy a testuje pouze běžné situace, nikoliv nezvyklé. Uživatelé dělají v reálu hrozné věci ;o))

Cvičení Otestujte alespoň čtyři programy, které jste napsali v rámci minulých přednášek. Písemně zaznamenejte, jak jste testování prováděli, na jakých datech jste testovali a proč právě na nich. Pokud objevíte nějaké chyby, odstraňte je. K tomu využijte znalostí o debuggingu, které jste načerpali na začátku přednášky. I v případě, že žádné chyby neodhalíte, ověřte limity programu. Máte-li například zadávat programu čísla, zjistěte, zda mohou být libovolně velká, nebo jestli pro ně platí nějaké omezení. Má-li program přijímat řetězce, vymyslete a testujte omezující kritéria.

Cvičení Program uvedený vpravo by měl dostat na vstupu řetězec a na výstupu jej vrátit, avšak bez mezer. V tomto programu je několik chyb. Na to, jak je program krátký, je jich tam hodně. program trim; var input : string; output: string; loop1 : integer; begin readln(input); output := ''; for loop1 := 1 to length(output) do if (' ' = input[loop1]) then output := input[loop1] + output; writeln(input); readln(); end. Najděte v programu všechny chyby a opravte je, aby fungoval. Ačkoliv by bylo snazší napsat vše znovu, nedělejte to, nýbrž upravte existující verzi (a přitom zachovejte použitý algoritmus). Zjistíte, že najít chyby je těžší než je opravit.

Rekapitulace Měli byste vědět, že testování je důležité, už proto, že napsat program na první pokus bez chyby, je de facto nemožné, nejedná-li se o aplikaci naprosto triviální. Dále byste měli mít představu, jak správně testovat a čemu se naopak vyvarovat. Toto by mělo platit pro jednodušší a menší aplikace (u větších je to výrazně složitější). Též byste měli být schopni lokalizovat chyby pomocí ladících nástrojů Pascalu (breakpointy, krokování, watches,.). Nezapomeňte na možnost používání ladících výpisů.