Як би ви провели блок-тест або виконали найефективніше автоматизоване тестування графічного коду для OpenGL?


17

Я пишу гру та супровідний графічний движок на версії OpenGL в C ++. Я також прихильник хороших процесів кодування та автоматизованого тестування. Графічний код + тестування здається досить непомітним, оскільки вихід часто є лише візуальним чи дуже зорово орієнтованим.

Наприклад, уявіть собі аналіз сирого потоку зображень, що відображається на екрані байт за байтом - для порівняння потрібні тестові дані, які важко створити / отримати, і часто виведені зображення не однакові на рівень байтів при запуску в різний час - невеликі зміни в алгоритмах повністю зруйнують цей підхід.

Я маю намір створити візуальний набір тестових одиниць, в якому я в основному можу відображати різні тестові сцени, демонструючи такі речі, як тіньове картографування, анімація, тощо, тощо. файл (або можливо залишити його як виконуваний файл) з різними показниками. Це все ще потребує ручного огляду відеофайлу, але принаймні воно буде дещо автоматизованим та стандартизованим.

Що ти думаєш? Я сподіваюся, що є кращі способи?


2
Це гарне запитання, мені цікаво, чи ви отримаєте кращі відповіді на сайті gamedev.stackexchange.com, оскільки там може бути більше людей, які мали справу з цим.
FrustratedWithFormsDesigner

3
Оскільки ви використовуєте OpenGL, подумайте про те, як група Khronos проводить тестування відповідності цього API. Колеги в моєму колишньому проекті, який займався цим, сказали мені, що тестування графіки Хронос наближається до ідеального, ніж це виходить
gnat

@FrustratedWithFormsDesigner Спасибі, я зовсім забув про gamedev.stackexchange ... Я дуже ретельно шукав програмістів, але не той. Здається, більшість відповідей на тестування одиниць там зосереджена на звичайно тестованих матеріалах, тому, можливо, це не дублікат. Хочу ще раз перевірити, дякую :)
Макс

Відповіді:


8

Бібліотека обробки зображень opencv робить це, зберігаючи зображення та порівнюючи його з еталонним зображенням - у ньому є маса тестових функцій c ++ та макросів для обробки приблизного відповідності зображення тощо.


Я спробую перевірити це більш глибоко, але ця сторінка нічого не говорить про приблизну відповідність зображення. Чи знаєте ви, чи спрацьовувало б тестування регресії у випадку порівняння кадрів? Тоді я міг візуально оглянути перший випадок сцени, відзначити це як посилання тощо. Чи є у OpenCV готові функції для цього, які я міг би використовувати? : p
Макс

@max зазвичай існує "золота" версія тестової функції, яка генерує контрольний кадр і запускається один раз під час створення тесту. У дистрибутиві є кілька макросів "тестового зображення порівняння". Я не думаю, що є щось специфічне для того, щоб читати буфери openGL до зображення, але це досить просто
Мартін Бекет

4

Ваш тестовий фреймворк може перетворити його тестове зображення в буфер, отримати виведене зображення та порівняти його із «золотим» еталонним зображенням, яке було попередньо створено для цієї мети.

Це не спрацює також у випадках, коли не очікується, що результати вашого тесту залишаться точно однаковими. Однак ви можете обчислити різницю тесту та еталонних зображень у квадраті та порівняти її з порогом.

Ви можете також забезпечити ведення журналів та перевірку даних про ефективність, оскільки великий регрес продуктивності - це ще один можливий режим відмов.


4

Навіть якщо ви не можете порівняти вихідні зображення, принаймні ви зможете перевірити, чи відображаються ваші рендери належним чином (відсутність збоїв, тривалих очікувань тощо, тощо). Звичайно, краще знайти спосіб перевірити зображення, але навіть без цього ви щось отримали з тестів.


2
Точно так: я збирався відповісти на щось подібне ("Навіть якщо у вас є одиничний тест, який просто наосліп генерує відеофайл і робить деякі тривіальні тести (наприклад, має правильну довжину, не зовсім чорний, не зовсім білий), це може бути достатньо щоб виявити багато помилок регресії. Особливо тих, які просто спричиняють ваші функції кинути виняток ".
користувач281377
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.