TDD / टेस्ट बहुत अधिक एक ओवरहेड / रखरखाव का बोझ?


24

तो आपने इसे कई बार सुना है जो वास्तव में परीक्षण के मूल्यों को नहीं समझते हैं। बस चीजों को शुरू करने के लिए, मैं चुस्त और परीक्षण का अनुयायी हूं ...

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

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

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

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

क्या कोई कृपया मेरी मदद कर सकता है जो आमतौर पर TDD और लोगों के प्रति मेरे दृष्टिकोण को बेचने की कोशिश करने की एक बहुत छोटी बातचीत है? मेरे पास आमतौर पर कंपनी / टीम के घुटनों पर गिरने से पहले तर्क की एक बहुत छोटी खिड़की होती है।


3
भागो! भागना! जो कोई भी क्यों नहीं समझ सकता है कि स्वचालित परीक्षण लंबे समय तक आपके सिर को आपके जीवन से दूर करने की आवश्यकता को आसान बनाते हैं, आपको पता है, जहां।
मैट

6
! @MattC TDD = स्वचालित परीक्षण
Nemanja Trifunovic

@ नेमंजा ट्रिफ़ुनोविक: उह ... जो मैनुअल परीक्षणों का उपयोग करके टीडीडी का अभ्यास करता है? "मैंने ऐप शुरू कर दिया है लेकिन क्लिक करने के लिए कोई बटन नहीं है !?" "हाँ, यह लाल, हरे, लाल रंग में लाल है!"
स्टीवन एवर्स

2
@SnOrfus: TDD के बिना स्वचालित परीक्षण हैं। कुछ उदाहरण: स्वचालित एकीकरण परीक्षण, प्रतिगमन परीक्षण, तनाव परीक्षण।
नेमेनजा ट्रिफ़ुनोविक

2
@ मार्टिन, मुझे एक फॉलोअप कमेंट (या ब्लॉग पोस्ट) में दिलचस्पी होगी, जो इस बात पर चर्चा करता है कि आपने क्या किया है और लंबे समय में यह आपके लिए कितना अच्छा है (या नहीं)।
स्टीवनवी

जवाबों:


36

टीडीडी के फैशन में इसे आज़माने से टीम के रखरखाव के लिए यह केवल एक बुरा सपना होगा और असंभव हो जाएगा।

आप उस तर्क को नहीं जीत सकते। वे इसे बना रहे हैं। अफसोस की बात है कि आपके पास कोई वास्तविक तथ्य नहीं है। आपके द्वारा प्रदान किया गया कोई भी उदाहरण विवादित हो सकता है।

इस बिंदु को बनाने का एकमात्र तरीका कोड है जो बनाए रखने के लिए कम लागत है।

इसके अलावा, चूंकि यह फ्रंट-एंड एप्लिकेशन है (वेब-आधारित नहीं है), परीक्षण जोड़ना व्यर्थ है,

हर कोई यही कहता है। यह आंशिक रूप से सच भी हो सकता है। यदि एप्लिकेशन यथोचित डिज़ाइन किया गया है, तो फ्रंट-एंड बहुत कम करता है।

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

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

ऊपर भी यही तर्क है।


आप तर्क नहीं जीत सकते। इसलिए बहस मत करो।

"मैं इस उत्पाद के पुनर्लेखन के लिए पूरी तरह से जिम्मेदार हूं"

उस स्तिथि में,

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

  2. उन परीक्षणों का उपयोग करें जब तक कि कोई व्यक्ति यह नहीं जानता कि परीक्षण काम कर रहा है और पूछता है कि चीजें इतनी अच्छी तरह से क्यों चलती हैं।

मेरे पास फिर से एक ही तर्क था (C ++ से जावा तक) और मैंने बस परीक्षणों का उपयोग किया, हालांकि उन्होंने मुझे नहीं बताया।

मैं बहुत जल्दी विकसित हो रहा था। मैंने सही परिणामों के ठोस उदाहरण मांगे, जो उन्होंने स्प्रैडशीट में भेजे। मैंने स्प्रैडशीट को unittest.TestCase (उन्हें बताए बिना) में बदल दिया और परीक्षण के लिए इनका उपयोग करता है।

जब उपयोगकर्ता स्वीकृति परीक्षण में थे - और गलतियाँ पाई गई थीं - मैंने स्वीकार्यता परीक्षण के दौरान पाई गई समस्याओं को कवर करने के लिए उदाहरणों के साथ स्प्रेडशीट की समीक्षा, सुधार और सुधार करने के लिए कहा। मैंने सही स्प्रैडशीट को unittest.TestCase (उन्हें बताए बिना) में बदल दिया और परीक्षण के लिए इनका उपयोग करता है।

किसी को भी यह जानने की जरूरत नहीं है कि आप सफल क्यों हैं।

बस सफल हो।


बहुत प्रेरणादायक प्रतिक्रिया वहाँ S.Lott :)। मेरे लिए एक कंपनी आर्किटेक्ट द्वारा कहा जाना कठिन था कि मैं "अनावश्यक ओवरहेड बना रहा हूं"। मैं किसी भी अज्ञात के साथ परियोजना में देरी करने के लिए उन्हें नहीं देखा जा सकता है, कि अंततः अगर परियोजना देर से आई, तो वे बस मेरे द्वारा किए गए परीक्षण पर उंगली उठा सकते हैं और अनुबंध समाप्त कर सकते हैं। जैसा कि आप कहते हैं, बाद में उन्हें यह साबित करने में चुपके कि यह कैसे मदद करता है शायद सही तरीका है। आप तर्क के दृष्टिकोण से बिल्कुल सही हैं, मेरे पास कोई आधार नहीं है, और न ही वे।
मार्टिन ब्लेयर

फ्रंट-एंड बहुत अधिक डिज़ाइन समस्या क्यों है? आजकल AJAX जैसी कई तकनीकें फ्रंट-एंड में बहुत कुछ करती हैं।
卢 卢 शेंगयुआन लू

@ @ To 远 शेंगयुआन लू: जीयूआई "लुक" का परीक्षण करना कठिन है। आप फोंट और रंगों का परीक्षण कर सकते हैं। हालांकि, ब्राउज़र क्विर्क स्वचालित परीक्षण के साथ सटीक प्लेसमेंट और आकार का परीक्षण करने के लिए बहुत कठिन बनाते हैं।
S.Lott

@ मार्टिन ब्लोर: "न तो वे करते हैं।" ठीक। जो कोई भी कहता है कि परीक्षण किसी तरह जादुई रूप से जोखिम को जोड़ देगा, वह पागल है। आपको वैसे भी परीक्षण करना होगा - यह अपरिहार्य है। आप अच्छी तरह से (TDD का उपयोग करके) परीक्षण कर सकते हैं या खराब और बेतरतीब ढंग से परीक्षण कर सकते हैं। गरीब, बेहूदा परीक्षण की योजना मेरे लिए जोखिम भरी है। लेकिन तब तक कोई आधार चर्चा नहीं है जब तक कि "ना-कहने वालों" के हाथ अनुभव न हो।
S.Lott

5

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

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


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

3

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

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

संभावना यही है कि वे यूनिट परीक्षण के लिए देखभाल क्यों नहीं करते हैं।

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

पुनश्च। मैं आपके अन्य प्रश्नों को देखता हूं, जहां आप अमूर्तता की परतों की आलोचना करते हैं, और यहां आप डि कंस्ट्रक्टर्स की कमी की आलोचना करते हैं! अपना मन बनालो :)


2

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


2

इंगित करें कि विकास की लागत X के दौरान बग ढूंढना, 10X परीक्षण के दौरान और 100X परिनियोजन के बाद। देखें कि क्या वे कम से कम आपको एक पायलट परीक्षण करने की अनुमति देंगे जहां आप एक विशिष्ट मॉड्यूल में टीडीडी को लागू करते हैं, तो अन्य मॉड्यूल के साथ तुलना के साथ पालन करें, क्योंकि वे विकसित, परीक्षण, तैनात और समर्थित हैं। पर्याप्त डेटा को देखते हुए, आपको यह प्रदर्शित करने में सक्षम होना चाहिए कि TDD मॉड्यूल में कोड का उत्पादन करने के लिए कम प्रयास का उपयोग कैसे किया गया था। सौभाग्य।


2

हां, परीक्षण बनाए रखना एक बोझ है। उन्हें अपडेट करना, अपने परीक्षण डेटा को अपडेट करना: यह सब आपका समय बेकार करता है।

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


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

2

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

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