Ladění programů, testování jednotek (junit)

Obsah

Ladění programů (debugging)
Ladění programů v Javě
Ještě lepší...
Běhové ověření podmínky - assert
Postup při práci s assertsearch in Czech Wikipedia
Ukázka použití assert (1)
Ukázka použití assert (2)
Ukázka použití assert (3)
Ukázka použití assert (4)
Testování jednotek nástrojem junit
Postup při práci s JUnitsearch in Czech Wikipedia
Ukázka použití JUnit (1)
Ukázka použití JUnit (2)
Ukázka použití JUnit (3)
Ukázka použití JUnit (4)
Návrh dle kontraktu
Postup při práci s jasssearch in Czech Wikipedia
Odkazy

Ladění programů (debugging)

  • Ladění programů s debuggerem jdb

  • Nástroje ověřování podmínek za běhu - klíčové slovo assert

  • Nástroje testování jednotek (tříd, balíků) - junit

  • Pokročilé systémy dynamického ověřování podmínek - jass

Ladění programů v Javě

Je mnoho způsobů...

  • kontrolní tisky - System.err.println(...)search in Czech Wikipedia

  • řádkovým debuggerem jdb search in Czech Wikipedia

  • integrovaným debuggerem v IDE

  • pomocí speciálních nástrojů na záznam běhu pg.:

    nejrůznější "loggery" - standardní poskytuje od JDK1.4 balík java.util.loggingsearch in Czech Wikipedia nebo alternativní a zdařilejší log4j search in Czech Wikipedia

Ještě lepší...

  • je používat systémy pro běhovou kontrolu platnosti podmínek:

    • vstupní podmínka metody (zda je volána s přípustnými parametry)

    • výstupní podmínka metody (zda jsou dosažené výstupy správné)

    • a podmínka kdekoli jinde - např. invariant cyklu...

  • K tomuto slouží jednak

  • Ukázka testu jednotky:Test třídy ChovatelPsusearch in Czech Wikipedia

Běhové ověření podmínky - assert

Postup při práci s assertsearch in Czech Wikipedia

Postup:

  1. Napsat zdrojový program užívající klíčové slovo assertsearch in Czech Wikipedia (pouze od verze Java2 v1.4 výše). Nepotřebujeme žádné speciální běhové knihovny, vše je součástí Javy; musíme ovšem mít překladové i běhové prostředí v1.4 a vyšší.

  2. Přeložit jej s volbou -source 1.4

  3. Spustit jej s volbou -ea (-enableassertions).

    Aktivovat aserce lze i selektivně pro některé třídy (-ea název_třídy nebo -ea název_balíku... - tři tečky na konci!!!).

  4. Dojde-li za běhu programu k porušení podmínky stanovené za assert, vznikne běhová chyba (AssertionError) a program skončí.

Ukázka použití assert (1)

Třída Zlomek používá assert k ověření, že zlomek není (chybou uživatele) vytvářen s nulovým jmenovatelem.

Za assertsearch in Czech Wikipedia uvedeme, co musí v daném místě za běhu programu platit.

Obrázek 1. Třídy AssertDemo, Zlomek

Třídy AssertDemo, Zlomek

Ukázka použití assert (2)

Program přeložíme (s volbou -source 1.4):

Obrázek 2. Správný postup překladu AssertDemo

Správný postup překladu AssertDemo

Ukázka použití assert (3)

Program spustíme (s volbou -ea nebo selektivním -ea:NázevTřídy):

Obrázek 3. Spuštění AssertDemo s povolením assert

Spuštění AssertDemo s povolením assert

Ukázka použití assert (4)

Spustíme-li bez povolení assert (bez volby -ea nebo naopak s explicitním zákazem: -da), pak program podmínky za assert neověřuje:

Obrázek 4. Spuštění AssertDemo bez povolení assert

Spuštění AssertDemo bez povolení assert

Testování jednotek nástrojem junit

Postup při práci s JUnitsearch in Czech Wikipedia

Uvědomit si, že žádný nástroj za nás nevymyslí, JAK máme své třídy testovat. Pouze nám napomůže ke snadnějšímu sestavení a spuštění testu.

Postup:

  1. Stáhnout si z http://junit.org poslední (stačí binární) distribuci testovacího prostředí.

  2. Nainstalovat JUnitsearch in Czech Wikipedia (stačí rozbalit do samostatného adresáře).

  3. Napsat testovací třídu/třídy - buďto implementují rozhraní junit.framework.Testsearch in Czech Wikipedia nebo obvykleji rovnou rozšiřují třídu junit.framework.TestCasesearch in Czech Wikipedia

  4. Testovací třída obsahuje metodu na nastavení testu (setUp), testovací metody (testNeco) a úklidovou metodu (tearDown).

  5. Testovací třídu spustit v prostředí (řádkovém nebo GUI) - junit.textui.TestRunnersearch in Czech Wikipedia, junit.swingui.TestRunnersearch in Czech Wikipedia...

  6. Testovač zobrazí, které testovací metody případně selhaly.

Ukázka použití JUnit (1)

Třída Zlomek zůstává zhruba jako v předchozím příkladu, přibývají však metody equals (porovnává dva zlomky, zda je jejich číselná hodnota stejná) a soucet (sečítá dva zlomky, součet vrací jako výsledek).

Obrázek 5. Upravená třída Zlomek s porovnáním a součtem

Upravená třída Zlomek s porovnáním a součtem

Ukázka použití JUnit (2)

Testovací třída JUnitDemo má „přípravnou“ metodu setUp, tearDown a testovací metody.

Obrázek 6. Testovací třída JUnitDemo

Testovací třída JUnitDemo

Ukázka použití JUnit (3)

Spuštění testovače v prostředí GUI Swing nad testovací třídou JUnitDemo.

Obrázek 7. Spouštění testovače nad testovací třídou JUnitDemo

Spouštění testovače nad testovací třídou JUnitDemo

Pokud testovací třída prověří, že testovaná třída/y je/jsou OK, vypadá to přibližně takto:

Obrázek 8. Testovač spouštějící třídu JUnitDemo

Testovač spouštějící třídu JUnitDemo

Ukázka použití JUnit (4)

Má-li testovaná třída/y chyby a zjistí-li to testovač, vypadá to třeba takto:

Obrázek 9. Testovací třída JUnitDemo našla chybu

Testovací třída JUnitDemo našla chybu

Návrh dle kontraktu

Postup při práci s jasssearch in Czech Wikipedia

jass je preprocesor javového zdrojového textu. Umožňuje ve zdrojovém textu programu vyznačit podmínky, jejichž splnění je za běhu kontrolováno.

Podmínkami se rozumí:

  • pre- a postconditions u metod (vstupní a výstupní podmínky metod)

  • invarianty objektů - podmínky, které zůstávají pro objekt v platnosti mezi jednotlivými operacemi nad objektem

Postup práce s jass:

  • stažení a instalace balíku z http://csd.informatik.uni-oldenburg.de/~jass/

  • vytvoření zdrojového textu s příponou .jasssearch in Czech Wikipedia, javovou syntaxí s použitím speciálních komentářových značek

  • takový zdrojový text je přeložitelný i normálním překladačem javacsearch in Czech Wikipedia, ale v takovém případě ztrácíme možnosti jass

  • proto nejprve .jasssearch in Czech Wikipedia souboru převedeme preprocesorem jass na javový (.javasearch in Czech Wikipedia) soubor

  • ten již přeložíme javacsearch in Czech Wikipedia a spustíme javasearch in Czech Wikipedia, tedy jako každý jiný zdrojový soubor v Javě

  • z .jasssearch in Czech Wikipedia zdrojů je možné vytvořit také dokumentaci API obsahující jass značky, tj. informace, co kde musí platit za podmínky atd. - vynikající možnost!