मैं यूनिट रेंडरिंग आउटपुट का परीक्षण कैसे कर सकता हूं?


19

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

मैं एक ठोस उदाहरण के साथ शुरू करूँगा ताकि हम जान सकें कि मैं किस प्रकार की चीजों का परीक्षण करना चाहता हूं; मैं कहता हूं कि मैं एक इकाई घन बनाना चाहता हूं जो कुछ अक्ष के बारे में घूमता है, और मैं यह सुनिश्चित करना चाहता हूं कि, कुछ संख्या में फ्रेम के लिए, प्रत्येक फ्रेम सही तरीके से प्रस्तुत किया गया है।

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

इस के लिए केवल दूर से उपयोगी दृष्टिकोण है कि मैं एक संदर्भ उत्पादन के लिए गाया आउटपुट की तुलना करना शामिल है, जो आम तौर पर TDD अभ्यास को रोकता है, और बहुत बोझिल है।

मैं अन्य वांछित आवश्यकताओं के बारे में जा सकता था, लेकिन मुझे डर है कि मैंने पहले से ही सूचीबद्ध लोगों को पहुंच से बाहर कर दिया है।


3
यहाँ पूरी समस्या यह है कि आपके परीक्षण का मामला एक अच्छे आउटपुट से निर्धारित होता है; लेकिन क्या होता है अगर वह उत्पादन छोटी गाड़ी (झूठी सकारात्मक) है? किसी भी तरह से मैं पहले वायरफ्रेम की जांच करके शुरू करूंगा; फिर आगे-आगे के दृश्य पर जाएं और अंत में आस्थगित करें (यदि आप इसका उपयोग करते हैं)। आप एक त्वरित तुलना (पूरी तरह से काले पास) बनाने के लिए पूरी छवि को XOR कर सकते हैं। टीडीडी लागू करने के लिए जीपीयू वास्तव में एक बुरा क्षेत्र है; लेकिन अगर आप कुछ भी समझदारी से पेश आएं तो मुझे जानना अच्छा लगेगा।
जोनाथन डिकिंसन

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


@ अदम धन्यवाद कि साझा करने के लिए। दुर्भाग्य से, यह मोबाइल गेम पर काम करने वाले मेरे जैसे इंडी के लिए पहुंच से बाहर है :) यह मेरी बुनियादी आवश्यकताओं में से अधिकांश को भी विफल करता है।
22

@ अदम आपको निश्चित रूप से उस लिंक का 'जवाब' देना चाहिए। काफी उपन्यास।
जोनाथन डिकिंसन

जवाबों:


8

ऐसा लगता है कि एप्रूवल टेस्ट फ्रेमवर्क का अच्छा अनुप्रयोग है या ऐसा कुछ है।

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

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


यह एक दिलचस्प उपकरण है। यदि आपने ऊपर दिए गए टिप्पणियों में एडम के लिंक में परीक्षण फार्म की तरह कुछ लिया है, और इस तरह एक एकीकृत अनुमोदन तंत्र लागू किया है, तो आप शायद कुछ ऐसा करना शुरू कर देंगे जो बहुत कम ओवरहेड है। साझा करने के लिए धन्यवाद!
शाम

अनुमोदन परीक्षण स्वचालित परीक्षण नहीं है।
zwcloud

@zwcloud: तुम्हारा क्या मतलब है? यह किसी भी परीक्षण की तरह, एक बार यह स्वचालित हो जाता है। यह सिर्फ इतना है कि पहली मंजूरी संलेखन प्रक्रिया का हिस्सा है।
जॉन गीटजेन

@ जॉनगेजेन मैं आपके उत्तर से यह समझने में असफल रहा। मुझे लगता है कि आपको स्वीकृति परीक्षणों के विचार को अधिक स्पष्ट रूप से स्पष्ट करना चाहिए । जवाब अपडेट होने पर मैं डाउनवॉट हटा दूंगा।
zwcloud

6

मैं खेल व्यवसाय में नहीं हूं, इसलिए कृपया किसी भी संभावित बेवकूफ और भोली धारणा को सहन करें

मेरे लिए, पूरी तरह से प्रदान की गई छवियों की तुलना करने वाले परीक्षण लिखना वास्तव में इकाई परीक्षण नहीं हैं , लेकिन पूर्ण एकीकरण परीक्षण हैं, क्योंकि एक सफल परीक्षण चलाने के लिए सब कुछ ठीक काम करना पड़ता है।

एक मध्यवर्ती परत के बारे में क्या है जहां आप जांच सकते हैं कि सब कुछ ठीक है? मेरे दिमाग में दो बातें आती हैं:

  1. सीधे ड्रा न करें, लेकिन एक कमांड स्ट्रीम जारी करें जो रेंडरिंग कॉल में बदल जाती है। कमांड स्ट्रीम को शुद्धता के लिए जांचा जा सकता है। यह एंड-टू-एंड टेस्ट नहीं है, लेकिन आप इकाई परीक्षण चाहते हैं , पूर्ण एकीकरण परीक्षण नहीं।

  2. यह वास्तव में 1 पर भिन्नता है। ओपन ओपन लपेटें, इसके लिए सभी कॉल को पकड़ें, इसे नीचे स्ट्रिप करें जिसे आप वास्तव में परीक्षण करना चाहते हैं, और जांचें कि क्या आउटपुट अभी भी मेल खाता है। ओपनजीएल रैपर ठीक से कॉन्फ़िगर होने पर चेक खुद कर सकता है, और मॉक में बदल सकता है ।


3

समस्या यह है कि 3D इंजन के लिए एक सटीक छवि बिट-फॉर-बिट आउटपुट करने की आवश्यकता नहीं है। कुछ लेवे को तब तक सहन किया जाता है जब तक कि इसके कारण होने वाली कलाकृतियाँ दर्शक को दिखाई न दें। आम तौर पर उम्मीद की तुलना में 1% गहरा होना एक आम समस्या नहीं है ... आमतौर पर। कुछ स्थितियों में यह एक दृश्य कलाकृति हो सकती है। और यह समस्या है: एक स्वचालित परीक्षण के लिए न्याय करना मुश्किल है जो एक मानव दर्शक द्वारा कलाकृतियों पर ध्यान दिया जाएगा और जो नहीं हैं। फिर भी, बहुत सरल ज्यामिति पर उपयोग किए जाने पर स्वचालित परीक्षण का उपयोग सरल विवेक जांच के लिए किया जा सकता है।

आप जो कर सकते थे वह कुछ सरल दृश्यों को प्रस्तुत करता है और फिर उत्पन्न छवि की तुलना एक संदर्भ प्रतिपादन के साथ करता है। वह संदर्भ प्रतिपादन या तो किसी अन्य ग्राफिक इंजन से आ सकता है या उसी इंजन (प्रतिगमन परीक्षण) से पहले का स्क्रीनशॉट हो सकता है।

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

एक और चीज़ जो आप स्वचालित रूप से जाँच सकते हैं, वह है प्रदर्शन आवश्यकताएं। ऐसी एक आवश्यकता यह हो सकती है कि सेल्फ-रनिंग डेमो (गेम से वास्तविक अनुक्रम का अनुकरण) के दौरान फ्रेम-रेट टेस्ट सिस्टम पर 40 एफपीएस से नीचे न जाए। यह कुछ ऐसा है जिसे आप स्वचालित रूप से जांच सकते हैं। आप जो परीक्षण नहीं कर सकते, वह यह है कि प्रतिपादन संतोषजनक है। लेकिन आप अपने डेवलपर्स को ऐसा गेम विकसित करने से रोकने के लिए ऐसे परीक्षणों का उपयोग कर सकते हैं जो शानदार लग रहा है, लेकिन लॉन्च (हैलो क्रायटेक) के वर्षों बाद तक किसी भी सस्ती प्रणाली पर ठीक से नहीं चलता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.