यूनिट टेस्टिंग एक C # / XNA गेम प्रोजेक्ट


13

मैंने प्रोग्रामिंग शुरू करने के बाद से खेल के विकास में सक्षम किया है, लेकिन कभी भी बहुत गंभीरता से नहीं। मैं एक व्यवसाय ऐप डेवलपर के रूप में काम करता हूं, लेकिन मैं अपने खाली समय में कुछ गेम पर काम कर रहा हूं।

व्यावसायिक दुनिया में (माइक्रोसॉफ़्ट वेब-देव स्टैक पर) ASP.NET MVC वास्तव में लोकप्रिय हो रहा है, क्योंकि इसकी यूनिट-टेस्टिंग में इंटरफ़ेस के काम करने के तरीके में आसानी होती है।

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

नमूना कोड बहुत अच्छा होगा, लेकिन एक राइटअप भी उपयोगी है।

(मैंने एक इकाई-परीक्षण टैग जोड़ने की कोशिश की, लेकिन आवश्यक प्रतिनिधि नहीं है ...)

जवाबों:


17

यहाँ एक अच्छा लेख है जो मैंने पाया कि कार्यक्षमता को अलग करने के लिए एक वास्तुकला का वर्णन करता है ताकि यह न केवल आसानी से पुन: प्रयोज्य हो सके, बल्कि इकाई-परीक्षण के लिए संभवतः बहुत आसान हो:

http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

कुछ गेम MVC जैसे पैटर्न से लाभान्वित होंगे। शतरंज और ताश के खेल जैसे बोर्ड गेम दिमाग में आते हैं। ज्यादातर मामलों में, हालांकि, यह बड़े पैमाने पर ओवरकिल है।

व्यक्तिगत रूप से मुझे लगता है कि यह केवल यूनिट-टेस्ट चीजों के लिए पर्याप्त है जो प्रकृति में एल्गोरिदम हैं। जब आप गेमप्ले कोड लिख रहे हैं, तो आप "बस काम" पर निर्भर होंगे, और अगर आप ऐसा नहीं करते हैं, तो समस्याओं को ट्रैक करने में मुश्किल से मुश्किल हो सकता है। चौराहे परीक्षण या नेटवर्किंग कोड जैसी चीजें।

(चीजें जो आदर्श रूप से एक 3 पार्टी ढांचे में बनाई जाएंगी ताकि आपको उन्हें लिखना या परीक्षण न करना पड़े!)

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


अच्छा उत्तर। मैं भी उस लेख को बिल्कुल पोस्ट करना चाहता था। गेम ऑब्जेक्ट कंपोनेंट सिस्टम लॉजिक को अलग करने और इनको व्यक्तिगत रूप से यूनिट-टेस्ट करने में सक्षम होने का एक शानदार तरीका है। हालांकि, कोई भी इकाई परीक्षण नहीं कर सकता है, लेकिन यादृच्छिक क्रम में रीयलटाइम पर इंटरेक्ट करने वाले गेम लॉजिक के कई रास्तों की जटिल अंतःक्रियाएँ हैं। यह मौसम के पूर्वानुमान का परीक्षण करने की कोशिश करने जैसा होगा। :)
LearnCocos2D

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

3
हां, अच्छा जवाब है, और मुझे लिंक पसंद है। और मैं अंतिम पंक्ति तक सब कुछ से सहमत था, "किसी ने नहीं कहा कि इकाई परीक्षणों को स्वचालित किया जाना है"। :) Have के लिए, हो सकता है नहीं है - लेकिन सब कुछ मैंने पढ़ा तात्पर्य (या एकमुश्त कहते हैं) है कि इकाई परीक्षण करना चाहिए स्वचालित किया जा बिंदु है जहां आप केवल एक ही बटन पुश अपने परीक्षण के सभी चलाने के लिए करने के लिए,। अन्यथा, परीक्षण चलाने में जितना अधिक कार्य शामिल है, उतनी ही कम संभावना है कि आप उन्हें अक्सर चलाएं। यदि आप प्रदर्शन कोड के बारे में बात कर रहे हैं, तो यह इकाई-परीक्षण के लिए बहुत कठिन हो सकता है, यदि संभव हो तो।
साइक्लॉप्स

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

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