Piszę grę i towarzyszący jej silnik graficzny na OpenGL w C ++. Jestem także fanem dobrych procesów kodowania i automatycznych testów. Testowanie kodu graficznego + wydaje się dość niemieszalne, ponieważ dane wyjściowe są często tylko wizualne lub bardzo mocno zorientowane wizualnie.
Na przykład wyobraź sobie analizę surowego strumienia obrazu renderowanego bajt po bajcie - potrzebujesz danych testowych do porównania, które są trudne do utworzenia / uzyskania, a często renderowane obrazy nie są identyczne poziom bajtów podczas uruchamiania w różnych momentach - niewielkie zmiany w algorytmach całkowicie zniszczą to podejście.
Zastanawiam się nad stworzeniem wizualnego pakietu testów jednostkowych, w którym mogę w zasadzie renderować różne sceny testowe, pokazując takie rzeczy jak mapowanie cieni, animacje itp. Itp. W ramach CI te sceny byłyby następnie renderowane do wideo plik (lub ewentualnie pozostaw go jako plik wykonywalny) z różnymi wskaźnikami. Wciąż wymagałoby to ręcznej kontroli pliku wideo, ale przynajmniej byłby nieco zautomatyzowany i znormalizowany.
Co myślisz? Mam nadzieję, że są lepsze sposoby?
Odpowiedzi:
Biblioteka przetwarzania obrazu opencv robi to, zapisując obraz i porównując go z obrazem referencyjnym - ma kilka funkcji testowych c ++ i makr do obsługi przybliżonego dopasowania obrazu itp.
źródło
Struktura testowa może renderować obraz testowy w buforze, pobierać renderowany obraz i porównywać go ze „złotym” obrazem referencyjnym, który został wcześniej wygenerowany w tym celu.
To nie zadziała tak dobrze w przypadkach, w których nie oczekuje się, że wyniki testu pozostaną dokładnie takie same. Można jednak obliczyć kwadratową różnicę między obrazem testowym i referencyjnym oraz porównać go z wartością progową.
Możesz także chcieć zapewnić rejestrowanie i sprawdzanie danych dotyczących wydajności, ponieważ głównym regresem wydajności jest inny możliwy tryb awarii.
źródło
Nawet jeśli nie możesz porównać obrazów wyjściowych, przynajmniej będziesz w stanie przetestować, czy Twoje rendery są odpowiednio ukończone (bez awarii, długich oczekiwań itp.). Znalezienie sposobu na sprawdzenie obrazów jest oczywiście lepsze, ale nawet bez niego zyskasz coś z testów.
źródło