Obsah
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
kontrolní tisky -
System.err.println(...)
řádkovým debuggerem jdb
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.logging
nebo alternativní a
zdařilejší log4j
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
standardní klíčové slovo (od JDK1.4) assert
booleovský výraz
testovací nástroje typu JUnit
(a
varianty - HttpUnit
,...) - s metodami
assertEquals()
apod.
pokročilé nástroje na běhovou kontrolu platnosti
invariantů, vstupních, výstupních a dalších podmínek - např.
jass
(Java with ASSertions), http://csd.informatik.uni-oldenburg.de/~jass/.
Ukázka testu jednotky:Test
třídy ChovatelPsu
assert
Napsat zdrojový program užívající klíčové slovo assert (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šší.
Přeložit jej s volbou -source 1.4
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!!!).
Dojde-li za běhu programu k porušení podmínky stanovené za assert, vznikne běhová chyba (AssertionError) a program skončí.
Třída Zlomek používá assert k ověření, že zlomek není (chybou uživatele) vytvářen s nulovým jmenovatelem.
Za assert uvedeme, co musí v daném místě za běhu programu platit.
JUnit
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.
Stáhnout si z http://junit.org poslední (stačí binární) distribuci testovacího prostředí.
Nainstalovat JUnit
(stačí rozbalit do
samostatného adresáře).
Napsat testovací třídu/třídy - buďto implementují rozhraní
junit.framework.Test
nebo obvykleji rovnou
rozšiřují třídu junit.framework.TestCase
Testovací třída obsahuje metodu na nastavení testu (setUp), testovací metody (testNeco) a úklidovou metodu (tearDown).
Testovací třídu spustit v prostředí (řádkovém nebo GUI) -
junit.textui.TestRunner
,
junit.swingui.TestRunner
...
Testovač zobrazí, které testovací metody případně selhaly.
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).
jass
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.
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
stažení a instalace balíku z http://csd.informatik.uni-oldenburg.de/~jass/
vytvoření zdrojového textu s příponou
.jass
, 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 javac, ale v takovém případě ztrácíme možnosti jass
proto nejprve .jass
souboru převedeme
preprocesorem jass na javový (.java
)
soubor
ten již přeložíme javac a spustíme java, tedy jako každý jiný zdrojový soubor v Javě
z .jass
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!
úvodní materiálek k použití junit (v němčině, jako PDF)