एक बार पूरी टीम को इसका इस्तेमाल करने पर TDD का असली ओवरहेड व्हाट्सएप करें?


24

कितने प्रतिशत समय की बचत होती है और टीडीडी करने में खर्च होता है।

मैं एक परियोजना के जीवन-चक्र के दौरान लागत और इनाम में बदलाव का यह प्रतिशत मानता हूं।

मुझे लगता है कि प्रारंभिक चरण में बहुत अधिक लागत है, लेकिन छोटे पुरस्कार संलग्न हैं। आगे ( पुन: फैक्टरिंग के दौरान ) आपको अपने परीक्षणों का लाभ मिलता है।

मैंने सुना है कि आपके समय का 30-50% यूनिट परीक्षण लिख रहा है। हालांकि, उन परीक्षणों को लिखने से बचाए गए समय को ध्यान में नहीं रखता है ।

इसके साथ हर किसी का अनुभव क्या है?

वेस

ईडीआईटी व्हाट्सएप ने समय की बचत के साथ-साथ समय भी बचाया? बग फिक्सिंग और Refactorablity में?


इससे पहले कि आप कोड लिखें या परीक्षण लिखें, मुझे लगता है कि आपके द्वारा परीक्षण लिखने के दौरान ओवरहेड नगण्य है।
क्रिस

1
@ क्रिस, जब आप पहले परीक्षण लिखते हैं तो आप एपीआई को आगे के बजाय डिजाइन करते हैं।


3
@ Thorbjørn: आपके अवलोकन से सहमत हैं, हालांकि TDD का उपयोग किए बिना एक एपीआई डिजाइन करना पूरी तरह से संभव है, शायद ही बाद में।
रॉबर्ट हार्वे

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

जवाबों:


8

मैंने सुना है कि आपके समय का 30-50% यूनिट परीक्षण लिख रहा है। हालाँकि जो समय बचता है, उसे ध्यान में नहीं रखता है

मेरे अनुभव में, यह 50% से अधिक है।

एक बार जब आप परीक्षण लिख लेते हैं, तो समाधान में बहुत आसानी से आने की प्रवृत्ति होती है। इसलिए मुझे नहीं लगता कि 70% खर्च करना अजीब है - आपके समय के 75% परीक्षण लेखन, लेकिन आप बहुत कम समय 'प्रोडक्शन कोड' (कोड-परीक्षण किया) लिख रहे हैं और डिबगर में लगभग कोई समय खर्च नहीं कर रहे हैं ।

जितनी जल्दी आप एक बग पाते हैं, उतना ही इसे ठीक करना सस्ता है, और टीडीडी उस जबरदस्त तरीके से मदद करता है। मैंने उन परियोजनाओं पर काम किया है जहाँ पिछले 2 महीने (एक 8 महीने की परियोजना) को बग्स को ठीक करने में बिताया गया था, और उस चरण को TDD से लगभग पूरी तरह से समाप्त कर दिया जाएगा।

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


यदि परीक्षण अच्छे परीक्षण हैं। हालांकि, कुछ भी नहीं की तुलना में बेहतर है, और आम तौर पर आप यह देखकर तेजी से बता सकते हैं कि क्या परीक्षण एक अच्छा है या नहीं।
माइकल के

1
तो आपको लगता है कि समय में वास्तविक मूर्त बचत होती है। (2 महीने) आपके उदाहरण के अनुसार लेकिन परीक्षण में कितना समय लगा होगा? अच्छा जवाब बी.टी.वी.
वेस

@ यह जानना बहुत कठिन है। मैं कोड-अंडर-टेस्ट को तेजी से लिखता हूं, लेकिन परीक्षणों में एक टन समय बिताता हूं, जो मुझे पहले कीड़े खोजने में मदद करते हैं, जो समय बचाता है, लेकिन मुझे नहीं पता कि बग को ढूंढने में कितना समय बचा है देर से! मुझे व्यक्तिगत रूप से लगता है कि टीडीडी कम अवधि में अधिक खर्च करता है, लेकिन लंबी अवधि में अधिक बचत करता है। परियोजना जितनी लंबी होगी, उतना ही लाभ होगा।
ब्रैड कपिट

मेरे अभ्यस्त उत्तर के लिए इसे स्थानांतरित कर दिया।
वेस

15

हर बार जब आप अपना यूनिट परीक्षण चलाते हैं, तो आप अपने आप को अपने कोड को मैन्युअल रूप से परीक्षण करने में लगने वाले समय में बचाते हैं।

आपके परीक्षणों को लिखने के लिए आवश्यक 30% से 50% समय आपके पास एक बेहतर (परीक्षण योग्य) सॉफ़्टवेयर डिज़ाइन होने के लाभों से भी बहुत बड़ी बात है।


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

यह सही है कि परीक्षण एक स्वचालित इकाई परीक्षण है, या एक स्वचालित कार्यात्मक परीक्षण। सभी कार्यात्मक परीक्षण स्वचालित नहीं हो सकते हैं, लेकिन उनमें से कई कर सकते हैं। इसके अलावा, स्वचालित परीक्षण एक व्यक्ति की तुलना में अधिक विश्वसनीय है; यह हर बार ठीक उसी तरह से परीक्षण चलाएगा ।

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


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

6
ईकाई परीक्षण कर रहे हैं प्रतिगमन परीक्षण। मुझे यकीन नहीं है कि आप क्या कह रहे हैं।
रॉबर्ट हार्वे

2
यूनिट परीक्षण और कार्यात्मक परीक्षण दोनों प्रतिगमन परीक्षण के रूप हैं। मुझे लगता है कि वेस बाद की बात कर रहा है।
फिल मंडेर

@ पीपल मंडेर बिल्कुल सही। @ रॉबर्ट हार्वे मेरा मतलब कार्यात्मक परीक्षण था, मेरे मस्तिष्क को सही शब्द नहीं मिला। हालांकि मुझे पूरा यकीन है कि मेरे अवचेतन ने जैसा कि मैंने वहां कार्यात्मक रूप से शब्द का उपयोग किया था: एस ओह और अच्छा एडिट बीडब्ल्यूटी।
वेस

मुझे नहीं लगता कि वास्तव में हर बार उसी तरह से परीक्षण चलाना वास्तव में सकारात्मक है, क्योंकि इस तरह की समस्याओं को खोजने में बहुत लगातार याद करना संभव है।
5:10

5

टीडीडी को अक्सर समय और लागत के बजाय कोड गुणवत्ता की ओर मापा जाता है। हालांकि, बेहतर कोड गुणवत्ता के साथ, डेवलपर्स और उनके साथ काम करने वाले कोई भी व्यक्ति बेहतर काम कर सकते हैं (कम समय व्यतीत, कम लागत शामिल, खुश, आदि)। http://davidlongstreet.wordpress.com/2009/04/29/new-software-metric-wtfs-per-minute/

कार्यात्मक और गैर-कार्यात्मक आवश्यकताओं के सत्यापन को स्वचालित करने में मदद के लिए लेखन परीक्षण बहुत अच्छा है। एक वीडियो जिसने मुझे TDD (वास्तव में BDD, उच्च स्तर TDD) अपनाने के लिए आश्वस्त किया: http://video.google.com/videoplay?docid=8135690990081075324#

  • कार्यात्मक परीक्षण लिखना विकास के चरण के दौरान पहले से ही कीड़े / समस्याओं को दूर करने में मदद कर सकता है । मान लें कि आपके पास बड़ा कोड आधार है। यूनिट परीक्षणों / चश्मे के साथ , आपको केवल "सभी परीक्षण पास हुए" / "2 परीक्षण विफल हुए, लाइन xyz देखें" देखना होगा। आपको केवल विकासशील और परीक्षण दोनों करने के लिए डेवलपर्स की एक टीम की आवश्यकता हैयूनिट परीक्षणों / चश्मे के बिना , आपको मैन्युअल रूप से मुद्रित कथनों की तुलना अपेक्षित कथनों से करनी है , और मैन्युअल रूप से पता लगाना है कि किन विधियों / वर्गों में बग हैं। ऐसा करने के लिए आपको संभवतः दो अलग-अलग टीमों (डेवलपर्स और परीक्षक) की आवश्यकता होगी।

  • लिखित परीक्षण डेवलपर्स को प्रगति और समस्याओं का सामना करने में मदद करते हैं।

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

TDD के साथ, हमें यह जानकर खुशी हुई कि कब:

  • एक ग्राहक अनुरोध आवश्यकताओं (संतोषजनक आवश्यकताओं) पर बदलता है
  • कोड लिखने के बेहतर तरीके खोजे गए हैं
  • टीम के साथियों के पास कोड सुधार के सुझाव हैं
  • हमें अन्य लोगों को अपना कोड समझाना होगा

टीडीडी उबाऊ हो सकता है क्योंकि विकास प्रक्रिया छोटे कदम उठाती है, और इस तरह यह पूर्वानुमान के अनुसार हो जाता है।


4

हमारे मामले में, मुझे लगता है कि यह 40% के करीब है। हालाँकि, मुझे नहीं लगता कि हम एक ऐसे दौर से गुज़रे जहाँ यह इससे कहीं अधिक था। हमारे पास एक कोड जनरेटर है जो कोड स्केलेटन दोनों को बाहर निकालता है जो डेवलपर्स द्वारा फ़्लेशेड हो जाता है और एक परीक्षण सूट जो इसी तरह से फ़्लेशेड हो जाता है। हमारे परीक्षण के अधिकांश प्रयास वास्तव में यह सुनिश्चित करने के लिए उपयुक्त परीक्षण डेटा को ट्रैक करने (या बनाने) में जाते हैं कि हमें पूर्ण कवरेज प्राप्त हो।


क्या यह एक घरेलू-विकसित कोड जनरेटर या एक ओपन-सोर्स कोड जनरेटर है जो जंगली में उपलब्ध है?
रॉबर्ट हार्वे

यह .NET कोडडॉम कक्षाओं के आधार पर एक हाथ से लुढ़का हुआ समाधान है।
टीएमएन

3

महत्वपूर्ण दीर्घकालिक उपाय न केवल कोड गुणवत्ता और कोड आत्मविश्वास हैं, बल्कि यहां तक ​​कि मोर्सो भी टीम से बाहर नहीं निकलते हैं जो नासमझ परीक्षण कर रहे हैं

अल्पकालिक उपाय परीक्षणों को स्वचालित करने का आरओआई होगा

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

परीक्षणों को चलाने में 28 मिनट लगे; वे सब गुजर गए। मैन्युअल रूप से उसी 40+ स्वीकृति परीक्षण का प्रदर्शन करने में लगभग 6 घंटे लगेंगे।

एक और उदाहरण: एक पूर्व पुनरावृत्ति में मैंने एक सूक्ष्म बग के साथ परीक्षण परिदृश्यों में से एक को अलग किया था कि मैनुअल परीक्षण शायद नहीं मिला होगा (स्वचालित परीक्षण डीबी अखंडता जांच करते हैं जो मैनुअल परीक्षक लगभग कभी नहीं करते हैं)। इससे पहले कि मैं यह पता लगाने और इसे ठीक करने में कामयाब रहा, मुझे लगभग 50 बार उस परीक्षण परिदृश्य को चलाना पड़ा। मैन्युअल रूप से परीक्षण परिदृश्य के संचालन में लगभग 50 मिनट लगेंगे। इस तरह एक दिन में 41.6 मानव-घंटे श्रम बच गए

स्वचालित परीक्षण के आरओआई को अग्रिम रूप से गणना करने का कोई तरीका नहीं है, क्योंकि आप ठीक से नहीं जान सकते हैं कि आपको कितनी बार परीक्षण चलाने की आवश्यकता होगी।

लेकिन मेरे लिए, स्वचालित परीक्षणों का आरओआई लगभग अनंत है


1
ओह, यह दिलचस्प बिंदु में है। मुझे लगा कि डीबी अखंडता जांच इकाई परीक्षणों के बाहर होनी चाहिए। इकाई परीक्षण के अलावा और कौन से परीक्षण आप स्वचालित आधार पर चलाते हैं?
वेस

1
@: टीडीडी में परीक्षणों को "यूनिट" परीक्षणों के रूप में संदर्भित किया जाता है, लेकिन यह दुर्भाग्यपूर्ण नाम उनके दायरे को सीमित नहीं करता है। उनका उद्देश्य सुविधाओं का परीक्षण करना है । एक विशेषता यह हो सकती है कि 'foo फंक्शन हमेशा अशक्त रहता है' या यह 'अधिकतम लोड के तहत समग्र सिस्टम विलंबता 12 से कम पिकोसेकंड' होना चाहिए।
स्टीवन ए। लोव

0

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

घटक परीक्षण अक्सर बल्कि तुच्छ कोड के लिए एक बड़ा काम करते हैं, साथ ही कार्यान्वयन को बदलना बहुत सस्ता है क्योंकि परीक्षण केवल इंटरफ़ेस के लिए युग्मित हैं।

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

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