इकाई और एकीकरण परीक्षण: यह एक पलटा कैसे बन सकता है


27

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

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

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

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

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


7
यदि ओपी उपयुक्त लिंग रूप का उपयोग कर रहा है, तो प्लस और माइनस वोट की पेशकश की जा रही है। निश्चित रूप से सवाल की गुणवत्ता में क्या पूछा जा रहा है और साइट के लिए इसकी प्रासंगिकता है, और न ही व्यक्तिपरक विचारों पर कि क्या वह और वह दोनों को शामिल किया जाना चाहिए या नहीं उसे सेक्सिस्ट माना जाना चाहिए। इस तरह के मैत्रीपूर्ण रिश्वत वास्तव में साइट की प्रतिष्ठा में मदद नहीं करेगा ... या इसमें शामिल लोग। (मैं सिर्फ कह रहा हूँ!)
रॉबिन्स

@ S.Robins, आप सही हैं और अगर मैं नहीं सोचता कि यह एक अच्छा सवाल नहीं है, तो मैं इसे अपवोट नहीं करूंगा। लेकिन टिप्पणी वैसे भी आपत्तिजनक है। और जब मैं प्रोग्रामर के बीच ऐसी चीजें बहुत बार देखता हूं तो मैं इसे अपने आप में पकड़ नहीं पाता।
सुपर

2
@ सुपर लोल! मुझे पता है कि आपका क्या आशय है। ओवरहैंडेड पॉलिटिकल करेक्टनेस को मेरा बकरा मिल गया। मैं या तो पूरी तरह से लिंग तटस्थ लिखता हूं, या "वह" विशेष रूप से केवल इसलिए उपयोग करता हूं क्योंकि यह आपके स्वयं के लिंग के संदर्भों से संबंधित है। मेरी टिप्पणी हालांकि आम तौर पर अधिक लागू होने का इरादा थी, और किसी विशेष व्यक्ति को बाहर करने के लिए विशेष रूप से नहीं। ;)
रॉबिन्स

1
मैंने कुछ टिप्पणियों को शुद्ध किया है। + -1 टिप्पणियाँ शुद्ध शोर हैं और जब उन्हें पोस्ट के लिए कुछ भी उपयोगी नहीं जोड़ा जाता है, तो उन्हें टाला जाना चाहिए - मार्गदर्शन के लिए हमारे टिप्पणी विशेषाधिकार पृष्ठ को पढ़ें , और कृपया सॉफ़्टवेयर इंजीनियरिंग चैट में ऐसी बातचीत करें । आपत्तिजनक टिप्पणियों के लिए, कृपया उन्हें इस तरह ध्वजांकित करें।
यानि

जवाबों:


13

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

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

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


संस्कृति परिवर्तन के लिए +1, और उदाहरण के लिए आपको अग्रणी देने के लिए मेरे पास एक और +1 होगा। अच्छा जवाब।
एरिक डायट्रिच

5

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

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

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

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

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


3

वास्तविक कोड के रूप में एक ही समय में यूनिट परीक्षण नहीं लिखने पर हम में से कोई भी वास्तव में बुरा महसूस करता है

निश्चित नहीं है कि आप "एक ही समय में" से क्या मतलब है, लेकिन वास्तविक कोड से पहले उन्हें लिखने के बारे में कैसे ?

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

मेरे अनुभव में, टेस्ट-फ़र्स्ट (टीडीडी स्टाइल), हालाँकि, कुछ ऐसी चीज़ है जो आप जल्दी कर सकते हैं क्योंकि इसमें कम से कम 2 तात्कालिक, मूर्त, एंडोर्फिन-रिलीज़ करने के फायदे हैं:

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

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

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


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

0

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

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

और अधिक पिछड़े हुए कुछ को कम संभावना है कि आप इसे एक आदत बना लेंगे


0

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

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


0

प्रोग्रामर का एक समूह है जिसमें सभी स्वाभाविक रूप से कुछ करना चाहते हैं एक यूटोप्टी है (विशेषकर जब एक बड़े समूह के बारे में बात कर रहे हों)।

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

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

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

यदि मानकों और नियमों को जोड़ना फिलहाल कठिन है, तो कम से कम भविष्य की परियोजनाओं में उन्हें जोड़ने के बारे में सोचें।

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