MODUL 3 · RAZVOJ OKRUŽENJA VIRTUALNE STVARNOSTI
Nastavna jedinica 3.7
Testiranje funkcionalnosti i performansi
Kako se dokazuje da gotova VR aplikacija radi: testni slučajevi s jasnim kriterijima, profiliranje i budžet okvira na oba ciljna uređaja, ispitivanje udobnosti s ispitanicima te izvješće i predaja. Sve na primjeru laboratorija VR-1, koji je u prvom krugu prošao 16 od 18 slučajeva.
- napisati testni slučaj s preduvjetom, koracima, očekivanim rezultatom i mjerljivim kriterijem
- izvesti ispitivanje na dva ciljna uređaja i zapisati rezultat po uređaju
- profilirati aplikaciju i odrediti je li ograničena procesorom ili grafičkom karticom
- usporediti izmjereno vrijeme okvira s budžetom i ograničenjima scene
- organizirati ispitivanje udobnosti s ispitanicima sigurno i s jasnim protokolom
- sastaviti izvješće o ispitivanju i pripremiti predaju
- izračunati vrijeme okvira, iskorištenost budžeta i ostvarivu frekvenciju iz izmjerenih vremena
Što se ispituje i kada
Aplikacija za virtualnu stvarnost ispituje se na tri razine koje se ne mogu zamijeniti jedna drugom:
- Funkcionalnost — radi li ono što je zadano: hvatanje, priklapanje, točke interesa, kretanje, vožnja robota, izbornik.
- Performanse — drži li aplikacija frekvenciju uređaja u najgorem slučaju, a ne samo u prosjeku, te poštuje li ograničenja scene, vremena pokretanja i veličine paketa.
- Udobnost — mogu li stvarni korisnici raditi bez mučnine, umora i opasnosti u prostoru za igru.
Ispitivanje nije zadnji tjedan projekta, nego ciklus koji počinje planom i završava tek kad svi slučajevi prođu. U laboratoriju VR-1, izrađenom u šest tjedana u timu od tri osobe, plan s 18 testnih slučajeva nastao je odmah nakon zahtjeva, prije prve linije logike. Tako je svaki zahtjev (npr. teleport do 4 m) od početka imao i način provjere.
Ispituje se na svim ciljnim uređajima, u VR-1 na uređaju A (PC-VR) i uređaju B (samostalne naočale), i to na izgrađenom paketu, a ne u uređivaču. Uređivač troši dodatno vrijeme i memoriju pa mjerenja u njemu ne vrijede za gotovu aplikaciju. Inačica s mišem korisna je za brzu provjeru logike, ali ne zamjenjuje ispitivanje u naočalama.
Testni slučajevi
Testni slučaj (engl. test case) jedan je provjerljiv zahtjev zapisan tako da ga druga osoba može ponoviti i doći do istog rezultata. Ima oznaku, zahtjev na koji se odnosi, preduvjet, korake, očekivani rezultat i mjerljiv kriterij prolaza. Rečenica „teleport radi dobro" nije kriterij; „luk ne pada dalje od 4 m i odredište na stolu je nevaljano" jest.
Primjer potpunog zapisa, slučaj T12:
- Zahtjev: teleport lukom do 4 m, samo na pod laboratorija.
- Preduvjet: korisnik stoji uz stol, zadane postavke udobnosti.
- Koraci: ciljati redom 2 m, 4 m i 6 m po podu, zatim ploču stola i zid; pri svakom otpustiti palicu.
- Očekivano: skok na 2 m i 4 m; cilj na 6 m, ploča stola i zid nevaljani, bez skoka.
- Rezultat: prošao na A i B.
Izbor iz 18 slučajeva laboratorija VR-1 (cijeli popis je u projektnom zadatku):
| Oznaka | Slučaj | Kriterij prolaza | A | B |
|---|---|---|---|---|
| T01 | instalacija i pokretanje | od pokretanja do scene ≤ 10 s; paket ≤ 1,5 GB za A, ≤ 500 MB za B | prošao | prošao |
| T02 | mjerilo i visina | virtualnim metrom: stol 750 mm, robot 220 mm; stvarna ruka na rubu stola | prošao | prošao |
| T06 | hvatanje rukom | svih 12 dijelova hvata se rukom do 0,8 m | prošao | prošao |
| T08 | prebacivanje iz ruke u ruku | dio ne pada, ne skače, ostaje u drugoj ruci | prošao | prošao |
| T09 | dio (prekidač) ispod ruba stola | prekidač koji padne uz rub stola može se uhvatiti ili se vraća na stol | pao | pao |
| T10 | sklapanje | svaki od 12 dijelova uskoči u svoju točku; brojač 12 / 12 | prošao | prošao |
| T11 | točke interesa | svih 6 točaka reagira na isticanje i odabir kontrolerom, pogledom i mišem, uz isti tekst | prošao | prošao |
| T12 | teleport | do 4 m, samo na pod; ostali ciljevi nevaljani | prošao | prošao |
| T13 | okretanje u koracima | 30° po otklonu, 12 koraka daje točno 360°, oko glave, bez glatke rotacije | prošao | prošao |
| T16 | performanse A | 90 sl/s, GPU i CPU ≤ 9,0 ms, kratki padovi ne ispod 85 sl/s | prošao | — |
| T17 | performanse B, uključujući pogled na cijeli laboratorij | 90 sl/s, ≤ 300 000 trokuta, ≤ 150 poziva za crtanje | — | pao (76 sl/s) |
| T18 | udobnost | 8 ispitanika, 10 min rada: nitko ne prekida zbog mučnine uz zadane postavke | prošao | prošao |
Rezultat prvog kruga bio je 16/18, dakle 88,9 % slučajeva. Slučaj koji ne prođe ne briše se i ne ublažava mu se kriterij, nego se zapisuje uzrok, ispravak i ponovljeno ispitivanje. U VR-1 T09 je ispravljen tako da se zona hvata ruke više ne sudara s kolizijskim oblikom ploče stola, a dio koji padne ispod 0,70 m vraća se na polazno mjesto na stolu; T17 je ispravljen razinama detalja za udaljene dijelove laboratorija.
Profiliranje
Profiliranje (engl. profiling) je mjerenje koliko vremena i memorije troši koji dio aplikacije u svakom okviru. Cilj nije dobiti jedan broj sličica u sekundi, nego odgovoriti na pitanje zašto okvir traje koliko traje. Prvo se utvrđuje tko ograničava:
- ograničenje procesorom (engl. CPU-bound) — logika, fizika, animacija i priprema poziva za crtanje traju dulje od iscrtavanja; smanjenje razlučivosti ne pomaže;
- ograničenje grafičkom karticom (engl. GPU-bound) — iscrtavanje trokuta, piksela, sjena i naknadne obrade traje dulje; pomaže manje trokuta, jednostavniji materijali ili manja razlučivost iscrtavanja.
Razvojna okruženja imaju ugrađen profiler i statistiku okvira (broj trokuta, poziva za crtanje, vremena po niti), a pokretači naočala nude vlastite prikaze vremena okvira i ispuštenih okvira. Nazivi i izbornici razlikuju se po alatu i inačici. Postupak je isti:
- Izgraditi paket s uključenim profiliranjem i pokrenuti ga na ciljnom uređaju.
- Stati na mjesto najgoreg pogleda. U VR-1 to je kut laboratorija iz kojeg se vidi cijela prostorija sa stolom i robotom.
- Snimiti nekoliko sekundi, uključujući hvatanje i teleport, jer oni pokreću logiku i fiziku.
- Očitati vrijeme CPU-a i GPU-a, trokute i pozive za crtanje, pa usporediti s ograničenjima.
- Promijeniti jednu stvar, ponovno izgraditi i izmjeriti. Nikad više promjena odjednom.
Na uređaju B prije optimizacije aplikacija je radila na 72 sl/s uz 214 poziva za crtanje, iznad dopuštenih 150. Spajanjem mreža i materijala broj poziva pao je na 138, što je 35,5 % manje, a frekvencija je porasla na 90 sl/s uz 262 000 trokuta, odnosno 87 % dopuštenih 300 000. U ispitivanju se zatim pokazalo da pri pogledu na cijeli laboratorij frekvencija opet pada na 76 sl/s (slučaj T17); taj je pad uklonjen razinama detalja, a ne daljnjim spajanjem.
Budžet okvira i ostali mjerljivi zahtjevi
Pri 90 Hz na raspolaganju je 1000 / 90 = 11,1 ms po okviru. Cilj je da i CPU i GPU budu gotovi za najviše 9,0 ms; preostalih 2,1 ms (19 % okvira) ostavlja se pokretaču i sastavljaču slike (engl. compositor) te za neočekivane vršne opterećenosti. Kad okvir ne stigne na vrijeme, pokretač prikazuje prethodnu sliku ili je preračunava prema novom položaju glave; to prikrije poneki izgubljeni okvir, ali ne i trajan manjak.
Uz vrijeme okvira ispituju se i ostali brojčani zahtjevi VR-1: vrijeme od pokreta do fotona najviše 20 ms, pokretanje najviše 10 s i veličina paketa. Vrijeme od pokreta do fotona izravno se mjeri samo posebnom opremom (npr. brzom kamerom koja snima pokret i zaslon istodobno); bez nje se procjenjuje iz statistike pokretača, a u izvješću se jasno piše da je riječ o procjeni.
Ispitivanje udobnosti s ispitanicima
Programer koji svaki dan radi u naočalama loš je ispitanik: navikao se na aplikaciju i na kinetozu. Zato se udobnost ispituje s ljudima koji aplikaciju ne poznaju. U VR-1 sudjelovalo je 8 ispitanika različitog iskustva s VR-om. Dobra praksa za protokol:
- Priprema. Očišćena oprema i jednokratna zaštita za lice, provjeren prostor za igru i granica sigurnosti 0,3 m od zida, podešen razmak zjenica za svakog ispitanika. Ispitanik zna da smije prekinuti u bilo kojem trenutku.
- Kratki upitnik prije. Iskustvo s VR-om i trenutno stanje (umor, glavobolja). Za mjerenje simptoma koristi se standardizirani upitnik o bolesti simulatora (engl. simulator sickness questionnaire) ili jednostavna ljestvica nelagode, prije i poslije sesije.
- Zadaci. Isti redoslijed za sve: sklapanje robota, obilazak šest točaka interesa, teleport na suprotnu stranu laboratorija i natrag, zatim kontinuirano kretanje s vinjetom.
- Promatranje. Promatrač bilježi zastoje, pogrešna hvatanja, sudare s granicom i znakove nelagode, a ne pomaže osim kad je sigurnost ugrožena.
- Upitnik poslije i razgovor. Što je bilo teško, što neugodno, što nejasno.
Jedan od osam ispitanika (12,5 %) osjetio je blagu mučninu pri kontinuiranom kretanju. Zaključak nije „kontinuirano kretanje treba ukloniti", nego da ono ne smije biti zadano: teleport je postao zadani način, a kontinuirano kretanje ostalo je izbor uz vinjetu. S osam ispitanika to je pokazatelj, a ne statistički pouzdan udio; u izvješću se tako i piše.
Pažnja
Sesija se odmah prekida kad ispitanik javi mučninu, vrtoglavicu ili naprezanje očiju. Nakon toga sjedne i odmara se bez naočala, a ne nastavlja „da završi zadatak". Ispitanik koji se loše osjeća ne vozi i ne radi na strojevima dok simptomi ne prođu.
Izvješće o ispitivanju i predaja
Izvješće o ispitivanju (engl. test report) mora omogućiti da netko tko nije bio prisutan zna što je ispitano, čime, s kojim rezultatom i što je ostalo otvoreno. Preporučeni sadržaj:
| Poglavlje | Sadržaj za VR-1 |
|---|---|
| Sažetak | 16/18 u prvom krugu, 18/18 nakon ispravaka; teleport zadani način |
| Opseg i oprema | uređaji A i B, računalo, inačice razvojnog okruženja i pokretača, inačica paketa |
| Testni slučajevi | tablica T01–T18 s rezultatom po uređaju i datumom izvođenja |
| Performanse | vremena CPU-a i GPU-a, sl/s, trokuti i pozivi za crtanje, prije i poslije optimizacije |
| Udobnost | protokol, broj ispitanika, rezultati upitnika, zaključak o zadanom načinu kretanja |
| Pogreške | popis s ozbiljnošću, uzrokom, ispravkom i stanjem (otvorena / zatvorena) |
| Zaključak | je li aplikacija spremna za predaju i što se preporučuje dalje |
Uz izvješće se predaje: izvorni projekt (bez privremenih mapa koje se ponovno stvaraju), izgrađeni paketi za A i B, kratka video snimka iz naočala s prikazom glavnih radnji, upute za pokretanje i popis poznatih ograničenja. Naziv datoteka i inačica neka budu jednoznačni, tako da se svaki rezultat u izvješću može povezati s točno određenim paketom.
Zapamtite
Ispravak koji nije ponovno ispitan nije ispravak. Svaka izmjena nakon zadnjeg kruga ispitivanja znači novi krug, barem za pogođene slučajeve i slučajeve performansi.
Budžet okvira iz izmjerenih vremena
Vrijeme okvira je T = 1000 / f. Iskorištenost budžeta je udio duljeg od dvaju vremena (CPU ili GPU) u vremenu okvira. Ako je dulje vrijeme veće od T, ostvariva frekvencija približno je 1000 / tmax; stvarni pokretač može se tada prebaciti i na nižu stalnu frekvenciju, pa je izračun gornja granica. Cilj po jedinici je 0,81 · T, što pri 90 Hz daje 9,0 ms.
T = 1000 / f u = max(tCPU, tGPU) / T · 100 % fostv = min(f, 1000 / max(tCPU, tGPU))
Zadane vrijednosti vremena CPU-a i GPU-a u prikazu su primjer za uređaj B nakon optimizacije; zamijenite ih vlastitim mjerenjima.
Iz frekvencije i izmjerenih vremena CPU-a i GPU-a računa vrijeme okvira, iskorištenost budžeta i ostvarivu frekvenciju te broji prekoračena ograničenja za odabrani uređaj.
Za uređaj B uz 8,4 ms GPU-a i 7,2 ms CPU-a iskorišteno je 75,6 % okvira, a 262 000 trokuta i 138 poziva za crtanje su unutar ograničenja: nema prekoračenja. Ako u polje GPU upišete 13,2 ms, ostvariva frekvencija pada na 76 sl/s, kao u slučaju T17. Uz 13,9 ms i 214 poziva dobiva se stanje prije optimizacije: 72 sl/s i dva prekoračenja. Za uređaj A izmjereno je 7,8 ms GPU-a, što je 70 % okvira i rezerva od 3,3 ms.
Ključni pojmovi
| Pojam | Značenje |
|---|---|
| Testni slučaj (engl. test case) | zapis jednog provjerljivog zahtjeva s koracima, očekivanim rezultatom i kriterijem prolaza |
| Budžet okvira (engl. frame budget) | vrijeme dostupno za jedan okvir, 11,1 ms pri 90 Hz, s ciljem od 9,0 ms za CPU i GPU |
| Profiliranje (engl. profiling) | mjerenje potrošnje vremena i memorije po dijelovima aplikacije u svakom okviru |
| Regresijsko ispitivanje (engl. regression testing) | ponavljanje ispitivanja nakon ispravka radi provjere da ništa drugo nije pokvareno |
| Kriterij prolaza (engl. pass criterion) | mjerljiv uvjet koji odlučuje je li slučaj prošao |
| Ograničenje procesorom / grafikom (engl. CPU-bound / GPU-bound) | stanje u kojem duljinu okvira određuje CPU odnosno GPU |
| Ispušteni okvir (engl. dropped frame) | okvir koji nije gotov na vrijeme pa pokretač prikazuje staru ili preračunatu sliku |
| Ispitivanje s korisnicima (engl. user testing) | ispitivanje udobnosti i uporabljivosti s ljudima koji aplikaciju ne poznaju |
| Izvješće o ispitivanju (engl. test report) | dokument s opsegom, rezultatima, pogreškama i zaključkom ispitivanja |
Provjeri se
Kratka provjera prije prelaska na sljedeću jedinicu. Odgovor se potvrđuje klikom, a obrazloženje se prikazuje odmah.
Pitanje 1 od 4
Koji je od navedenih ispravan kriterij prolaza testnog slučaja?
Kriterij mora biti mjerljiv i ponovljiv. Samo drugi odgovor daje provjerljive uvjete koje druga osoba može ponoviti.
Pitanje 2 od 4
Aplikacija na uređaju B ima 8,4 ms GPU-a i 10,5 ms CPU-a pri 90 Hz. Što je točno?
Okvir od 11,1 ms još se stigne, ali dulje vrijeme ima CPU (10,5 ms) i ono je iznad cilja. Smanjenje razlučivosti rasterećuje GPU, a ne CPU.
Pitanje 3 od 4
Zašto se performanse mjere na izgrađenom paketu, a ne u uređivaču?
Uređivač ima vlastito opterećenje. Mjerenje vrijedi samo za ono što korisnik stvarno pokreće, na ciljnom uređaju.
Pitanje 4 od 4
Jedan od osam ispitanika osjetio je blagu mučninu pri kontinuiranom kretanju. Koji je zaključak ispravan?
Osam ispitanika daje pokazatelj, ne pouzdan udio. Razuman odgovor je promjena zadanog načina, a ne uklanjanje mogućnosti koja drugima odgovara.
Odgovoreno 0 od 4.
Vježbe uz jedinicu
Gradivo ove jedinice priprema za sljedeće vježbe: