क्या यूनिट परीक्षण प्रयास के लायक है? [बन्द है]


572

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


25
आप ऐसा कैसे पूछ सकते हैं .. यूनिट परीक्षण इतना हिप है :)? गंभीरता से ... सामान्य विचार समान है ... यदि आपको लगता है कि लागत से लाभ होता है तो इकाई परीक्षण करें ... यदि आपके पास अन्यथा विश्वास करने के कारण हैं .. तो कुछ और खोजें जो मदद करता है।
शिशु

14
(नियमित रूप से डिबग \ रिलीज़ बिल्ड + क्लासेस + डेडिकेटेड डमी टेस्टर को क्लीन इंटरफेस के साथ दावा करता है)> यूनिट टेस्टिंग
विक्टर सेहर

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

7
@ViktorSehr: इकाई परीक्षण स्वच्छ इंटरफेस के विरोध में नहीं हैं, वास्तव में वे टीडीडी को लागू करते समय विपरीत हैं। या तो वह, या ड्राइवर सीट + स्टीयरिंग व्हील> गेराज।
जोनास बिस्ट्रॉम

5
यूनिट परीक्षण समय की एक बड़ी बर्बादी है जो शायद ही कभी बग को उजागर करता है लेकिन बग-फिक्सिंग और विकास समय और बजट के 30% को दूर करता है
डोमिनिक

जवाबों:


722

हमारे कार्यालय में हर दिन एक एक्सचेंज होता है जो कुछ इस तरह से होता है:

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

विवरण दैनिक बदलते हैं, लेकिन भावना नहीं है। यूनिट परीक्षण और परीक्षण-संचालित विकास (टीडीडी) में बहुत सारे छिपे हुए और व्यक्तिगत लाभ हैं और साथ ही स्पष्ट हैं कि आप वास्तव में किसी को तब तक समझा नहीं सकते जब तक कि वे स्वयं ऐसा नहीं कर रहे हैं।

लेकिन, इसे अनदेखा करते हुए, यहाँ मेरा प्रयास है!

  1. यूनिट टेस्ट आपको कोड को जल्दी से बड़ा बदलाव करने की अनुमति देता है। आप जानते हैं कि यह अब काम करता है क्योंकि आपने परीक्षण चलाए हैं, जब आप अपने द्वारा किए जाने वाले परिवर्तनों को करते हैं, तो आपको परीक्षणों को फिर से काम करने की आवश्यकता होती है। इससे घंटों की बचत होती है।

  2. TDD कोडिंग को रोकने के लिए आपको एहसास करने में मदद करता है। आपके परीक्षण आपको विश्वास दिलाते हैं कि आपने अभी के लिए काफी कुछ किया है और ट्विकिंग को रोक सकते हैं और अगली चीज पर आगे बढ़ सकते हैं।

  3. परीक्षण और कोड बेहतर कोड प्राप्त करने के लिए एक साथ काम करते हैं। आपका कोड खराब / छोटी हो सकता है। आपका परीक्षण खराब / छोटी गाड़ी हो सकता है। TDD में आप दोनों के खराब होने की संभावना पर बैंकिंग हैं / छोटी गाड़ी के कम होने की। अक्सर यह परीक्षण होता है जिसे ठीक करने की आवश्यकता होती है लेकिन यह अभी भी एक अच्छा परिणाम है।

  4. टीडीडी कब्ज को कम करने में मदद करता है। जब परीक्षण लिखने से पहले एक बड़े और कठिन काम का सामना करना पड़ता है, तो आप जल्दी से आगे बढ़ेंगे।

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

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

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

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

  9. अच्छी इकाई परीक्षण दस्तावेज़ में मदद कर सकते हैं और परिभाषित कर सकते हैं कि कुछ करना चाहिए

  10. यूनिट परीक्षण कोड के पुन: उपयोग में मदद करते हैं। अपने कोड और अपने परीक्षण दोनों को अपने नए प्रोजेक्ट पर माइग्रेट करें । परीक्षणों को फिर से चलाने तक कोड को घुमाएँ।

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


क्या प्रस्तुति आप एक .xul लिंक है?
user2427

3
सवाल यूनिट टेस्टिंग का था। टीडीडी इकाई परीक्षण की तुलना में एक पूरी अलग चीज है।
ज़ुनत्ज़ु

421

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

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

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

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

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


15
कमाल का किस्सा!
सैंडर वर्सलुइज

68
आपके विचार मेरे लिए पेचीदा हैं और मैं आपके समाचार पत्र की सदस्यता लेना चाहता हूं।
क्रिस्टोफर पार्कर

165
बकवास, मैंने पहले ही परीक्षण कर लिया है लेकिन अब आप मुझे ऐसा महसूस कराते हैं कि मुझे जिम जाने की आवश्यकता है।
विंस

16
मुझे भी पसंद नहीं है। मैं एक गीक के रूप में और एक इंसान के रूप में असफल हूं।
ग्रेग

13
+1: बहुत सारे प्रबंधक यूनिट टेस्टिंग की प्रशंसा करेंगे, लेकिन इसका मतलब यह नहीं है कि वे इसके लिए तब चिपकेंगे जब यह मायने रखता है ... आपको वास्तव में आपके लिए यूनिट टेस्टिंग कार्य करने के लिए एक नई नौकरी खोजने की आवश्यकता हो सकती है। - शानदार अंक। सच सच।
जिम जी। 18

136

समझाने का सबसे अच्छा तरीका ... एक बग ढूंढें, इसके लिए एक इकाई परीक्षण लिखें, बग को ठीक करें।

वह विशेष बग कभी भी फिर से प्रकट होने की संभावना नहीं है, और आप इसे अपने परीक्षण से साबित कर सकते हैं।

यदि आप यह पर्याप्त करते हैं, तो अन्य लोग जल्दी से पकड़ लेंगे।


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

7
@ री - साबित बग रिपोर्ट शानदार है, लेकिन आप केवल बग ONCE को पुन: पेश करने जा रहे हैं। 2 साल बाद, आपकी यूनिट परीक्षण अभी भी कोड की जाँच करने जा रही है, लंबे समय के बाद बग रिपोर्ट को बंद कर दिया गया है।
ओरियन एडवर्ड्स

4
यह ठीक बग 1 ... परीक्षण ... अच्छा बचाता है। उपयोगकर्ताओं को बग 2 ... ठीक ... परीक्षण ... अच्छा लगता है। उपयोगकर्ता बग 1 को फिर से ढूंढते हैं। बल्कि, कुल्ला, दोहराएं। ऐसा इसलिए होता है क्योंकि एक बग के लिए आपका फिक्स, दूसरे का कारण बनता है, और इसके विपरीत।
कैफ़ीक गीक 30'10

1
@ राई मियासाका: "हो सकता है कि अगर आपके पास कई लोग परियोजना को बनाए रखते हैं" - मैं कहूंगा कि लगभग सभी गैर-तुच्छ परियोजनाएं करते हैं। के रूप में "बस एक टिप्पणी छोड़": समस्या यह है कि वहाँ (यानी हो सकता है जाएगा ) अन्य कोड के साथ बातचीत जो फिर से संगठित करने के लिए बग के कारण हो सकता हो। इसलिए आपको वास्तव में इसके लिए परीक्षण करना होगा।
सेल्के

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

69

टटलकिंगवालनट पूछता है:

यूनिट परीक्षण के मूल्य की टीम पर संदेह करने वाले डेवलपर्स को समझाने के लिए कुछ अच्छे तरीके क्या हैं?

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

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

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

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

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

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

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

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

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

इससे भी बदतर, शायद सॉफ्टवेयर विकास में एकमात्र निश्चितता यह है कि "परिवर्तन अपरिहार्य है"। मान लें कि सख्त दुकान (90% इकाई परीक्षण / 10% उत्पादन कोड) एक ऐसा उत्पाद बनाती है जिसमें ठीक 2 विशेषताएं हैं (उत्पादन कोड == 1 सुविधा का 5% मानकर)। यदि ग्राहक साथ आता है और 1 सुविधाएँ बदलता है, तो वह 50% कोड (45% इकाई परीक्षण और 5% उत्पादन कोड) को बदल देता है। लैक्स शॉप (10% यूनिट टेस्ट / 90% प्रोडक्शन कोड) में 18 विशेषताओं वाला एक उत्पाद है, जिसमें से कोई भी काम बहुत अच्छा नहीं है। उनका ग्राहक उनकी विशेषताओं में से 4 के लिए आवश्यकताओं को पूरी तरह से बदल देता है। भले ही परिवर्तन 4 गुना बड़ा हो, कोड आधार का केवल आधा हिस्सा ट्रैश हो जाता है (~ 25% = ~ 4.4% यूनिट परीक्षण + 20% उत्पादन कोड)।

मेरा कहना है कि आपको यह संवाद करना होगा कि आप समझें कि बहुत कम और बहुत अधिक इकाई परीक्षण के बीच संतुलन - अनिवार्य रूप से आपने इस मुद्दे के दोनों पक्षों के माध्यम से सोचा है। यदि आप अपने साथियों और / या अपने प्रबंधन को मना सकते हैं, तो आप विश्वसनीयता हासिल करते हैं और शायद उन्हें जीतने का बेहतर मौका है।


47
यदि Vi में बहुत कम विशेषताएं हैं, तो आप इसका उपयोग नहीं कर रहे हैं। ;)
स्टीफन माई

1
स्टीफन के लिए +20, अगर मैं कर सकता था :)
रोब ग्रांट

1
टेस्ट कवरेज पर टेस्टिवस - googletesting.blogspot.com/2010/07/…
बर्थ एफ

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

सरल कोड ब्लॉक के लिए टेस्ट केस लिखना एक प्रतिगमन तंत्र के रूप में कार्य करता है - केवल नकारात्मक जिसे मैंने देखा था और अधिक स्टैक फ्रेम जोड़ रहा है ...
bgs

38

मैंने कई बार इकाई परीक्षण के साथ खिलवाड़ किया है, और मुझे अभी भी आश्वस्त होना है कि यह मेरी स्थिति को देखते हुए प्रयास के लायक है।

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

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

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


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

4
परीक्षण सभी खुशी के बारे में है। मुझे 3900-लाइन पैकेज (पीएल / एसक्यूएल) मिला है जो स्वचालित पोस्टिंग को सामान्य लेज़र सिस्टम में संभालता है। अब, मुझे व्यक्तिगत रूप से एकाउंटेंट के साथ काम करने से नफरत है - वे भिन्नात्मक पेनीज़ और सामान जैसी छोटी चीज़ों के बारे में बहुत पसंद करते हैं। बंचा गुदा-प्रतिगामी अंकगणित गीक्स ... मैं दुन्नो। लेखांकन पैकेज के लिए मेरी इकाई परीक्षण पैकेज लगभग 22000 लाइनें हैं, और सिर्फ 18000 परीक्षणों के तहत चलती हैं। यह हेड ऑनचो को सभी को खुश रखने में मदद करता है, और जब तक कि उसकी छोटी बीनी-काउंटिंग-कैप पर प्रोपेलर खुशी से घूम रहा है, मैं खुश हूं ... :-)
बॉब जार्विस - मोनिका

31

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


26

यूनिट-परीक्षण प्रारंभिक निवेश के लायक है। कुछ साल पहले यूनिट-परीक्षण का उपयोग शुरू करने के बाद से, मुझे कुछ वास्तविक लाभ मिले हैं:

  • प्रतिगमन परीक्षण कोड में परिवर्तन करने के डर को दूर करता है (कोड काम देखने की गर्म चमक की तरह कुछ भी नहीं है या हर बार एक बदलाव किया जाता है)
  • अन्य टीम के सदस्यों के लिए निष्पादन योग्य कोड उदाहरण (और अपने आप को छह महीने में ..)
  • बेरहम refactoring - यह अविश्वसनीय रूप से पुरस्कृत है, इसे आज़माएं!

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


25

आपको यथासंभव कम परीक्षण करना चाहिए!

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

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


23

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


21

[मुझे लगता है कि मैं ऊपर नहीं देख सकते बनाने के लिए एक बिंदु है]

"हर कोई इकाई परीक्षण करता है, वे जरूरी नहीं समझते कि - FACT"

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

यह इकाई परीक्षण है - मूल और बुरी तरह से एक साथ रखा गया है लेकिन आप कुछ मामलों के लिए कोड के टुकड़े का परीक्षण करते हैं।

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

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


16

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

इकाई परीक्षण के साथ समस्या यह है कि इसके लिए एक व्यवहार परिवर्तन की आवश्यकता है, और लोगों के व्यवहार को बदलना बहुत कठिन है। शब्दों के साथ, आपको बहुत से लोग आपसे सहमत होंगे, लेकिन आप चीजों को करने के तरीके में बहुत से बदलाव नहीं देखेंगे।

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

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

रात में परिवर्तन नहीं होगा, लेकिन थोड़ा धैर्य के साथ, आप अपने लक्ष्य को प्राप्त कर सकते हैं।


12

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


11

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

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

मेरे दिमाग में इसका एक उत्कृष्ट उदाहरण एक SqlDataReader है जो ASPX पेज में एक ग्रिड व्यू से जुड़ा हुआ है। कोड सभी ASPX फ़ाइल में है। SQL एक संग्रहीत कार्यविधि में है। आप इकाई परीक्षण क्या करते हैं? यदि पृष्ठ वह करता है जो वह करने वाला है, तो क्या आपको वास्तव में इसे कई परतों में फिर से डिज़ाइन करना चाहिए ताकि आपके पास स्वचालित करने के लिए कुछ हो?


10

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

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

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

सलाह का एक अंतिम टुकड़ा न केवल इकाई को आपके कोड का परीक्षण करना होगा, लेकिन पहले परीक्षण करना शुरू करें ( अधिक के लिए TDD और BDD देखें )


8

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


7

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

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

सामने की तरफ थोड़ा सा अतिरिक्त प्रयास, और यह 10 गुना बाद में भुगतान करता है जब आपको कोर विशेषताओं या कार्यक्षमता के साथ चारों ओर डिंग शुरू करना पड़ता है।

मैंने इस पुस्तक को खरीदा - यह एक एक्सयूनिट परीक्षण परीक्षण ज्ञान की बाइबिल है - टीस शायद मेरे शेल्फ पर सबसे अधिक संदर्भित पुस्तकों में से एक है, और मैं इसे दैनिक सलाह देता हूं: लिंक पाठ


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

7

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

यूनिट टेस्ट लिखने के लिए कम समय लेने से भविष्य में डिबगिंग के कुछ घंटे बच सकते हैं।


+1: यूनिट टेस्ट लिखने के लिए कम समय लेने से भविष्य में डिबगिंग के कुछ घंटे बच सकते हैं। - हाँ!
जिम जी।

7

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

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


क्या आप नए कोड या सुधार के लिए इकाई परीक्षण जोड़ते हैं?
o

6

यूनिट परीक्षण निश्चित रूप से प्रयास के लायक है। दुर्भाग्यवश आपने एक कठिन (लेकिन दुर्भाग्य से सामान्य) परिदृश्य चुना है जिसमें इसे लागू करना है।

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

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


6

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


6

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


ध्यान दें कि लगभग 15 साल पहले, जब इकाई परीक्षण उतना लोकप्रिय नहीं था जितना कि आज है।
fwielstra

1
और Internet Explorer अभी भी कई वेबपृष्ठ को सहेजने में विफल है।
सेस टिम्मरमैन

5

मैंने विषय के बारे में एक बहुत बड़ी ब्लॉग पोस्ट लिखी है। मैंने पाया है कि यूनिट परीक्षण अकेले काम के लायक नहीं है और आमतौर पर समय सीमा में कटौती हो जाती है।

"परीक्षण-बाद" सत्यापन बिंदु से इकाई परीक्षण के बारे में बात करने के बजाय, हमें लागू होने से पहले एक युक्ति / परीक्षण / विचार लिखने के लिए निर्धारित किए गए सही मूल्य को देखना चाहिए।

इस सरल विचार ने सॉफ्टवेयर लिखने के तरीके को बदल दिया है और मैं "पुराने" तरीके से वापस नहीं जाऊंगा।

कैसे पहली परीक्षा ने मेरे जीवन को बदल दिया


1
+1 - और मुझे कहना होगा कि यह दिमाग़ी है कि ब्लॉग प्रविष्टि ने कितने ट्रोल्स को आकर्षित किया है (यदि मैं गलत नहीं हूँ तो आप यहाँ पोस्ट कर सकते हैं)।
जेफ सनातन

हहा सहमत हो गया :) </ reddit फ्रंट-पेज करता है कि ऐसा लगता है>
Toran Billups

3

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

नई रूपरेखा या कोडबेस की खोज करते समय मेरी पसंदीदा चाल में से एक यह है कि चीजों को कैसे काम करना है, यह जानने के लिए 'यह' के लिए यूनिट-टेस्ट लिखना है। यह एक सूखा डॉक पढ़ने के बजाय कुछ नया जानने के लिए एक शानदार तरीका है :)


3

मैं हाल ही में अपने कार्यस्थल में ठीक उसी अनुभव से गुजरा और पाया कि उनमें से अधिकांश सैद्धांतिक लाभ जानते थे, लेकिन विशेष रूप से उन्हें लाभ पर बेचा जाना था, इसलिए यहाँ उन बिंदुओं का उपयोग किया गया था (सफलतापूर्वक):

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

और बड़ा एक ...

  • आपको इकाई परीक्षण की आवश्यकता नहीं हो सकती है, लेकिन जब कोई अन्य व्यक्ति आता है और पूरी समझ के बिना कोड को संशोधित करता है तो यह बहुत सारी मूर्खतापूर्ण गलतियों को पकड़ सकता है जो वे कर सकते हैं।

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

3

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

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

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


3

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

दूसरों को यूनिट-परीक्षणों पर काम करने को नहीं करने के लिए संदेह को व्यक्त करना परीक्षण से मूल्य प्राप्त करने के लिए बहुत अधिक महत्वपूर्ण है और आसान हो सकता है।

नई सुविधाओं की वजह से टूट चुके घंटे अद्यतन परीक्षण खर्च करने से हर बार जब आप भंडार से अपडेट करते हैं तो न तो उत्पादक होता है और न ही मजेदार।


2

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


2

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


2

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


2

मैं यहां बहुमत के विपरीत दृष्टिकोण से सहमत हूं: यूनिट टेस्ट लिखना ठीक नहीं है विशेष रूप से प्रोटोटाइप-हैवी प्रोग्रामिंग (उदाहरण के लिए एआई) यूनिट परीक्षण के साथ संयोजन करना मुश्किल है।

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