Testujeme testery
Kvalitní beta-test je komplikovaný, ale nezbytný proces. I větší studia si často najímají specializované firmy, které nedělají nic jiného než testování. Co můžeš udělat dnes, neodkládej na zítra, platí v případě testování dvojnásob. Proto je dobré testovat hru již od prvních fází vývoje. Šikovný tester umí rozbít cokoliv. Kvalitní tester to umí zdokumentovat.
Bug a debug
Chyba se často i v češtině označuje anglickým výrazem bug. A proces ladění programu pak debugování.
Překlad slova bug znamená štěnice nebo obecně brouk. V angličtině se ve významu chyba (například konstruktérská) používá už velmi dlouho. Použil ho například Thomas Edison v dopise kolegovi Puskásovi roku 1878. S nástupem počítačů pak tento termín pronikl do mnoha dalších jazyků.
Traduje se, že původem tohoto významu je problém způsobený skutečným hmyzem. Známá je třeba historka o molu zachyceném na relé počítače Mark II dne 9. září 1947. Mol byl pečlivě vyproštěn a nalepen do záznamu s poznámkou „první skutečný případ nalezeného bugu“. Je ovšem zřejmé nejen to, že se nejedná o první výskyt termínu, ale také to, že operátoři o konstruktérském použití věděli.
I pojem debug se používal již před počítačovou érou. Oxfordský výkladový slovník uvádí pojem „debugging“ s odkazem na článek o testování leteckých motorů z roku 1945.
I v češtině běžně používáme frázi, že je potřeba ještě vychytat všechny mouchy a že program má ještě nějaké mušky. Entomologové mi odpustí, ale je jasné, že hmyz nemá nikdo rád.
Test kompatibility
Největší peklo je u PC her, protože každý uživatel má jinou sestavu, jiné verze ovladačů a jinou konfiguraci operačního systému. Problém může být v čemkoliv. Naštěstí tento problém z větší části odpadne při použití enginu od třetí strany, protože jeho vývojář se o test kompatibility musí postarat sám. U konzolí je to nejjednodušší část testování, ale jen na první pohled. Všechny konzole jsou stejné, tak se nikdo nemůže vymlouvat na chyby v ovladačích nebo neobvyklou konfiguraci. Právě proto jsou ale od jejich výrobců kladeny v procesu schvalování vyšší nároky. Na tuto fázi testování se nejčastěji najímají specializované firmy.
Test funkčnosti
Pro testera asi nejzábavnější část. Hru hraje a hledá nelogičnosti a nefunkčnosti. Při reportování chyb si ale musí uvědomit, že není game designér, proto by v reportu neměl navrhovat, jak hru změnit nebo vylepšit, ale soustředit se pouze na hledání chyb. Věřte, že ostatní členové týmu mají nápadů, jak hru vylepšit a ještě více zabugovat, mnohem víc sami.
Test grafiky
Jak jste již pochopili z minulých článků, s grafiky je to jednoduché. Ptáte se proč? Protože jejich chyby jsou vidět a i kontrola oprav je tedy jednoduchá. A chyby, které nejsou vidět (například špatný formát textur), jdou testovat automatickými testy.
Test lokalizace
Po překladu a korektuře textů následuje implementace do hry. I sebelepší překladatel a korektor nemusí z holých textů správně pochopit kontext, proto je testování důležité i během lokalizačního procesu. Zároveň je nutné otestovat, zda se všechny texty vejdou na místa, kde jsou vypisovány. Rozdíly mezi délkou výsledného textu jsou někdy opravdu veliké a zvláště uživatelské rozhraní často nebývá nafukovací.
Automatický test a log
Pro testování (nejen her, ale všech programů) je vhodné používat automatické testy a co nejdůkladnější systém logování – záznam událostí a výpis stavu programu zpravidla do textového souboru. Analýzou těchto logů je možné chybu odhalit rychleji než zdlouhavým krokováním.
KVÍZ: Proč je ve hře, která se má odehrávat v noci, vidět slunce?
… dayphase = "night"; if (dayphase = "day") ShowSun(); else ShowMoon(); …
Řešení (je inverzně): V jazycích založených na C-like syntaxi jsou operátorem pro rovnost dva znaky rovná se, v zápise, který je zde uveden, se místo porovnání obsahu proměnné provede její přiřazení. Takže místo zobrazení měsíce se změní obsah proměnné dayphase a zobrazí se slunce.
Paradox na závěr
Opravou chyby vzniká chyba nová. Naštěstí tato rovnice neplatí absolutně. 🙂
Lukáš (CINEMAX)
Tento článek vyšel v časopise LEVEL č. 227
Kdyby ten if napsal jako Yoda…. if (“day” = dayphase) … tak by se na chybu hned došlo 🙂
Tak ono taky ve velké části „jazyků založených na C“ nejde dva řetězce na rovnost obsahu porovnávat prostým operátorem porovnání, ale specializovanou funkcí (strcmp et al.)… A přiřazení nevrací žádné „přiřazení se povedlo“ (co by mělo znamenat, že se „nepovedlo“?), ale přiřazovanou hodnotu, která je nenulová, proto pravda (kdybych tam měl „if (a = 0)“, tak by se to sice „povedlo“, ale výsledkem by byla nepravda). A před else je příkaz končící středníkem. (A to pomíjím ty (anglické) typografické uvozovky…)
díky, za betatest 🙂