Ich schreibe ein Spiel und die dazugehörige Grafik-Engine auf OpenGL in C ++. Ich bin auch ein Fan von guten Codierungsprozessen und automatisierten Tests. Grafikcode + Testen scheint ziemlich nicht mischbar zu sein, da die Ausgabe oft nur visuell oder sehr stark visuell orientiert ist.
Stellen Sie sich zum Beispiel vor, Sie analysieren den rohen Bildstrom, der Byte für Byte auf dem Bildschirm gerendert wird. Sie benötigen Testdaten zum Vergleichen, die schwer zu erstellen / zu erhalten sind, und oft sind die gerenderten Bilder auf einem nicht identisch Byte-Ebene, wenn zu verschiedenen Zeiten ausgeführt - kleine Änderungen in den Algorithmen werden diesen Ansatz vollständig zunichte machen.
Ich denke darüber nach, eine visuelle Unit-Testsuite zu erstellen, in der ich im Grunde genommen verschiedene Testszenen rendern und Dinge wie Shadow Mapping, Animation usw. usw. zeigen kann. Im Rahmen von CI würden diese Szenen dann zu einem Video gerendert Datei (oder möglicherweise als ausführbare Datei belassen) mit unterschiedlichen Metriken. Dies würde immer noch eine manuelle Überprüfung der Videodatei erfordern, aber zumindest würde dies etwas automatisiert und standardisiert sein.
Was denkst du? Ich hoffe, es gibt bessere Wege?
Antworten:
Die opencv-Bildbearbeitungsbibliothek speichert das Bild und vergleicht es mit einem Referenzbild. Sie verfügt über eine Reihe von c ++ - Testfunktionen und Makros für die ungefähre Bildanpassung usw.
quelle
Ihr Testframework kann das Testbild in einen Puffer rendern, das gerenderte Bild abrufen und es mit einem "goldenen" Referenzbild vergleichen, das zuvor für diesen Zweck generiert wurde.
Dies funktioniert auch nicht in Fällen, in denen nicht erwartet wird, dass die Ergebnisse Ihres Tests exakt gleich bleiben . Sie können jedoch die quadratische Differenz der Test- und Referenzbilder berechnen und mit einem Schwellenwert vergleichen.
Möglicherweise möchten Sie auch die Protokollierung und Überprüfung von Leistungsdaten bereitstellen, da ein starker Leistungsrückgang ein weiterer möglicher Fehlermodus ist.
quelle
Auch wenn Sie die Ausgabebilder nicht vergleichen können, können Sie zumindest testen, ob Ihre Rendervorgänge ordnungsgemäß ausgeführt wurden (keine Abstürze, lange Wartezeiten usw. usw.). Es ist natürlich besser, einen Weg zu finden, um die Bilder zu überprüfen, aber auch ohne diesen Weg haben Sie durch die Tests etwas gewonnen.
quelle