Testování programů metodou černé skříňky

Metoda černé skříňky spočívá v testování softwaru tak říkajíc s klapkami na očích.
Do této metody patří:

  • Testy splněním
  • Testy selháním
  • Testování stavů
  • Můžeme testy provádět náhodným klikáním, zkoušet zadávat čísla a různé vstupy a snažit se vyvolat chybový stav programu. Ze začátku se vám bude dařit nalézat hodně chyb, zvláště pokud ještě probíhá vývoj, ale časem se dostanete do stavu, kdy budete muset začít při testování používat pokročilejší techniky.

    Testy splněním
    Pokud dostanete na stůl produkt, který máte otestovat, je nejlépe začít prvně s testy splnitelnosti. Pracujte s programem v rukavičkách, zkoušejte, zda program nespadne při triviálních operacích, nebo při operacích nezbytných pro funkci. Pokud vyrobíte letadlo, tak s ním také hned nebudete létat přes oceán, ale zkusíte s ním nejdřív popojet po ranveji, pomalu budete přidávat plyn a testovat motory a až po té přijdete k jednoduchému letu a postupně budete přidávat. Provádění těchto testů v začátcích vám pomůže i zlepšit prosté vztahy na pracovišti. Jak se budou tvářit programátoři, když jim hned ze začátku budete hlásit chyby, které se vyskytují pouze v nepravděpodobných stavech softwaru a nebo na extrémních množinách dat? Ale pokud přijdete s chybou, která brání funkčnosti programu v zcela běžných případech, pak programátor přijme chybu s tím, že by se stejně při provozu našla a její oprava by v momentě nasazení systému byla daleko dražší.

    Testy selháním
    Po této části testů přichází čas na provádění testů selháním. Teď už zkoušejte zadávat extrémní hodnoty, zkoušejte dělit nulou, zadávat prázdné řetezce tam, kde má být zadán vstup atd. Zde se testuje nejenom chování programů, ale i správnost chybových hlášení. „Nemohu najít ovladač ‚neznámý‘ pro zařízení ‚neznámé’“ není zrovna vypovídající chybové hlášení.

    Intervaly pro testování
    Dalším problémem, před který je postaven tester, je výběr hodnot k testování. Otestovat všechny možnosti je zcela časově nereálné. Je vhodné si k testům stanovit intervaly.
    Například test sčítání dvou položek v programu:
    Hodnoty 5+4 a 1+3 jsou na první pohled zcela ekvivalentní. Tzn. jeden interval. Ale co zkusit třeba výraz 65535+1. Nebo 0-1 a co třeba 0-65536? Tomuto testování se někdy říká „chůze po hraně útesu“. Zkoušíme krajní hodnoty a sledujeme, zda je systém zpracuje či zda na nich havaruje. Hraniční hodnoty ne vždy znáte. Zde zkuste mocniny dvou. 2^8, 2^16 atd.

    Kumulace chyb
    Pokud najdeme chybu v horní oblasti čísel, tak se na tuto oblast zaměříme při veškerých testech i ostatních částí programu. Chyby mají totiž tendenci se kumulovat a pokud někde najdete jednu, tak je tam zaručeně i další.

    Přizpůsobivost programátorů
    Neposlední zajímavou vlastností programátorů je přizpůsobivost. Pokud budete reportovat pouze jeden typ chyb, tak se programátoři přizpůsobí a najednou tyto chyby z programu zmizí. Je důležité se nesoustředit pouze na určité typy chyb. V literatuře je někdy tento pojem označován jako budování odolnosti vůči pesticidům. Pesticid je zde tester a plevel programátor. Po čase začne být plevel proti postřiku imunní a musí se nasadit nový pesticid. Pokud je pesticid různý, programátoři se nemohou přizpůsobit. Programátoři totiž jeden druh chyby dokáží úspěšně maskovat, ale více chyb už lze maskovat stěží.

    Příště něco o testování stavů softwaru a reportování chyb.

    4 thoughts on “Testování programů metodou černé skříňky”

    1. V literatuře je někdy tento pojem označován jako budování odolnosti vůči pesticidům. Pesticid je zde tester a plevel programátor. Po čase začne být plevel proti postřiku imunní a musí se nasadit nový pesticid.

      Toto je, ale přesně stav, který je dobře. Tester naučil programátory, aby si na určitý druh chyb dávali pozor. Testerovi se tak ušetří čas, aby se mohl soustředit na důležitější problémy.

      Pokud toto nastane, znamená to, že máte dobrého testera 🙂

    2. > Pokud dostanete na stůl produkt, který máte otestovat, je nejlépe začít
      > prvně s testy splnitelnosti. Pracujte s programem v rukavičkách, zkoušejte,
      > zda program nespadne při triviálních operacích, nebo při operacích
      > nezbytných pro funkci.

      Presne, docela mi vadi, kdyz mi tester zacne hlasit chyby, ktere jsou pro danou vyvojovou fazi projektu absolutne irelevantni.

      > Dalším problémem, před který je postaven tester, je výběr hodnot k
      > testování. Otestovat všechny možnosti je zcela časově nereálné.
      > Je vhodné si k testům stanovit intervaly.

      Vyber hodnot urcite nechat na cloveku, ale myslim si, ze je zbytecne na vlastni otestovani alokovat cloveka. Prece jenom, takovyhle „opici test“ muze udelat i vhodne nastaveny automaticky test.

    3. Myslím, že dané postupy se dají s úspěchem použít jednorázově. Při opakovaných testech podobným způsobem, kdy máte produkt, který se v čase vyvíjí (jsou přidávány nové funkčnosti a je požadováno testovat jejich vliv již na dříve hotové části programu), mohou tyto metodiky vést k tomu, že tester upadne do totální letargie – bude muset stále dokola ověřovat to samé, bude uvažovat v intencích „tohle jsem testoval minulou verzi a fungovalo to, proč by to nemělo fungovat teď“ a snadno pustí chybu, která vznikla novým vývojem.
      Jak doporučujete řešit tuto situaci? Tedy testování cyklicky vyvíjeného software?

    4. Souhlasím s vámi, proto také tato skupina testů nesmí existovat osamoceně. Dlouhodobě vyvíjený software by se primárně měl opírat o automatizované testy (což je samozřejmě komplikované v případě testování GUI), které jsou doplněny test plány pro testery.

      Je vhodné takový soubor test plánů rozdělit na testy základní a pro běh software kritické funkčnosti (smoketesty) a na detailnější testy zbytku (a i ty je možné rozdělit na testy šťastné cestu a na testy ošetření výjimek). Smoketesty by měly být testovány často a nejlépe opakovaně během vývojového cyklu, samozřejmě podle možností společnosti. Ostatní testy je vhodné provést při stabilizaci kódu v závěrečné fázi cyklu, ale též mohou být prováděny průběžně s periodou přesahující jeden vývojový cyklus.

      Určitým způsobem obrany proti „únavě materiálu“ je jeho obnova: například střídání testerů napříč projekty. Setkal jsem se i s tím, že nový vývojář nejprve dělal několik týdnů testera, což mu umožnilo poznat software a jeho vazby dřív, než jej začal vyvíjet.

      U velkých open-source projektů je další možností zapojení komunity.

    Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *