आप OpenGL के लिए ग्राफिक्स कोड पर यूनिट-परीक्षण या सबसे प्रभावी स्वचालित परीक्षण कैसे करेंगे?


17

मैं C ++ में OpenGL के शीर्ष पर एक गेम और साथ वाले ग्राफिक्स इंजन लिख रहा हूं। Im अच्छी कोडिंग प्रक्रियाओं और स्वचालित परीक्षण का प्रशंसक भी है। ग्राफिक्स कोड + परीक्षण बहुत ही विसंगत लगता है, क्योंकि आउटपुट अक्सर दृश्य केवल या बहुत भारी दृश्य-उन्मुख होता है।

उदाहरण के लिए, स्क्रीन बाइट-बाइट को प्रदान की गई कच्ची छवि-धारा का विश्लेषण करने की कल्पना करें - आपको इसकी तुलना करने के लिए परीक्षण-डेटा की आवश्यकता है, जो बनाना / प्राप्त करना कठिन है, और अक्सर प्रदान की गई छवियां एक समान नहीं होती हैं अलग-अलग समय पर चलने पर बाइट स्तर - एल्गोरिदम में छोटे बदलाव इस दृष्टिकोण को पूरी तरह से खत्म कर देंगे।

मैं एक विज़ुअल यूनिट-टेस्ट सूट बनाने की सोच रहा हूं, जिसमें मैं मूल रूप से अलग-अलग टेस्ट-सीन्स को प्रस्तुत कर सकता हूं, जिसमें छाया मानचित्रण, एनीमेशन, इत्यादि जैसे सामान दिखाई दे रहे हैं। सीआई के हिस्से के रूप में, इन दृश्यों को फिर एक वीडियो में प्रस्तुत किया जाएगा। फ़ाइल (या संभवतः इसे एक निष्पादन योग्य के रूप में छोड़ दें) विभिन्न मैट्रिक्स के साथ। इसके लिए अभी भी वीडियो फ़ाइल के मैनुअल निरीक्षण की आवश्यकता होगी, लेकिन कम से कम यह कुछ हद तक स्वचालित और मानकीकृत होगा।

तुम क्या सोचते हो? मुझे उम्मीद है कि वहाँ बेहतर तरीके हैं?


2
यह एक अच्छा सवाल है, मैं सोच रहा हूं कि क्या आपको gamedev.stackexchange.com पर बेहतर जवाब मिलेगा क्योंकि इससे पहले और भी ऐसे लोग हो सकते हैं जिन्होंने इससे निपटा हो।
FrustratedWithFormsDesigner

3
चूंकि आप ओपनजीएल का उपयोग करते हैं, इस तरह से अध्ययन करने पर विचार करें कि ख़ारोस समूह इस एपीआई के लिए अनुरूपता परीक्षण कैसे करता है। अपने पूर्व परियोजना है जो इसे से निपटा में साथियों ने मुझे बताया परीक्षण Khronos ग्राफिक्स पास के रूप में के रूप में यह हो जाता है पूर्ण करने के लिए है कि
कुटकी

@FrustratedWithFormsDesigner धन्यवाद, मैं पूरी तरह से gamedev.stackexchange के बारे में भूल गया ... मैंने प्रोग्रामर को बहुत अच्छी तरह से खोजा, लेकिन वह नहीं। ऐसा लगता है कि यूनिट परीक्षण पर अधिकांश उत्तर आमतौर पर परीक्षण किए गए सामान पर केंद्रित होते हैं, इसलिए शायद यह कोई डुप्लिकेट नहीं है। हालांकि कुछ और जाँच करेंगे, धन्यवाद :)
अधिकतम

जवाबों:


8

Opencv इमेज प्रोसेसिंग लाइब्रेरी इसे इमेज को सेव करके और रेफरेंस इमेज से तुलना करके बनाती है - इसमें अनुमानित इमेज मैचिंग आदि को संभालने के लिए c ++ टेस्ट फंक्शन और मैक्रोज़ का एक गुच्छा है ।


मैं इसे और गहराई से जाँचने की कोशिश करूँगा, लेकिन यह पेज अनुमानित छवि मिलान के बारे में कुछ नहीं कहता है। क्या आप जानते हैं कि यह फ्रेम की तुलना के मामले में प्रतिगमन परीक्षण के लिए काम करेगा? फिर मैं पहली बार किसी दृश्य के प्रस्तुत होने का नेत्रहीन निरीक्षण कर सकता था, इसे एक संदर्भ के रूप में नोट करें। क्या OpenCV के पास इसके लिए तैयार कार्य हैं जिनका मैं उपयोग कर सकता हूं? : पी
मैक्स

@ आम तौर पर परीक्षण फ़ंक्शन का एक 'गोल्ड' संस्करण होता है जो संदर्भ फ्रेम उत्पन्न करता है और परीक्षण बनाते समय एक बार चलाया जाता है। वितरण में कुछ "परीक्षण छवि तुलना" मैक्रोज़ हैं। मुझे नहीं लगता कि किसी ओपन ओपन बफ़र को एक छवि में पढ़ने के लिए कुछ विशिष्ट है लेकिन यह काफी आसान है
मार्टिन बेकेट

4

आपका परीक्षण ढांचा अपनी परीक्षण छवि को एक बफर में प्रस्तुत कर सकता है, प्रदान की गई छवि को पुनः प्राप्त कर सकता है, और इसकी तुलना "सुनहरी" संदर्भ छवि से कर सकता है, जो उस उद्देश्य के लिए पहले उत्पन्न की गई है।

यह उन मामलों के लिए भी काम नहीं करेगा जिनमें आपके परीक्षण के परिणाम बिल्कुल समान रहने की उम्मीद नहीं है । हालाँकि, आप परीक्षण और संदर्भ छवियों के वर्ग अंतर की गणना कर सकते हैं, और इसे एक सीमा के खिलाफ तुलना कर सकते हैं।

आप प्रदर्शन डेटा लॉगिंग और जाँच के लिए प्रदान करना चाह सकते हैं, क्योंकि प्रदर्शन में एक प्रमुख प्रतिगमन एक अन्य संभावित विफलता मोड है।


4

यहां तक ​​कि अगर आप आउटपुट छवियों की तुलना नहीं कर सकते हैं, तो कम से कम आप यह परीक्षण करने में सक्षम होंगे कि आपके रेंडर पूरी तरह से (कोई क्रैश, लंबे इंतजार, आदि, आदि) पूरा नहीं करते हैं। छवियों की जांच करने का एक तरीका खोजना बेहतर है, निश्चित रूप से, लेकिन इसके बिना भी आपको परीक्षणों से कुछ प्राप्त होगा।


2
सटीक रूप से: मैं कुछ इसी तरह का जवाब देने वाला था ("भले ही आपके पास एक इकाई परीक्षण है जो सिर्फ आँख बंद करके वीडियो फ़ाइल उत्पन्न करता है और कुछ तुच्छ परीक्षण करता है (जैसे सही लंबाई है, पूरी तरह से काला नहीं, पूरी तरह से सफेद नहीं), यह पर्याप्त हो सकता है कई प्रतिगमन त्रुटियों को पकड़ने के लिए। विशेष रूप से वे जो केवल आपके कार्यों को एक अपवाद फेंकने का कारण बनते हैं। ") लेकिन एक दूसरे समान उत्तर की आवश्यकता नहीं है, इसलिए मैं इसे सिर्फ एक टिप्पणी के रूप में यहां छोड़ देता हूं।
user281377
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.