2010-01-27 5 views
10

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

उदाहरण के लिए:

[Test] 
public void Character_WhenHealthIsBelowZero_IsDead() 
{ 
    // create default character with 10 health 
    Character character = new Character(); 
    character.SubtractHealth(20); 
    Assert.That(character.IsAlive, Is.EqualTo(false)); 
} 

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

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

+0

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

उत्तर

6

क्या मेरे क्लास डिज़ाइन वास्तव में मेरे परीक्षणों को परिशोधित करने के लिए बाहर आना चाहिए?

हां।

क्या टीडीडी का मतलब कक्षा डिज़ाइन के बारे में नहीं सोच रहा है?

बिलकुल नहीं। इसका मतलब है कि अपने परीक्षण लिखने के दौरान कक्षा के डिजाइन के बारे में सोचना, और आपका शेष कोड। रेड-ग्रीन-रिफैक्टर टीडीडी जीवन चक्र में क्लास डिज़ाइन खेल रहा है।

5

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

नतीजतन, एक डेवलपर "पहले परीक्षण" लेखन एक आवेदन पहले ही क्या अपने अंतिम वर्ग संरचना की तरह दिखाई देगा का एक उचित विचार है, और वह दृष्टि उसे गाइड जब वह अपने परीक्षण लिख रहा है।

+0

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

1

टीडीडी आपके क्लास डिज़ाइन सहित परीक्षणों को आपके डिज़ाइन को चलाने के बारे में है। यह मूल्यवान है क्योंकि परीक्षण यह साबित करने के लिए हैं कि कोड "काम करता है"। इसका मतलब है कि आप एक ऐसे कार्यक्रम के क्लास डिज़ाइन के साथ हवादार हो जाएंगे जो काम करता है, जो एक प्रोग्राम के क्लास डिज़ाइन के विपरीत है जो काम कर सकता है या नहीं।

6

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

ऐसा लगता है जैसे आप इसे पीछे कर रहे हैं।

आपका चरणों होना चाहिए:

  1. डिजाइन आपके डोमेन मॉडल
  2. अपनी कक्षाओं डिजाइन
  3. कुछ परीक्षण लिखें
  4. कुछ वर्ग तर्क लागू
  5. अपनी कक्षाओं refactor उन्हें और अधिक परीक्षण योग्य जहां बनाने के लिए आवश्यक
  6. दोहराएँ चरण 3-5
+1

"डिज़ाइनिंग" कक्षाएं आवश्यक हो सकती हैं या नहीं भी हो सकती हैं। मैं लगभग एक अलग डिजाइन कदम कभी नहीं है। –

+0

@ जोह सॉंडर्स - आप अभी भी उन्हें सभी संभावनाओं में डिजाइन कर रहे हैं, आप बस "जस्ट इन टाइम" डिज़ाइन को गले लगा रहे हैं। मुझे लगता है कि डिजाइन की कमी से जेआईटी डिजाइन को अलग करना महत्वपूर्ण है। टीडीडी कम से कम चिंताओं/encapsulation परिप्रेक्ष्य को अलग करने से अच्छी श्रेणी डिजाइन (जानबूझकर अल्पसंख्यक) infers। यूएमएल या जो भी हो, इसके बजाय, आपकी कक्षा डिज़ाइन सिर्फ आपके परीक्षण वाक्यविन्यास में प्रलेखित होती है। आपने किसी नए व्यक्ति के लिए "अपने एक्सप के आधार पर" सिर पर नाखून मारा, स्पष्ट डिजाइन चरण का कुछ रूप एक अच्छा विचार हो सकता है। –

+0

@ जिम: मैं उन लोगों का जवाब दे रहा था जो "क्लास डिज़ाइन" पुराने तरीके से सोचते हैं, कलाकृतियों, यूएमएल इत्यादि के साथ एक अलग डिज़ाइन चरण की आवश्यकता होती है। बेशक टीडीडी के साथ डिज़ाइन है, लेकिन एक अलग डिज़ाइन चरण नहीं है। इससे परियोजना प्रबंधक नाखुश हो सकते हैं कि बिल "डिज़ाइन" घंटे के लिए अलग बाल्टी नहीं है। –

1

मुझे लगता है कि संतुलित दृष्टिकोण वह है जिसे आपको लेने की आवश्यकता है। सबसे पहले अपने डोमेन के वर्गों को मॉडल करें, क्योंकि उनके बिना, आप कैसे जानते हैं कि का परीक्षण कैसे करें?

उसके बाद, आप शायद स्टब्स या इन कक्षाओं के गोले, ज्यादातर खाली कार्यान्वयन के साथ बनाएंगे, जिसमें केवल आपके कुछ परीक्षण संरचनाओं बारे में बताने के लिए।

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

0

एक संतुलित दृष्टिकोण जाने का रास्ता है।

हालांकि, शेष परीक्षण की आवश्यकता से प्रेरित है।

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

आपके परीक्षणों के लिए भी संकलित करने के लिए, आपको कुछ कक्षा परिभाषाओं की आवश्यकता है। उन्हें काम करने की ज़रूरत नहीं है, लेकिन उन्हें संकलन करना है।

कुछ मामलों में आपकी कक्षा इतनी सरल हो सकती है, आप वास्तव में पहले सभी (या लगभग सभी) लिखते हैं।

0

टीडीडी डिजाइन के बारे में है! तो टीडीडी कर आप सुनिश्चित करेंगे कि आपका डिजाइन पूरी तरह से टेस्टेबल है।

इसके अलावा, "संतुलित दृष्टिकोण" आईएमओ जाने का तरीका है। आप पहले से ही एक उच्च स्तरीय वास्तुकला जानते हैं और टीडीडी इस वास्तुकला को टेस्टेबल करने के लिए ड्राइव करेगा।

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

0

टीडीडी पेंसिल और पेपर के साथ चलने वाले कोड के बजाय कंक्रीट रूप से क्लास डिज़ाइन के बारे में सोचने और प्रयोग करने की ओर झुकता है।

दोनों दृष्टिकोण उपयोगी हैं। यहां तक ​​कि कट्टर टीडीडी zealots कभी-कभी पेंसिल-एंड-पेपर (या शायद एक व्हाइटबोर्ड) का उपयोग करते हैं, और बीडीयूएफ-यूबर-एलेस प्रकार कभी-कभी प्रोटोटाइप को धक्का देंगे। सवाल तब होता है जहां आप गिरते हैं: पोंडरर या अधिक हाथों पर?

संबंधित मुद्दे