středa 14. července 2004

Java:Zpracování XML souborů - rychlost čtení SAX versus DOM

Tomáš Kouba porovnal rychlost čtení XML dokumentu SAX vs. DOM v prostředí platformy DOT.NET. Protože mě to zajímalo požádal jsem Tomáše Koubu o zdrojáky a testovací XML soubory a přepsal jsem jeho test do Javy.

Výsledky nebyly nijak překvapivé, s rostoucí velikostí XML souboru narůstala rychlost zpracování ve prospěch SAX zpracování. S lokálním souborem byl rozdíl při 10000 uzlech přibližně trojnásobný.

Počet uzlůDOM local(ms)DOM remote(ms)SAX local(ms)SAX remote(ms)
100233273153203
1000517828270571
10000222352177373688

Výše uvedené hodnoty jsem naměřil pod OS Windows 2000 na JRE 1.4.2-b28 (standardní JAXP).

Z praktického hlediska je práce s objektovou strukturou, kterou poskytuje rozhraní DOM mnohem snazší. Pokud není rychlost zpracování XML stěžejní, pak doporučuji použít DOM. Cílem tohoto měření nebylo porovnat SAX DOM .NET vs. SAX DOM Javy. Zmínil bych dva rozdíly, zatímco .NET XML parser ignoruje whitespaces, javovský XML parser to standardně neděla.

Náměty pro další zkoumání bych hledal ve složitější struktuře zpracovávaného XML dokumentu a z hlediska Javy v použití novějších verzi Xalanu (Xercesu) případně jiných XML parseru.

úterý 13. července 2004

Stavové a interakční testování

Když jsem dnes ráno pročítal TSS narazil jsem na diskusi k článku Mocks Aren't Stubs od Martina Fowlera, kterého považuji za, průkopníka a inovátora technik vývoje softwaru.

Při psaní unit testů potřebujete po otestovaní objektu (primární objekt) i další sekundární objekty, které primární objekt využívá. Tyto sekundární objekty můžeme mockovat nebo stubovat. Mock nebo Stub objekt pak představuje sekundární objekt v minimálním stavu nutném pro test primárního objektu.

Z mého pohledu představoval Mock to samé co Stub, s nepatrným rozdílem, že Mock objekty implementovaly rozhraní sekundárního objektu. Článek Martina Fowlera mě vyvedl z omylu. Myšlenka Mock objektů, které vycházejí z XP (Extrémní programování) sahá do způsobu testování.

Mock objekty jsou určeny k interakčnímu testování, tedy interakce mezi primárním a sekundárním objektem na základě nějakého očekávání. Hojně používaný způsob testování se nazývá stavový asi většina testů, které jste viděli, byla stavová. Stavové testování se odlišuje v tom, že se testuje výsledný očekávaný stav objektu např. hodnota x je 50.

V článku je popsáno jak interakční tak stavové testování, jejich rozdíly a autorův pohled na oba přístupy. Samozřejmě nechybí ani vysvětlení toho co představuje Stub a Mock.