गेंद को टीडीडी पर घुमाएं


10

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

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

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

मैं अपने ग्राहकों को कैसे समझाऊं कि वे यूनिट टेस्टिंग और टेस्टेड डेवलपमेंट के लिए पैसा खर्च करना चाहते हैं? क्या कोई अध्ययन है जो इकाई परीक्षण के आरओआई को दर्शाता है?


1
TDD के लिए बहुत देर हो चुकी है; माइकल फेदर द्वारा "वर्किंग विथ लिगेसी कोड" देखें
स्टीवन ए। लोव

चरण 1. खोज ढेर अतिप्रवाह। यह पूछा गया है। और जवाब दिया। उदाहरण: stackoverflow.com/search?q=starting+tdd
S.Lott

जवाबों:


6

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

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

यह "शुद्ध" टीडीडी नहीं है। लेकिन यह समय के साथ आपके कोड की गुणवत्ता में तेज़ी से और परिणाम प्रदर्शित करता है। परिणाम आपको प्रबंधन खरीदने में मदद करेंगे।


महान सुझाव, लेकिन मुझे लगता है कि ओपी एक अधिक ठोस तर्क की तलाश कर रहा है जो इस तरह के दृष्टिकोण को लागू करने के लिए आवश्यक अतिरिक्त समय को सही ठहराता है।
बर्नार्ड

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

यह एक डेवलपर के रूप में मेरे लिए स्पष्ट है, लेकिन मुझे पता है कि प्रबंधन को आमतौर पर एक बहुत ही ठोस तर्क की आवश्यकता होती है (यानी खर्च को सही ठहराना)।
बर्नार्ड

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

3

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


0

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

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

एक और तरीका है, और यह है कि आपके प्रबंधक को एजाइल सम्मेलनों में भाग लेने का प्रयास करना है जो चारों ओर होते हैं। यह निश्चित रूप से उपस्थित होने के लायक होना चाहिए।

यदि आपको लगता है कि कुछ भी काम नहीं करता है, तो आगे बढ़ें ... उस स्थान से जुड़ें जो आपको फिट बैठता है। उम्मीदवार, यह वही है जो मैंने किया था। जब सब कुछ विफल रहा, मैं आगे बढ़ गया;)

और पता है कि कोड लिखने के बाद यूनिट परीक्षण वास्तव में TDD नहीं है, लेकिन फिर वह हमेशा पहला कदम हो सकता है। यह यहाँ बहुत अच्छी तरह से फिट बैठता है।

आपको शुभकामनाएं और सफलता की शुभकामनाएं!

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