Come testare l'unità o eseguire i test automatici più efficaci sul codice grafico per OpenGL?

17

Sto scrivendo un gioco e il motore grafico che lo accompagna su OpenGL in C ++. Sono anche un appassionato di buoni processi di codifica e test automatici. Il codice + test della grafica sembra piuttosto immiscibile, dal momento che l'output è spesso solo visuale o molto strongmente orientato alla visualizzazione.

Ad esempio, immagina di analizzare il flusso di immagini grezzo che viene reso sullo schermo byte per byte - devi confrontare i dati di test, che è difficile da creare / ottenere, e spesso le immagini renderizzate non sono identici a livello di byte quando vengono eseguiti in momenti diversi: piccole modifiche negli algoritmi distruggono completamente questo approccio.

Sto pensando di creare una suite visuale di test unitari, in cui posso praticamente rendere diverse scene di prova, mostrando cose come shadow mapping, animazioni, ecc ecc ecc. Come parte di CI, queste scene sarebbero state rese in un file video (o eventualmente lasciarlo come un eseguibile) con metriche diverse. Ciò richiederebbe comunque l'ispezione manuale del file video, ma almeno sarebbe un po 'automatizzato e standardizzato.

Che ne pensi? Spero ci siano modi migliori?

    
posta Max 29.05.2012 - 17:00
fonte

3 risposte

8

La libreria di elaborazione delle immagini opencv lo fa salvando l'immagine e confrontandola con un'immagine di riferimento - ha un mucchio di Funzioni di test c ++ e macro per gestire la corrispondenza approssimativa dell'immagine ecc.

    
risposta data 29.05.2012 - 17:30
fonte
4

Il tuo framework di test può rendere la sua immagine di prova in un buffer, recuperare l'immagine renderizzata e confrontarla con un'immagine di riferimento "dorata" che è stata precedentemente generata a tale scopo.

Questo non funzionerà anche nei casi in cui non ci si aspetta che i risultati del test rimangano esattamente uguali. Tuttavia, puoi calcolare la differenza quadratica tra il test e le immagini di riferimento e confrontarla con una soglia.

Potresti anche voler fornire la registrazione e il controllo dei dati sulle prestazioni, poiché una regressione importante delle prestazioni è un'altra possibile modalità di errore.

    
risposta data 29.05.2012 - 21:16
fonte
4

Anche se non puoi confrontare le immagini di output, almeno sarai in grado di verificare che i tuoi rendering siano completati in modo appropriato (nessun arresto anomalo, lunghe attese, ecc. ecc.). Trovare un modo per controllare le immagini è migliore, ovviamente, ma anche senza di esso avrai ottenuto qualcosa dai test.

    
risposta data 29.05.2012 - 21:36
fonte

Leggi altre domande sui tag