जोएल के टेस्ट से टेस्ट संचालित विकास क्यों गायब है?


23

मैं जोएल स्पोल्स्की के इस ब्लॉग को बेहतर कोड के 12 चरणों के बारे में पढ़ रहा था । टेस्ट ड्रिवेन डेवलपमेंट की अनुपस्थिति ने मुझे वास्तव में हैरान कर दिया। इसलिए मैं प्रश्न को गुरुओं के सामने फेंकना चाहता हूं। क्या TDD वास्तव में प्रयास के लायक नहीं है?


13
वह लेख बुधवार, 09 अगस्त, 2000 (लगभग 12 साल पहले) लिखा गया था। ऐसा नहीं है कि उस समय टीडीडी आसपास नहीं था, लेकिन मुझे विश्वास नहीं है कि यह लगभग चर्चा का आनंद लेता है कि यह इन दिनों करता है।
माइक

12
जोएल परीक्षण जेनेरिक दिशानिर्देशों का एक सेट है। नहीं सब कुछ है कि "लायक प्रयास" वहाँ में फिट हो सकता है।
यानिस

2
' मैं एक सॉफ्टवेयर टीम की गुणवत्ता को रेट करने के लिए अपने स्वयं के, बहुत गैर जिम्मेदाराना, मैला परीक्षण के साथ आया हूं। इसके बारे में महान बात यह है कि इसमें लगभग 3 मिनट लगते हैं ... जोएल टेस्ट के बारे में सबसे साफ बात यह है कि प्रत्येक प्रश्न के लिए त्वरित हां या नहीं प्राप्त करना आसान है। आपको लाइनों-ऑफ-कोड-प्रति-दिन या औसत-बग-प्रति-विभक्ति-बिंदु ... का पता लगाने की ज़रूरत नहीं है - '' यह निर्णय लेने पर कि आपकी परियोजना को TDD का लाभ होगा और 3 मिनट से अधिक समय लगेगा, और , औसत-बग-प्रति-विभक्ति-बिंदु लगाने की आवश्यकता हो सकती है - यही कारण है कि यह सूची में नहीं है
gnat

जोएल स्टैक plz में ले जाएँ। यह एक दिलचस्प q है।
एरिक रेपेन

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

जवाबों:


30

जोएल ने उस पोस्ट को लिखने के दो साल बाद 2002 में केंट बेक की किताब के सामने आने से पहले टेस्ट संचालित विकास लगभग अज्ञात था । फिर सवाल यह हो जाता है कि जोएल ने अपने परीक्षण को अपडेट क्यों नहीं किया, या यदि 2000 में टीडीडी को बेहतर जाना जाता तो क्या वह इसे अपने मानदंडों में शामिल करता?

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


1
इसके अलावा ... ओह आप कुछ हद तक टीडीडी मार रहे हैं क्या आप नहीं हैं?
एरिक रेपेन


27

जोएल ने वास्तव में इसे कुछ स्थानों पर विशेष रूप से संबोधित किया है।

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

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

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


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

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

2
@MasonWheeler: आप गंभीरता से तर्क दे रहे हैं कि संकलक- / प्रकार-सुरक्षा इकाई परीक्षणों की आवश्यकता को दूर करता है? आप TDD के डिज़ाइन लाभों को भी अनदेखा कर रहे हैं, लेकिन इससे भी महत्वपूर्ण बात यह है कि आपके पास किसी भी चीज़ को फिर से शुरू करने का एक समय होना चाहिए। इसके विपरीत, इसके विपरीत देखा गया है: उदाहरण के लिए। .NET डेवलपर्स जो एक TDD कार्यप्रणाली का अनुसरण करते हैं, अचानक एक कोडाइल को खुश करने के लिए कोड की मात्रा से खुद को निराश पाते हैं जो बदले में तेजी से अप्रभावी होता है।
pdr

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

3
@ पीडीआर यूनिट परीक्षण आपके कोड को साबित नहीं करते हैं, वे ज्यादातर सिंटैक्स चेकर हैं, लेकिन विकास के दौरान बहुत उपयोगी हो सकते हैं। एकीकरण और सिस्टम परीक्षण हालांकि बहुत अधिक समझ में आता है। इसके अलावा, सांख्यिकीय रूप से टाइप की गई भाषाओं में अधिकांश रिफैक्टरिंग को सुरक्षित साबित किया जा सकता है, वास्तव में यही एक रिफैक्टिंग है - ज्ञात "सुरक्षित" संचालन का एक सेट जो आपके कोड को परिवर्तनों को प्रस्तुत किए बिना बदल देता है। एक स्थिर भाषा में, IDE अक्सर आपके लिए ये परिवर्तन कर सकता है और आश्वस्त कर सकता है कि वे सुरक्षित हैं, गतिशील भाषाओं में अक्सर कुछ असंभव होता है, इसलिए उसी सुरक्षा के साथ सहायता करने के लिए यूनिट परीक्षणों की आवश्यकता होती है
बिल K

25

जोएल स्पोलस्की ने खुद इस सवाल का जवाब 2009 में दिया :

जोएल: टेस्ट ड्रिवेन डिवेलपमेंट पर एक बहस चल रही है ... क्या आपको हर चीज के लिए यूनिट टेस्ट करना चाहिए, उस तरह का सामान ... बहुत सारे लोग मुझे लिखते हैं, जोएल टेस्ट को पढ़ने के बाद, यह कहने के लिए, "आपके पास 13 वां होना चाहिए यहाँ पर बात: यूनिट टेस्टिंग, आपके सभी कोड के 100% यूनिट टेस्ट। "

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

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

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


2
वास्तव में? ओपल के सवाल के जोएल के खुद के जवाब को पोस्ट करने पर डाउनवोट्स?
रॉस पैटरसन

1
मुश्किल से आंकड़ा। कुछ लोग वोट का उपयोग "मुझे मंजूर है" के बजाय "यह उपयोगी है" का मतलब है। यह स्पष्ट रूप से स्वीकृत उत्तर होना चाहिए क्योंकि यह निश्चित है।
ब्रायन ओकले

मैंने कभी ऐसे प्रोजेक्ट पर काम नहीं किया जिसमें 100% टेस्ट कवरेज हो। लेकिन अगर आपके पास 0% परीक्षण कवरेज है ... ... तो यह बहुत सुंदर है।
क्ज़कई

धन्यवाद! मुझे लगता है कि इसे स्वीकृत उत्तर के रूप में चिह्नित किया जाना चाहिए।
जलाल

5

कोई भी नहीं, लेकिन योएल जवाब दे सकता है कि निश्चित रूप से। लेकिन हम कुछ कारणों / टिप्पणियों की कोशिश कर सकते हैं।

सबसे पहले, परीक्षण जोएल के टेस्ट से अनुपस्थित नहीं है

  • टेस्ट का उल्लेख सीधे 12 चरणों में दो बार किया जाता है (10 और 12)
  • बिल्ड का अस्तित्व पहले बिंदुओं में से एक है। निर्माण होने का विचार यह देखने की क्षमता है कि क्या वे टूटते हैं, इसलिए हम यहां परीक्षण के बारे में बात कर रहे हैं।

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

तीसरा, मुझे लगता है कि किसी ने भी नहीं कहा (यहां तक ​​कि जोएल) कि उन बिंदुओं पर जहां "केवल समय के लायक हैं" (वैसे, "क्या आप प्रोग्राम करते हैं" उस पर नहीं है), बस यह कि आने वाले समय में पूछने के लिए अच्छे त्वरित प्रश्न हैं एक सॉफ्टवेयर टीम के संपर्क में, चाहे भविष्य की टीम के सदस्य के रूप में या यहां तक ​​कि एक ग्राहक के रूप में - यह एक सूची है जो मैंने अपने आसपास के कुछ गैर तकनीकी लोगों को दी है जो इस बात की तलाश कर रहे थे कि उनका अपना आईटी विभाग कितना अच्छा / बुरा था। यह सब कुछ नहीं है, लेकिन तीन मिनट में हरा देना वास्तव में बुरा है।


3
"क्या आप टीडीडी करते हैं?" निश्चित रूप से हां-ना के सवाल के रूप में फिट बैठता है। और इसके द्वारा मेरा मतलब है कि यह एक ऐसा सवाल है जिसका जवाब हर कोई जोरदार "हाँ" के साथ देता है, जिसका असल में मतलब है "नहीं"।
यानिस

2
@ यानिसरिज़ोस: बहुत पसंद है "क्या आप सबसे अच्छे उपकरण का उपयोग कर सकते हैं जो पैसे खरीद सकते हैं?" (हां ... वेल्लल ... कारण के भीतर।) और "क्या प्रोग्रामर के पास काम करने की स्थिति शांत है?" (ओह हाँ ... wellllll ... आपके संदर्भ के मुद्दे पर चुप के लिए निर्भर करता है, मुझे लगता है।)
PDR

@pdr इस बात पर निर्भर करता है कि क्या आप खुली खिड़कियों से चुपचाप अंदर आने वाले सायरन की आवाज पर विचार करते हैं।
रॉबर्ट हार्वे

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