OpenGL için grafik kodunda en etkili otomatik testi nasıl birim olarak test ederdiniz?


17

C ++ ile OpenGL üzerine bir oyun ve beraberindeki grafik motoru yazıyorum. Ben de iyi kodlama süreçleri ve otomatik test hayranıyım. Grafik kodu + testi oldukça çıktı gibi görünüyor, çünkü çıktı genellikle sadece görsel veya çok görsel olarak odaklı.

Örneğin, ekran bayt byte baytına işlenen ham görüntü akışını analiz ettiğinizi hayal edin - karşılaştırmak için test verilerine ihtiyacınız vardır, bu da oluşturulması / elde edilmesi zordur ve genellikle oluşturulan görüntüler bir Farklı zamanlarda çalışırken bayt seviyesi - algoritmalardaki küçük değişiklikler bu yaklaşımı tamamen mahvedecektir.

Temelde farklı test sahneleri oluşturabildiğim, gölge haritalama, animasyon vb. Gibi şeyler gösteren görsel bir birim-test paketi oluşturmayı düşünüyorum. dosyasını farklı metriklerle (veya yürütülebilir olarak bırakabilirsiniz). Bu yine de video dosyasının manuel olarak incelenmesini gerektirir, ancak en azından biraz otomatik ve standart hale getirilir.

Ne düşünüyorsun? Umarım daha iyi yollar vardır?


2
Bu iyi bir soru, gamedev.stackexchange.com'da daha iyi cevaplar alıp alamayacağınızı merak ediyorum, çünkü daha önce bu konuda daha fazla insan var.
SinirliWithFormsDesigner

3
OpenGL kullandığınız için, Khronos grubunun bu API için uygunluk testini nasıl gerçekleştirdiğini incelemeyi düşünün . Eski projemle ilgilenen meslektaşlarım bana Khronos grafik testinin olabildiğince mükemmel olduğunu söyledi
gnat

@FrustratedWithFormsDesigner Teşekkürler, gamedev.stackexchange'i tamamen unuttum ... Programcıları çok iyi araştırdım, ama o değil. Buradaki birim testlere verilen cevapların çoğu, genellikle test edilen şeylere odaklanıyor gibi görünüyor, bu yüzden belki de bu bir kopya değil. Yine de biraz daha kontrol edecek, teşekkürler :)
Max

Yanıtlar:


8

Opencv görüntü işleme kütüphanesi, görüntüyü kaydedip referans görüntü ile karşılaştırarak yapar - yaklaşık görüntü eşleşmesi vb.İçin bir grup c ++ test fonksiyonu ve makroya sahiptir.


Kendim daha ayrıntılı bir şekilde kontrol etmeye çalışacağım, ancak bu sayfa yaklaşık resim eşleşmesi hakkında bir şey söylemiyor. Çerçevelerin karşılaştırılması durumunda regresyon testi için işe yarayıp yaramayacağını biliyor musunuz? Sonra bir sahne ilk kez görsel olarak inceleyebilir, bunu bir referans olarak not edebilirim. OpenCV'de kullanabileceğim hazır fonksiyonlar var mı? : p
Max

@max genellikle referans çerçevesini oluşturan ve test oluşturulurken bir kez çalıştırılan test fonksiyonunun 'altın' bir versiyonu vardır. Dağıtımda birkaç "test görüntüsü karşılaştır" makrosu vardır. Bir görüntüye openGL arabelleklerini okumak için özel bir şey olduğunu sanmıyorum ama bu yeterince kolay
Martin Beckett 29:12

4

Test çerçeveniz test görüntüsünü bir arabellek haline getirebilir, işlenen görüntüyü alabilir ve daha önce bu amaç için oluşturulmuş bir "altın" referans görüntü ile karşılaştırabilir.

Bu, test sonuçlarınızın tamamen aynı kalması beklenmeyen durumlarda da işe yaramayacaktır . Bununla birlikte, test ve referans görüntülerinin kare farkını hesaplayabilir ve bir eşikle karşılaştırabilirsiniz.

Performanstaki büyük bir gerileme başka bir olası hata modu olduğundan, performans verilerini günlüğe kaydetme ve kontrol etme de sağlamak isteyebilirsiniz.


4

Çıktı görüntülerini karşılaştıramasanız bile, en azından render'larınızın uygun şekilde tamamlandığını test edebileceksiniz (çökme, uzun bekleme, vb.). Görüntüleri kontrol etmenin bir yolunu bulmak elbette daha iyidir, ancak onsuz bile testlerden bir şey kazanmış olacaksınız.


2
Tam olarak: Benzer bir şeyi cevaplamak üzereydim ("Video dosyasını körü körüne üreten ve önemsiz testler yapan bir birim testiniz olsa bile (örneğin, doğru uzunlukta, tamamen siyah değil, tamamen beyaz değil), yeterli olabilir Özellikle işlevlerinizin bir istisna atmasına neden olanlar.
user281377
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.