Preskoči na sadržaj
FORTRONIQ

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.

Moći ću:
  • 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.

Plan 18 slučajeva Izvođenje uređaji A i B Rezultat prolaz 16/18 Izvješće i predaja Ispravak T09 i T17 18/18 pao regresija nakon ispravka ponovno se izvode svi slučajevi
Slika 3.7.1 — Ciklus ispitivanja: slučaj koji ne prođe vraća se na ispravak, a nakon ispravka ponavlja se cijeli skup slučajeva (regresijsko ispitivanje), jer ispravak može pokvariti nešto drugo.

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):

OznakaSlučajKriterij prolazaAB
T01instalacija i pokretanjeod pokretanja do scene ≤ 10 s; paket ≤ 1,5 GB za A, ≤ 500 MB za Bprošaoprošao
T02mjerilo i visinavirtualnim metrom: stol 750 mm, robot 220 mm; stvarna ruka na rubu stolaprošaoprošao
T06hvatanje rukomsvih 12 dijelova hvata se rukom do 0,8 mprošaoprošao
T08prebacivanje iz ruke u rukudio ne pada, ne skače, ostaje u drugoj ruciprošaoprošao
T09dio (prekidač) ispod ruba stolaprekidač koji padne uz rub stola može se uhvatiti ili se vraća na stolpaopao
T10sklapanjesvaki od 12 dijelova uskoči u svoju točku; brojač 12 / 12prošaoprošao
T11točke interesasvih 6 točaka reagira na isticanje i odabir kontrolerom, pogledom i mišem, uz isti tekstprošaoprošao
T12teleportdo 4 m, samo na pod; ostali ciljevi nevaljaniprošaoprošao
T13okretanje u koracima30° po otklonu, 12 koraka daje točno 360°, oko glave, bez glatke rotacijeprošaoprošao
T16performanse A90 sl/s, GPU i CPU ≤ 9,0 ms, kratki padovi ne ispod 85 sl/sprošao—
T17performanse B, uključujući pogled na cijeli laboratorij90 sl/s, ≤ 300 000 trokuta, ≤ 150 poziva za crtanje—pao (76 sl/s)
T18udobnost8 ispitanika, 10 min rada: nitko ne prekida zbog mučnine uz zadane postavkeprošaoproš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:

  1. Izgraditi paket s uključenim profiliranjem i pokrenuti ga na ciljnom uređaju.
  2. Stati na mjesto najgoreg pogleda. U VR-1 to je kut laboratorija iz kojeg se vidi cijela prostorija sa stolom i robotom.
  3. Snimiti nekoliko sekundi, uključujući hvatanje i teleport, jer oni pokreću logiku i fiziku.
  4. Očitati vrijeme CPU-a i GPU-a, trokute i pozive za crtanje, pa usporediti s ograničenjima.
  5. 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.

A · GPU B prije B · T17 7,8 ms · 70 % okvira 13,9 ms · 72 sl/s · 214 poziva 13,2 ms · 76 sl/s 11,1 ms cilj 9,0 ms 0 2 4 6 8 10 12 ms B nakon ispravka razinama detalja: 90 sl/s, 138 poziva, 262 000 trokuta
Slika 3.7.2 — Budžet okvira pri 90 Hz. Uređaj A ima rezervu od 3,3 ms. Na uređaju B okvir je prije optimizacije i u slučaju T17 trajao dulje od 11,1 ms, što se vidi kao pad na 72, odnosno 76 sl/s.

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:

  1. 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.
  2. 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.
  3. Zadaci. Isti redoslijed za sve: sklapanje robota, obilazak šest točaka interesa, teleport na suprotnu stranu laboratorija i natrag, zatim kontinuirano kretanje s vinjetom.
  4. Promatranje. Promatrač bilježi zastoje, pogrešna hvatanja, sudare s granicom i znakove nelagode, a ne pomaže osim kad je sigurnost ugrožena.
  5. 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:

PoglavljeSadržaj za VR-1
Sažetak16/18 u prvom krugu, 18/18 nakon ispravaka; teleport zadani način
Opseg i opremauređaji A i B, računalo, inačice razvojnog okruženja i pokretača, inačica paketa
Testni slučajevitablica T01–T18 s rezultatom po uređaju i datumom izvođenja
Performansevremena CPU-a i GPU-a, sl/s, trokuti i pozivi za crtanje, prije i poslije optimizacije
Udobnostprotokol, broj ispitanika, rezultati upitnika, zaključak o zadanom načinu kretanja
Pogreškepopis s ozbiljnošću, uzrokom, ispravkom i stanjem (otvorena / zatvorena)
Zaključakje 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.

Budžet okvira i ograničenja sceneRačunski prikaz

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.

Vrijeme okvira—
Iskorištenost budžeta—
Ostvariva frekvencija—
Prekoračenih ograničenja—

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

PojamZnač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: