क्या BDD (व्यवहार प्रवृत्त विकास) का उपयोग खेलों में किया जाता है?


9

मैं कुछ समय से BDD - Behaviour Driven Development के बारे में पढ़ रहा हूं, और मुझे कोड में सुविधाओं को बदलने के लिए यह वास्तव में आसान और उपयोगी लगता है। BDD उपयोगकर्ता अक्सर इसे TDD को सही कहते हैं।

BDD सॉफ्टवेयर डिज़ाइन के लिए एक उपकरण है, जो अंदर से लेकर अंदर तक, bussiness value (या गेमप्ले वैल्यू) से लेकर कोड तक है।

दान उत्तर ने बीडीडी की शुरुआत की

आप BDD और खेल के बारे में कोई संसाधनों के अलावा अन्य जानते हैं इस ?


यह सिर्फ TDD के एक अनुकूलन की तरह दिखता है, और जैसे कि लिंक बहुत अधिक एक डुप्लिकेट है।
कम्युनिस्ट डक

जैसा कि BDD TDD करने के लिए एक सुव्यवस्थित प्रक्रिया है, मैं जानना चाहूँगा कि क्या कोई इसका उपयोग करता है, और क्या अनुभव है।
MarcoTmp

क्या यह सवाल आपके सवालों के जवाब नहीं देता है?
कम्युनिस्ट डक

वास्तव में नहीं, क्योंकि मुझे अभी भी नहीं पता है कि दूसरे लोग गेम में बीडीडी का उपयोग कैसे करते हैं।
MarcoTmp

मुझे अभी भी लगता है कि यह मूल रूप से TDD एक अलग शैली में किया गया है।
कम्युनिस्ट डक

जवाबों:


14

यह कहना शायद सुरक्षित है कि BDD, जैसे TDD, या (यहाँ ट्रेंडी डेवलपमेंट buzzword-paradigm सम्मिलित करें) का उपयोग कुछ गेम डेवलपर्स द्वारा कहीं न कहीं किया जाता है, लेकिन वे शायद नहीं जानते कि वे न तो हैं और न ही वे BDD को वास्तव में पहचान पाएंगे। । सवाल वास्तव में है कितना वे इसका इस्तेमाल करते हैं और वे कितना करते है इसके लिए इसका इस्तेमाल करने के लिए महत्वपूर्ण है?

उदाहरण के लिए, जहां मैं काम करता हूं, हमारे सभी यूनिट टेस्ट नाम "वाक्य" हैं जैसे कि डैन नॉर्थ आपको उस लेख में सुझाव देता है जिससे आप जुड़े थे। यह कहने के लिए पर्याप्त नहीं है कि हम BDD का उपयोग करते हैं, बेशक, लेकिन शायद यह वही है जो आप वास्तव में परवाह करते हैं?

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

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

एक विकास दल मनुष्यों से बना है, जो एक मशीन में विनिमेय कॉग नहीं हैं। वे विशिष्ट रूप से व्यक्तियों और स्वयं के अनूठे संयोजन के रूप में कार्य करते हैं। प्रभावी विकास का तरीका आपके मनुष्यों को {BDD, फुर्तीली, जो कुछ भी हो) में ढालना नहीं है, लेकिन लगातार इस बात का पुनर्मूल्यांकन करना है कि टीम किस तरह से प्रगति कर रही है और इस प्रक्रिया में कमियों को दूर कर रही है, टूटे हुए तकनीकी गुणों की जगह ले रही है, और चीजों को फिर से मजबूत कर रही है काम कर रहे। संक्षेप में, एक शीर्षक शिपिंग पर ध्यान केंद्रित करने के लिए और "एजाइल (या जो भी हो) होने पर नहीं।"


मुझे इस बात पर ध्यान देना चाहिए कि मेरे पास सभी महत्वपूर्ण सबूत हैं जो हठधर्मिता और उत्पादकता को संसाधित करने के लिए सशक्त रूप से पालन करने के बीच की कड़ी के बारे में मेरी टिप्पणियों पर लिखते हैं। यह सिर्फ मेरा अनुभव है और वैज्ञानिक अध्ययन नहीं है।

1
-1। आपकी राय के लिए धन्यवाद। सवाल का जवाब देने के लिए देखभाल?
जेस टेलफ़ोर्ड

+1, अच्छा जवाब। @JoshPetrie क्या आप कम से कम कभी-कभी TDD का उपयोग करते हैं या आप परीक्षण कवरेज को मापते हैं? खेल देव में डेवलपर परीक्षण की बस दिलचस्प स्थिति।
इल्या इवानोव

1

क्या यह? शायद। मेरी राय यह होगी कि यह आम तौर पर मनोरंजन सॉफ्टवेयर के लिए बहुत खराब फिट होगा, हालांकि यह निम्न स्तर के पुस्तकालयों के लिए अच्छी तरह से काम कर सकता है।

संपादित करें: यहाँ मेरी राय के लिए कुछ औचित्य है।

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

लेकिन मान लें कि आप उस मानव हितधारक सामान को बाहर फेंकना चाहते हैं और विभिन्न कोड मॉड्यूल के बीच अनुबंध लागू करने के लिए सिर्फ BDD का उपयोग करते हैं, जहां तक ​​मैं देख सकता हूं कि सामान्य परीक्षण-संचालित विकास से बहुत भिन्न नहीं है, जिसे मैं भी खराब मानता हूं- निम्नलिखित कारणों से खेलों के अनुकूल।

परीक्षण यह जाँचने के लिए उपयोगी है कि असतत घटनाएँ अपेक्षित होने पर हुईं। यह इवेंट-संचालित प्रोग्रामिंग में अच्छी तरह से काम करता है, अर्थात। अधिकांश सॉफ़्टवेयर वर्ल्ड, जहां एक एक्शन किया जाता है, कुछ आउटपुट उत्पन्न होता है, और फिर आप बस यह सत्यापित करते हैं कि एक्शन और परिणाम मेल खाते हैं। हालांकि, गेम सॉफ़्टवेयर आमतौर पर एक सिमुलेशन है, जहां एक कार्रवाई का असतत परिणाम नहीं होता है, लेकिन विश्व राज्य में एक निरंतर परिवर्तन होता है। यदि मेरा छिपा हुआ खिलाड़ी शोर मचाता है, तो मैं जांचना चाहता हूं कि एआई मेरा शिकार करता है। इसलिए, मैं यह सुनिश्चित करने के लिए एक परीक्षण बना सकता हूं कि शोर पैदा होने के बाद एआई 'शिकार' राज्य में है, और यह बहुत अच्छा है। लेकिन मुझे कैसे पता चलेगा कि शिकार भी काम करता है? आप इसे तुरंत नहीं देख सकते - आप इसे केवल समय बीतने पर देख सकते हैं।

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

def check_dice_roll_in_range():
    d = new Dice()
    assert(d.roll() between 1 and 6)

class Dice:
    def roll():
        return 4

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

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

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

(उम्मीद है कि यह एक बेहतर जवाब है, भले ही आप मेरी बातों से सहमत न हों।)


-1 मेरे से भी; अगर कुछ भी हो, तो बीडीडी अन्य चीजों के मुकाबले खेलों के लिए और भी बेहतर है। इनपुट के जवाब में किसी चरित्र के व्यवहार को निर्दिष्ट करना और भी स्वाभाविक है, किसी दिए गए XML संदेश के जवाब में वेब-सेवा के व्यवहार को निर्दिष्ट करना।
ब्लूराज -

1
मनोरंजन सॉफ्टवेयर अभी भी सॉफ्टवेयर है, है ना?
prusswan

विशेषज्ञों की राय की एक अच्छी किस्म अत्यधिक मूल्यवान है, IMHO। प्रत्येक व्यक्ति के पास उनके उत्तरों पर एक बुरा बैज होता है, इसलिए पाठक किसी विशेष प्रश्न के लिए पोस्ट किए गए बाकी के साथ संयोजन के रूप में ले जाने पर राय को कितना वजन कर सकते हैं।
नैट

1
मैं अपने -1 से खड़ा हूं, और जो कुछ कहा गया है, उसका जवाब देना चाहूंगा: collaboration between developers, QA and [users] [...] sounds like a bad idea - games rarely have 'desired software behaviour'- हां वे करते हैं: उन्हें मजेदार होने की जरूरत है। यह जानने का सबसे अच्छा तरीका है कि क्या आपका खेल मज़ेदार है, खेलने वालों को सुनने के लिए। डेवलपर्स को अक्सर उनके निर्माण (या तकनीकी कठिनाइयों) से इस तथ्य पर अंधा कर दिया जाता है कि उनका खेल मज़ेदार नहीं है। गैर-डेवलपर playtesters में ये समस्याएँ नहीं हैं।
ब्लूराजा - डैनी पफ्लुगुएफ्ट

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

1

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

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

प्रागैटिक प्रोगैमर की पुस्तक में "कॉन्ट्रैक्ट्स" के बारे में पढ़ें। परीक्षण आपको कोड अनुबंध प्राप्त करने में मदद करता है। यह कोड X करता है और X से अधिक कुछ नहीं करता है और यह उम्मीद नहीं करता है कि यह Y के बारे में कुछ भी करेगा या Z करने के लिए इसे अनुकूलित करने की कोशिश करेगा। यह कोड की स्वच्छता सुनिश्चित करता है और सभी से अपेक्षा करता है कि वे डिक नहीं होंगे और कोड बेस को मैला करेंगे।

BDD के और भी कारण हैं। मेरे लिए मुख्य यह है कि मैं अपनी मान्यताओं को वैसे भी मान्य करने के लिए परीक्षण की एक ही मात्रा करूंगा ताकि मैं इसे औपचारिक रूप दे सकूं।

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

यदि उदाहरण के लिए आप आंदोलन का परीक्षण कर रहे हैं। वैसे आप उम्मीद करते हैं जब "ऊपर" दबाया जाता है कि उपयोगकर्ता कुछ माप द्वारा आगे बढ़ता है।

यदि उदाहरण के लिए आप ग्राफिक्स रेंडरिंग का परीक्षण कर रहे हैं ... तो बहुत अधिक परीक्षण न करें क्योंकि क्या आप वास्तव में ऐसा कर रहे हैं? एक अच्छा परीक्षण ढांचा आपके लिए इस हिस्से को संभाल सकता है। परावर्तन सुपर तुच्छ नहीं है मैं इस तरह की चीजों के लिए कहूंगा। आपको बफ़र आदि की जाँच करने की आवश्यकता हो सकती है, आदि मैं बस जाँच करूँगा कि आप वास्तव में क्या कर रहे हैं। चरित्र यहां है, अब वह कुछ कार्रवाई के बाद वहां है।

आपके पास बहुत कम छोटे कार्य / परीक्षण होने चाहिए और साथ में वे कुछ उपयोगी के लिए योग करेंगे।


अंत में, मैंने बहुत से लोगों को देखा है कि गेम / ग्राफिक्स को कोड करते समय सही व्यवहार प्राप्त करने के लिए ऐसा होता है। परीक्षण थोड़े को रोकता है कि "यह सिर्फ थोड़े काम करता है" प्रभाव। यह जानना बहुत कठिन है कि आपके समीकरण कुछ कोड को कॉपी करने और अनुमान लगाने की तुलना में चीजों को कैसे प्रभावित करेंगे।
पैरिस

बीडीडी न केवल परीक्षण के बारे में है, बल्कि इससे आगे भी जाता है।
डेनियल

0

मुझे लगता है कि BDD क्या है, इस बारे में गलत धारणा है। BDD एक परीक्षण तकनीक या प्रक्रिया नहीं है। BDD एक विकास मॉडल और प्रक्रिया है। यह परीक्षण से परे चला जाता है और यह प्रोग्रामिंग से परे जाता है।

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

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