टीडीडी गुरु अधिक से अधिक हमें बताते हैं कि टीडीडी परीक्षण के बारे में नहीं है, यह डिजाइन के बारे में है । इसलिए मैं कुछ डेवलपर्स को जानता हूं जो टीडीडी के बिना वास्तव में शानदार डिजाइन बनाते हैं। क्या उन्हें टीडीडी का अभ्यास करना चाहिए?
टीडीडी गुरु अधिक से अधिक हमें बताते हैं कि टीडीडी परीक्षण के बारे में नहीं है, यह डिजाइन के बारे में है । इसलिए मैं कुछ डेवलपर्स को जानता हूं जो टीडीडी के बिना वास्तव में शानदार डिजाइन बनाते हैं। क्या उन्हें टीडीडी का अभ्यास करना चाहिए?
जवाबों:
टीडीडी मुझे केवल सर्वश्रेष्ठ अंतिम डिजाइन में आने में मदद नहीं करता है, इससे मुझे कम प्रयासों में मदद मिलती है।
मुझे लगता है कि मुझे कौन सा डिज़ाइन सबसे अच्छा लगा, यह तय करने से पहले एक समस्या पर दो या तीन स्टैब्स होते थे। अब, ठीक यही समय परीक्षण लिखने और मेरे दिमाग को सही डिजाइन पर केंद्रित करने में व्यतीत होता है। और, एक बोनस के रूप में, यह मुझे दोहराए जाने वाले परीक्षणों के एक सूट के साथ छोड़ देता है। जीत!
उस ने कहा, अनिवार्य रूप से ऐसे लोग होने जा रहे हैं जिनके लिए टीडीडी कुछ भी नहीं प्रदान करता है। जब तक वे अभी भी इसके अंत में स्वचालित, दोहराए जाने वाले परीक्षण करते हैं, तब तक यह ठीक है।
forced
। मुझे नहीं पता कि लोग शब्द "मजबूर" की आवृत्ति से अधिक बार परेशान नहीं होते हैं क्योंकि यह टीडीडी के बारे में चर्चा में होता है। किसी को कुछ सही ढंग से डिजाइन करने के लिए मजबूर करने की आवश्यकता नहीं है; उन्हें सीखना चाहिए कि चीजों को सही तरीके से कैसे डिज़ाइन किया जाए, और फिर ऐसा करने के लिए मजबूर किए बिना ऐसा करना जारी रखें, खासकर जब कि जबरदस्ती का कार्य इतना अविश्वसनीय रूप से समय लेने वाला होता है।
यह विशेष रूप से टीडीडी गुरु वास्तव में कहने की कोशिश कर रहा है कि टीडीडी एक डिजाइन प्रक्रिया है (हालांकि कई लोगों ने दुर्भाग्य से इसे इस तरह से व्याख्या किया है)। यहां संदेश यह है कि टीडीडी जैसी प्रक्रिया का उपयोग करते हुए, यदि आप इसे सही करते हैं, तो आपके समग्र डिजाइन में सुधार होगा।
मौलिक अवधारणा वह है जो टीडीडी से बहुत पुरानी है; परीक्षण के लिए डिजाइनिंग । यदि आप ठोस सिद्धांतों, विशेष रूप से एकल उत्तरदायित्व सिद्धांत का कठोरता से पालन करते हैं , तो आपको कोड का परीक्षण करना बहुत आसान लगेगा। दूसरी ओर, यदि आप अपने डिजाइन में थोड़ा ढलान रखते हैं, तो आप शायद आपको अधिक बार ऐसा करने के लिए मजबूर करने से बचने के लिए इकाई परीक्षणों को लिखने की प्रक्रिया करेंगे, ताकि आपको यह पता चल सके कि क्या चाहिए। परीक्षण किया जा सकता है, और (बी) वास्तविक परीक्षण लिखने की तुलना में निर्भरता स्थापित करने में अधिक समय व्यतीत करना।
इसका लाभ पाने के लिए आपको टीडीडी का पालन करने की आवश्यकता नहीं है , लेकिन यह परीक्षणों को जल्दी लिखने में मदद करता है - अधिमानतः बहुत जल्द ही आप एक वर्ग को लागू करने के बाद, यदि पहले या उसके दौरान नहीं। यदि आप बहुत लंबे समय तक प्रतीक्षा करते हैं, तो आप "गंदे हाइब्रिड" परीक्षणों के जोखिम को चलाते हैं, जिसके बारे में लेखक बात कर रहा है, जिसमें बहुत अधिक मूल्य नहीं है क्योंकि वे भंगुर हैं और हानिरहित रिफैक्टिंग के दौरान टूट जाते हैं - बड़ा बनाने का उल्लेख नहीं करना -काले एक कठिन प्रक्रिया को फिर से डिज़ाइन करता है।
यदि आप परीक्षण नहीं लिखते हैं, और आप केवल 15% कोड कवरेज की गिनती नहीं करते हैं, तो आप "परीक्षण परीक्षण" नहीं कर सकते हैं और परीक्षण के लिए डिज़ाइन नहीं कर रहे हैं, तो आप नहीं जान सकते।
बेशक आप कभी भी एक परीक्षण लिखे बिना अच्छे डिजाइन बना सकते हैं - लेकिन क्या आप सुनिश्चित हैं कि वे महान डिजाइन हैं? आप कैसे जानते हैं, यदि आप स्पष्ट रूप से परीक्षणों द्वारा निर्दिष्ट नहीं हैं? परीक्षण बहुत सारे मुद्दों को उजागर करता है, और क्यूए प्रक्रिया में दृश्यमान कीड़े मिल सकते हैं, वे खराब डिजाइन निर्णयों को उजागर नहीं करेंगे ।
TDD सीखने के लिए किसी के प्रयास से आने वाला सरल उत्तर: आपको इसकी आवश्यकता नहीं है, लेकिन इससे आपको जो बड़ा लाभ होता है, वह बहुत ही सरलता से होता है, आत्मविश्वास : आपका आवेदन काम करता है। विश्वास है कि उपयोग के मामले संतुष्ट हैं। विश्वास है कि आपके तर्क "फोबार" मॉड्यूल के लिए ध्वनि है। विश्वास है कि आपके कोड को सड़क के नीचे छह महीने तक बनाए रखने योग्य और एक्स्टेंसिबल होने के लिए ठीक से संरचित किया जाता है जब सीईओ कुछ नए पागल फीचर में जोड़ना चाहता है, जिसके बारे में वह पढ़ता है। विश्वास है कि, जब आपका आवेदन बढ़ता है, तो स्थापत्य कला के लिए नींव रखी गई है कि वह नए फीचर्स के साथ जूरी-रिग की नई विशेषताओं के लिए गॉब्स हैक्स की आवश्यकता न हो।
मुझे लगता है कि ऊपर थोड़ा सा लग रहा था लेकिन मैं कैसे TDD के लाभ को देखता हूं। भले ही आप टीडीडी का उपयोग करके अच्छे, ठोस, अच्छी तरह से तैयार किए गए डिजाइन बना सकते हैं, लेकिन यह आपके काम को सही करने में मदद करता है, और फिर साबित करता है कि चीजें सही तरीके से की गई हैं, और अधिक महत्वपूर्ण बात यह है कि चीजों को सही रखने के लिए एक आधार रेखा प्रदान करता है । बहुत कम से मैंने टीडीडी में डब किया हुआ है, इसका उपयोग करके मुझे कोड को साफ करने और उचित सॉफ्टवेयर इंजीनियरिंग अवधारणाओं का पालन करने के लिए मजबूर किया गया है, जहां अन्यथा मैं "सबसे तेज संभव" करूंगा, जिसके परिणामस्वरूप अक्सर गड़बड़ "हैक" कोड होता है।
मैं अपने अनुभव से ही बात कर सकता हूं। मेरे लिए टीडीडी मेरे विकास शैली की आदतों वाले टूलबॉक्स में पहले कई चीजें लाया था। हालांकि, यह फिर से कहने योग्य है कि टीडीडी हर चीज का समाधान नहीं है। मैं हमेशा अन्वेषण और उत्पादन तैयार कार्यान्वयन को अलग करने की कोशिश करता हूं। अन्वेषण चरण में टीडीडी की बिल्कुल आवश्यकता नहीं है और यहां तक कि धीमा भी है। उत्पादन तैयार कोड के लिए दूसरी तरफ यह कई लाभ लाता है जो डेवलपर्स के मानसिक स्वास्थ्य और परियोजना के कर्म के लिए बहुत कम और लंबे समय तक मूल्यवान हैं।
एक बात यह है कि TDD ठीक नहीं करता है। यदि आप नहीं जानते कि आप जिस चीज का निर्माण कर रहे हैं, उसका निर्माण कैसे करें, तो टीडीडी आपके लिए समाधान का उत्पादन नहीं करेगा। आपको समस्या और समाधान के मोटे तौर पर "डिज़ाइन" या अवलोकन की आवश्यकता है। TDD आपको उच्च गुणवत्ता के कोड के साथ इसे और अधिक सुरुचिपूर्ण और बनाए रखने योग्य तरीके से लागू करेगा।
अंत में, मैं बीडीडी शब्दों में सोचना पसंद करता हूं जो टीडीडी प्रथाओं पर निर्भर हैं। BDD मुझे डोमेन की शब्दावली का उपयोग करके समाधान को लागू करने और सॉफ़्टवेयर को समस्या को बेहतर बनाने के लिए बनाता है।
महान डिजाइन को प्राप्त करने के कई तरीके हो सकते हैं, और निर्विवाद रूप से कई अलग-अलग व्याख्याएं हैं जो "महान" - या यहां तक कि "अच्छा" का गठन करती हैं। मुझे संदेह है कि अधिकांश TDDers परिभाषा के बारे में आपसे सहमत नहीं होंगे - कि अगर हमें लगता है कि आप जिस कोड को महान समझते हैं, हम उसे महान से कम मानते हैं। टीडीडी हमें कुछ बहुत ही विशिष्ट गुणों के लिए प्रेरित करता है, और ये गुण शायद ही कभी गैर-टीडीडी कोड में पाए जाते हैं।
स्पष्टता, स्पष्ट रूप से, उन गुणों में से एक है, और अतिव्यापी। बहुत छोटे तरीके और कक्षाएं शायद एक उप-विशेषता हैं, और इससे उत्कृष्ट नामकरण होता है। शायद आप प्रोग्रामर को जानते हैं जो इन गुणों को टीडीडी किए बिना प्राप्त करते हैं, लेकिन मैं नहीं करता।