क्या खेलों के स्वचालित परीक्षण के तरीके हैं?
विशिष्ट अनुभवों की सराहना की जाती है, परियोजना के बारे में प्रासंगिक जानकारी जैसे कि मंच और खेल के प्रकार यदि स्पष्टीकरण के साथ मदद मिलती है।
क्या खेलों के स्वचालित परीक्षण के तरीके हैं?
विशिष्ट अनुभवों की सराहना की जाती है, परियोजना के बारे में प्रासंगिक जानकारी जैसे कि मंच और खेल के प्रकार यदि स्पष्टीकरण के साथ मदद मिलती है।
जवाबों:
एक व्यक्ति स्वतंत्र खेल। यह विनाशकारी इलाके के साथ एक मल्टीप्लेयर टैंक गेम था, और विनाशकारी इलाके और टक्कर कोड कुछ परतदार साबित हुए।
मैंने कुछ बुनियादी गूंगा एआई ("गूंगा") के साथ हेराफेरी की, मेरा मतलब है "बिल्कुल बेवकूफ" - वे बेतरतीब ढंग से "दुश्मन टैंक की ओर ड्राइव", "दुश्मन टैंक से दूर ड्राइव" और "यादृच्छिक तरीके से ड्राइव" का चयन करेंगे। ", जबकि मुख्य हथियार को बेतरतीब ढंग से फायर करते हुए) और कीप रिकॉर्डिंग करते समय अधिकतम फ्रैमरेट में गेम खेलते हैं। मुझे लगभग 10-15 गुना रियलटाइम मिला। कोड का भारी उपयोग किया गया था, इसलिए यदि कुछ भी गलत हुआ, तो यह त्रुटि रिपोर्ट और प्रारंभिक यादृच्छिक बीज के साथ डिस्क पर पूरे कीप लॉग को डंप कर देगा। मैं तब जाकर केप्ले लॉग को ठीक से स्टेट डुप्लिकेट करने के लिए जा सकता था या त्रुटि रिपोर्ट से डिबग कर सकता था।
मैंने इसे सचमुच महीनों तक लगातार चलाना छोड़ दिया। शुरुआत में यह दुर्घटनाग्रस्त होने के बिना शायद ही एक घंटे का समय मिलेगा - मुझे वहां बैठना पड़ा और इसे एक सप्ताह के लिए दाई करना पड़ा, जिससे प्रति दिन कई अस्पष्ट कीड़े मारे गए। आखिरकार यह उस बिंदु पर पहुंच गया, जहां यह विफलताओं के बीच एक सप्ताह से चल रहा था, जो प्रति दुर्घटना लगभग 1500 खिलाड़ी घंटे का अनुवाद करता है।
यह अमूल्य था और मैं इसे दिल से सुझाता हूं।
एक MMO के लिए मैंने (100ish डेवलपर्स, पीसी केंद्रित) पर काम किया, हमने अलग-अलग सफलता के साथ स्वचालित परीक्षण की एक विशाल विविधता को जोड़ने की कोशिश की। यहाँ क्या काम किया है:
क्या काम नहीं किया:
3 डी से मुकाबला के साथ एक 4x रणनीति के खेल पर काम करना (लगता है कि होमवर्ल्ड मास्टर्स ऑफ ओरियन से मिलता है) कि दुर्भाग्य से कभी दिन की रोशनी नहीं देखी गई क्योंकि कंपनी फंडिंग से बाहर भाग गई थी।
मैंने हमेशा सुनिश्चित किया कि आप मानवीय खिलाड़ियों के बिना खेल खेल सकते हैं ताकि हम रात भर खेल छोड़ सकें।
हम 3 डी का मुकाबला बंद कर सकते हैं (एक यादृच्छिक परिणाम के लिए सरलीकृत) और हमने एआई रणनीति के इंजन को खुद ही खेलना छोड़ दिया। इसमें कई बग और मुद्दे पाए गए। न केवल स्टॉपर कीड़े दिखाते हैं, बल्कि रणनीति कीड़े जहां (जैसे) एआई रणनीतियों का गतिरोध हो जाएगा और "सही" नहीं करने के लिए विभिन्न प्रकार के खर्च होंगे। इस तरह के कीड़े को केवल "गेम खेलने" के लिए स्पॉट करना मुश्किल था।
पहले व्यक्ति शूटर पर मैंने काम किया (डिसेंट 3 - लिनक्स / मैक / विंडो, ~ 1999 में टीम पर 30 लोग), डेमो रिकॉर्डिंग / प्लेबैक क्षमता बेहद उपयोगी निकली। मैंने एक विकल्प बनाया, जहां आप डेमो को तेजी से प्लेबैक कर सकते थे क्योंकि खेल फ्रेम प्रदान कर सकता था, और चीजों के एक गुच्छा के बाद प्रदर्शन को सत्यापित करने का एक शानदार तरीका बन गया।
यह भी प्रतिपादन प्रणाली से परे कोड का एक बहुत प्रयोग किया, तो यह एक अच्छा पवित्रता की जाँच थी। परिवर्तनों का एक गुच्छा बनाने के बाद मैं सिर्फ 10 मिनट के गेमप्ले का डेमो प्लेबैक चला सकता था। कई बार यह एक ऐसे क्षेत्र में एक बग को पकड़ लेगा जिसे मैंने खुद जांचने के लिए नहीं सोचा होगा।
हमारे पास एक ओपनवर्ल्ड शूटर (x360, PS3, पीसी) था जो बिल्ड सर्वर पर एक त्वरित स्मोकेस्ट का उपयोग करता था - यह गेम लोड करता था, सामने के छोर के माध्यम से आगे बढ़ता था, [अवतार] फॉरवर्ड, एक स्क्रीनशॉट को डंप करता था, और बाहर निकलता था। अगर cctray ने पाया कि स्वच्छ निकास निर्माण एक सफलता थी।
हमने इसे परियोजना के अंतिम वर्ष के लिए चलाया, और ~ 100 devs की टीम के आकार के साथ।
यह शोस्टॉपिंग बग्स को पकड़ने में प्रभावी था, लेकिन एक ऐसा निर्माण करना आसान था जो स्मोकेटेस्ट को पारित कर दे, लेकिन अधिकांश "वास्तविक" स्तरों में विफल रहा, या मल्टीप्लेयर में काम नहीं किया, या एआई को नॉबल्ड किया, इसलिए यह सही नहीं था। यह निश्चित रूप से करने लायक था।
मैंने सुना है जब से मैंने छोड़ा है कि उन्होंने धूम्रपान करने वालों की एक बड़ी श्रृंखला को चलाना शुरू कर दिया है, कई पीसी तक खेती की है। जाहिरा तौर पर धूम्रपान करने वालों को बनाए रखना एक मुद्दा है, और एक छोटी सी टीम है जो केवल बिल्ड सर्वर और सॉफ्टवेयर को बनाए रखने के लिए समर्पित है, इसलिए मैं यह नहीं कह सकता कि यह सफल रहा है या नहीं।
Crysis 2 के विकास के दौरान स्वचालित परीक्षण के साथ मेरा अनुभव यहाँ उपलब्ध है: http://yetanothergameprogrammingblog.blogspot.com/2010/06/aaa-automated-testing.html
सारांश:
खेल विकास वास्तव में उन मामलों में से एक है जहां यूनिट परीक्षण मुझे कुछ समझ में आता है, क्योंकि असतत प्रणालियों के बीच बातचीत इतनी आम है। डिज़ाइन-बाय-कॉन्ट्रैक्ट बेशक इसका एक हिस्सा है, और विकास के दिन से ही इसकी योजना बनाई जानी चाहिए, लेकिन मैं यह नहीं देखता कि इसे लागू करने के लिए बाद में यह मानकर इसे लागू क्यों नहीं किया जा सकता।
कठिन हिस्सा, ज़ाहिर है, एकीकरण परीक्षण है। एक खेल के बहुत सारे डेमो-लूपिंग या इसे कुछ-कुछ करके परीक्षण किया जा सकता है, लेकिन यह सामान वैचारिक रूप से डिबग करने के लिए काफी आसान है - जहां मैं अपना समय बिताने में अधिक रुचि रखता हूं वह उन बगों को उजागर कर रहा है जो तब होता है जब कोई खिलाड़ी कुछ करता है, खिलाड़ी बग को कभी नहीं देखता है, इस मानसिकता के साथ, यह स्पष्ट रूप से कम महत्वपूर्ण है कि खिलाड़ी क्या करता है।
जो काफी मुश्किल है, जाहिर है। अन्य अनुप्रयोगों पर काम करने वाले रणनीति (फ़ज़िंग, अपेक्षित-पास / अपेक्षित-असफल, आदि) यहाँ इतनी अच्छी तरह से काम नहीं करते हैं। स्क्रिप्ट करने योग्य प्रणालियों में ऐसा लगता है कि किसी खिलाड़ी को अनुकरण करने के लिए स्क्रिप्ट के एक परीक्षण सेट का निर्माण करने का तरीका है (देखें JZig का जवाब)। लेकिन सामान के लिए विशेष रूप से परीक्षण करना एक खिलाड़ी का सीधे सामना कर सकता है जो मुझे मानव और स्वचालित परीक्षण उद्देश्यों के लिए अपना समय केंद्रित करने के लिए सबसे अच्छी जगह के रूप में प्रभावित करता है।