सीमित संसाधनों के साथ TDD


13

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

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

टीडीडी के फायदे बहुत तंग शेड्यूल वाली छोटी टीमों पर अतिरिक्त विकास समय के लायक हैं?


LOB किस लिए खड़ा है? कार्य - क्षेत्र?
gnat

जवाबों:


14

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

जबकि मैं टीडीडी का एक बड़ा प्रस्तावक हूं (मैंने इसे अपनी वर्तमान नौकरी में लाया) मुझे लगता है कि अभ्यास का पता लगाने और समझने के लिए आपको थोड़ा सा सांस लेने का कमरा (समय सीमा / समय सीमा) चाहिए।

आपकी टीम जितनी अधिक छोटी होगी आप टीडीडी से उतना ही लाभान्वित हो सकते हैं। मैंने टीम के आकार में इस भुगतान को 6 से 3 तक देखा है।


2
+1: यह विकास के समय में बचत करने के बारे में नहीं है, यह डिबगिंग और रखरखाव समय में बहुत कुछ बचाता है।
जेवियर

4
"यदि आपको लगता है कि परीक्षण-प्रथम महंगा है, तो डिबग-बाद में प्रयास करें"
रयान बिग

@ रियान बिग: मैं मानता हूं कि डिबगिंग के लिए यूनिट टेस्ट एक बड़ा सहारा हैं, लेकिन अच्छी तरह से लिखा कोड पारंपरिक डिबगर के साथ डिबग करना वास्तव में मुश्किल नहीं है।
जियोर्जियो

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

10

आप जिस अतिरिक्त विकास समय के बारे में बात कर रहे हैं वह एक भ्रम हो सकता है

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

TDD is a new way of developing software। यह एक सबसे अच्छा तरीका है जो मुझे पता है।

इसलिए, यह आपके प्रोजेक्ट के आकार से संबंधित नहीं है। आप कोड की पहली पंक्ति से लाभ निकालेंगे

  • यह आपको अपने कोड को इस तरह से लागू करने के लिए मजबूर करेगा, जिसे बनाए रखना और पुन: उपयोग करना आसान होगा। यह आपके सॉफ़्टवेयर का डिज़ाइन चलाता है।
  • यह तेजी से, सुरक्षित और आनंददायक बना देगा।
  • यह आपको कार्यात्मकताओं के छोटे विखंडू लिखने में मदद करता है जो कार्यों के कार्यान्वयन को बहुत आसान बनाता है।
  • यह आमतौर पर डिबगिंग कार्य को कम बार करता है।

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

2
यह एक भ्रम भी नहीं हो सकता है। एक नई प्रैक्टिस में कुछ समय लग सकता है। खासकर अगर कोई और नहीं है जिसने इसे किया है। मैं कहूंगा कि यह दोनों ही तरह से चल सकता है।
डायटबुद्ध

@ डिडबुद्ध: मैं इस बात से सहमत हूं, मैं कुछ डिस्क्लेमर डालने में संकोच कर रहा था, लेकिन मैं अच्छी तरह से लागू होने पर टीडीडी पर वास्तविक लाभों पर जोर देना चाहता था।

1
@Pierre - TDD के लिए एक विशेष रूप से बुरा पहला कदम है (और मैं अपने दोहराया संघर्ष से शुरू करने के लिए बोलता हूं) एक ही समस्या से ग्रस्त होने के लिए बहुत ज्यादा करने के लिए और बहुत कम समय। मुझे लाभों के बारे में आश्वस्त होने की आवश्यकता नहीं है - लेकिन अपने आप को बूटस्ट्रैपिंग और फिर मेरे सहकर्मी वर्तमान में मेरे से परे हैं (आपको भरोसा करना होगा कि यह मेरे हिस्से की क्षमता की कमी नहीं है ...) - भाग में दबाव के कारण समय और भाग में, न जाने कैसे।
मुरफ

1
@ मर्फ़: क्या आप यूआई के गहन अनुप्रयोगों पर काम कर रहे हैं? जब मैं ऐसे अनुप्रयोगों पर काम करता हूं तो मैं इसका उपयोग करना बंद कर देता हूं।

8

आम ग़लतफ़हमी, मुझे इसे बाहर चिल्लाने दो:

TDD में TESTS फीचर्स के लिए हैं

EOM।

संपादित करें: मुझे विस्तृत करें: "लेखन ... सभी या हमारे घटकों के लिए इकाई परीक्षण " इकाई परीक्षण है , न कि टीडीडी। मैं बड़ी सफलता के साथ वन-मैन टीमों पर टीडीडी का नियमित उपयोग करता हूं; अदायगी असाधारण है।


1
आम गलतफहमी, TDD परियोजना परीक्षण उत्पन्न करते हैं। वास्तविकता यह है कि टीडीडी परियोजना के विनिर्देशन हैं।
नाम

3

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

यूनिट टेस्टिंग कवर की कला


1

कुछ सवालों के जवाब देने की आवश्यकता है:

  1. कोड में बग फिक्स करने के बाद आप कितना समय बिताते हैं? यदि आप इसकी मात्रा निर्धारित कर सकते हैं, तो आप पा सकते हैं कि यह बराबर है या "अतिरिक्त" समय से अधिक है यह आपको परीक्षण लिखने में मदद करेगा जो इन बग को रोकने में मदद करेगा।

  2. कोड को रीफ़्रैक्टर करने या नई सुविधा जोड़ने के लिए कितनी बार जाहिरा तौर पर सीधे फॉरवर्ड किया जाता है? फिर से अच्छे टेस्ट कवरेज के साथ इन्हें कम किया जा सकता है।

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


1

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

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

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

अपने कोड के बारे में आपके सोचने के तरीके में कैसे बदलाव आता है, इस बात पर ध्यान दें कि आपके द्वारा तैयार किया गया कोड कितना बेहतर है और आप उस कोड के बारे में कितना अधिक आश्वस्त हैं।

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

निचला रेखा - धीमी विकास, लेकिन कुछ दोष, इतना कम समय फिक्सिंग कीड़े।


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

0

यहां मुझे लगता है कि व्यवहार प्रेरित विकास तत्काल लाभ दिखाता है, लेकिन मुझे यकीन नहीं है कि परीक्षण संचालित विकास करता है।

व्यवहार चालित विकास में आप अपने टिकटों को एक अलग तरीके से प्राप्त करते हैं: आप व्यवसायी व्यक्ति के साथ बैठते हैं और उनके साथ काम करते हैं ताकि उन व्यवहारों को परिभाषित किया जा सके जो कार्यक्षमता का है। मैं अपने ब्लॉग पर एक प्रविष्टि में इसका वर्णन करता हूं, (पोस्ट शीर्षक: लेखन व्यवहार )।

व्यवसायी व्यक्ति या किसी के साथ बैठना आपको और उन्हें बेहतर तरीके से समझने में मदद करेगा कि सिस्टम को कार्यक्षमता के उस टुकड़े से खुश रहने के लिए सभी को क्या करना चाहिए। इसके लिए आपके पास मौजूद क्यूए प्रक्रिया द्वारा स्वीकार किए जाने योग्य होने के लिए क्या करने की आवश्यकता है।

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

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

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

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