मेरी कंपनी में स्वचालित परीक्षण विफल क्यों रहता है?


178

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

कुछ अवलोकन और प्रश्न:

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

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

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

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

यह हमारे लिए काम क्यों नहीं करता है? आपने इसे अपनी कंपनी में कैसे काम किया?


14
आपकी तकनीक क्या है?
फ्लोरियन मार्गाइन

7
WebForms ठीक से यूनिट परीक्षण के लिए लगभग असंभव हैं। प्रस्तुति तर्क को एक परीक्षण योग्य घटक पर ले जाने के लिए आप एक MVP (मॉडल / दृश्य / प्रस्तुतकर्ता) पैटर्न का उपयोग कर सकते हैं।
पीट

12
@MasonWheeler: दोनों ही मामलों में, आपने एक भयानक तर्क का निर्माण किया है जो परिसर को पहले स्थान पर स्वीकार नहीं करता है: यानी कि इकाई परीक्षण शुद्धता साबित करने के लिए मौजूद हैं।
स्टीवन एवर्स

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

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

जवाबों:


89

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

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

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

यहाँ कुछ संसाधन हैं जो मुझे उपयोगी लगे हैं:

http://misko.hevery.com/attachments/Guide-Writing%20Testable%20Code.pdf

http://www.agitar.com/downloads/TheWayOfTestivus.pdf

संपादित करें:

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


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

इसके अलावा, TDD एंटी-पैटर्न से बचें ।
गैरी रोवे

4
मिसको हेवरी के पास टेस्टेबल कोड लिखने के बारे में यूट्यूब पर कुछ बेहतरीन वीडियो भी हैं जो मुझे अमूल्य लगते हैं। youtube.com/watch?v=acjvKJiOvXw
डेस्परर्ट

"सुनिश्चित करें कि परीक्षणों को दृश्यता का स्तर मिलता है" - यह सफलता के लिए महत्वपूर्ण है। यदि कोई यह नहीं देख सकता है कि आपके परीक्षण कैसे प्रदर्शन कर रहे हैं तो वे मूल्य नहीं देखेंगे। परीक्षणों को निरंतर एकीकरण के भाग के रूप में स्वचालित रूप से चेक पर चलाया जाना चाहिए और फिर रिपोर्ट किया जाना चाहिए। मैं Tesults ( tesults.com ) पर काम करता हूं और जो कारण मौजूद है वह विशाल प्रभाव परीक्षण दृश्यता प्रदान करता है।
स्किल एम 2

77

कई मायनों में मैं आपकी टीम से सहमत हूं।

  1. अधिकांश इकाई परीक्षण मूल्य में संदिग्ध हैं। चूंकि अधिकांश परीक्षण बहुत सरल प्रतीत होते हैं।

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

  3. वास्तविक कोड की तुलना में यूनिट टेस्ट कोड लिखने में अधिक समय लग सकता है।

  4. यह पता लगाना कि अधिक जटिल कोड का पर्याप्त रूप से परीक्षण कैसे किया जाता है (अर्थात, सामान जिसे आप पूरी तरह से परीक्षण में रुचि रखते हैं) कई डेवलपर्स क्षमताओं से परे है।

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

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

उपर्युक्त में से कुछ को इकाई परीक्षण की पाठ्यपुस्तक द्वारा न जाकर कुछ हद तक समाप्त किया जा सकता है।

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

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

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


24
मैं इससे सहमत हूं .. हमने कुछ टूटने के बाद भी परीक्षण करने की आदत डाल ली है (भले ही वह विकास के दौरान टूट गया हो)। कभी सामने नहीं, बहुत कम इनाम के लिए बहुत समय लगता है।
इज़्काता

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

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

2
अच्छी यूनिट टेस्ट कवरेज के बिना, आप कैसे रिफ्लेक्टर करते हैं? या बिना रीफैक्टरिंग के, आप कैसे कोड को धीरे-धीरे पतित होने से रोकने के लिए अस्वीकार्य है?
केविन क्लाइन

1
@ लियोनार्डो वे नहीं थे - वे कुछ भी बदलने से डरते थे। या उन्होंने उस सभी तकनीकी ऋण को बचा लिया और कुछ सप्ताह / महीने बाद इसे एक गांठ में संबोधित करने के लिए रख दिया।
ग्रीमेफ

33

मुख्य अपराधी डेटाबेस को ठुकरा रहा है / ठुकरा रहा है या कुछ भी सरल नहीं है।

और आपकी समस्या है।

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

एक डेटाबेस को बाहर निकालना आसान मृत होना चाहिए। अपने इंटरफ़ेस के बजाय अपने परिणाम प्रदान करने के लिए कुछ DB पर जा रहे हैं, आप एक साधारण हार्डकोड ऑब्जेक्ट में डालते हैं। यदि आप ऐसा नहीं कर सकते हैं, तो आपके डिजाइन / वास्तुकला में समस्याएं हैं। आपका कोड मानता है कि यह एक डेटाबेस में जा रहा है, या आपके पास इसे अलग करने के लिए इंटरफ़ेस अमूर्त नहीं है।

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


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

8
@fennec - यूनिट परीक्षण डेटाबेस का परीक्षण करने के लिए नहीं हैं, वे वहां कोड का परीक्षण करने के लिए हैं जो डेटाबेस मानों पर कार्य करने के लिए निर्भर करता है।
तेलस्टिन

3
जब तक आप उस इकाई का परीक्षण नहीं कर लेते, जब तक कि डेटाबेस में हेरफेर न हो जाए, तब तक सब ठीक और अच्छा रहेगा। : पी, जो बहुत से लोगों के लिए, उनके कोड का एक बहुत कुछ है।

4
@fennec - यह सुनिश्चित करने के लिए कि आपके राइट सही ऑब्जेक्ट लिख रहे हैं, यह सुनिश्चित करने के लिए इंटरफ़ेस को मृत करने के लिए मृत सरल से थोड़ा अधिक जटिल है। यह केवल तब कठिन होता है जब आपकी कक्षाएं SQL को सीधे आपके इंटरफ़ेस को भेजने की कोशिश कर रही हों (पढ़ें: आपके पास एक भयानक डिजाइन है)।
तेलेस्टिन

5
@Telastyn शायद मुझे गलतफहमी हो रही है लेकिन अंततः कुछ वर्ग को नीचे उतरने और गंदे होने और SQL लिखने या फ़ाइल लिखने या GPU के साथ डेटा या इंटरफ़ेस भेजने की आवश्यकता है। अधिकांश अमूर्त में कुछ स्तर पर अपरिहार्य लीक होते हैं; वे बस व्यावहारिक हैं और जरूरी नहीं कि भयानक हो।
अपरेंटिस कतार

21

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

स्वचालित परीक्षण अच्छी तरह से करने के लिए, आपको किसी ऐसे व्यक्ति की आवश्यकता है जो एक संसाधन और एक इंजीलवादी है, और जिसने उच्च स्तर के प्रबंधन से खरीदा है।

किसी भी अन्य फुर्तीली परियोजना की तरह अपने स्वचालित परीक्षण विकास का इलाज करें। एक नियमित आधार पर पूर्ण परीक्षण का उत्पादन करें।

टिप्पणी से जोड़ना: यह एक प्रबंधन समस्या है। क्या दस्तावेज पर "कोड" माना जाता है इससे पहले कि यह दस्तावेज है? इसमें जाँच होने से पहले? इससे पहले कि यह शामिल है और यूनिट परीक्षण पास करता है?

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


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

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

1
@SkipHuffman आपकी टिप्पणी को वर्तमान उत्तर के लिए एक संपादन के रूप में जोड़ा जाना चाहिए।
14

15

इन जमीनी नियमों का पालन करें। टेस्ट:

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

  2. आप अभी भी केवल सफल होने जा रहे हैं यदि वे परीक्षण, अब नियमित रूप से चल रहे हैं, रास्ते में नहीं आते हैं । जिससे हम परीक्षण करते हैं:

    ए। उनके द्वारा प्रदान किए जाने वाले मूल्य के लिए (विषय-वस्तु) चलाने में बहुत लंबा समय नहीं लेना चाहिए! अपने परीक्षण तेजी से धधकते हुए करें। लोगों को उन परीक्षणों की जांच न करने दें जो उन्हें चलाने के लिए आपके समय की बर्बादी होने जा रहे हैं!

    ख। अविश्वसनीय नहीं होना चाहिए। यदि संभव हो तो मल्टीथ्रेडेड परीक्षणों से बचें। अपने अन्य कोड की तरह अपने परीक्षणों में इंजीनियरिंग प्रथाओं को लागू करें: विशेष रूप से - कोड आपके परीक्षणों की समीक्षा करें!

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

और अंत में, नियम संख्या 3. टेस्ट को न केवल नकारात्मक मूल्य प्रदान करने में विफल होना चाहिए, जैसा कि नियम 2 में, उन्हें सकारात्मक मूल्य प्रदान करना होगा। टेस्ट ...

  1. वास्तव में आपको वे कुछ बता रहे होंगे जिनकी आपको परवाह है जब वे असफल होते हैं! (अस्पष्ट त्रुटि संदेशों के साथ कोई परीक्षण नहीं, या केवल आपको हास्यास्पद शिकायतें दे रहा है जैसे 'आप विंडोज 2008 मशीन पर परीक्षण चलाना भूल गए', कृपया!)।

नियम # 3 का उल्लंघन करने का एक लोकप्रिय तरीका गलत चीज़ का परीक्षण करना है । यह कभी-कभी होता है क्योंकि एक परीक्षण बहुत बड़ा है या बहुत अधिक है। लेकिन आमतौर पर यह बात आती है कि ग्राहक जिस चीज की परवाह नहीं करेगा, और अप्रासंगिक कार्यान्वयन विवरणों का परीक्षण करेगा। (लेकिन कभी-कभी कार्यान्वयन विवरण का परीक्षण भी एक कुशल परीक्षण करता है - IMO यह सिर्फ निर्णय लेने का अभ्यास करता है।)

निष्कर्ष: ये जमीनी नियम आपको एक स्थायी परीक्षण अनुशासन की सामान्य दिशा में इंगित करते हैं , जो कि आप पूरी तरह से तरस रहे हैं। परीक्षण करते समय, अपने आप से पूछें कि क्या यह परीक्षण वास्तव में टिकाऊ और रखरखाव योग्य है। याद है:

  • यदि परीक्षण टिकाऊ नहीं होते हैं, तो वे उपयोग में नहीं आते हैं, और इस तरह बर्बाद हो जाते हैं
  • यदि परीक्षण स्थायी नहीं हैं, तो आप परीक्षण करना बंद कर देते हैं, और आपकी टीम परीक्षण में बेहतर होना बंद कर देती है! और, अंतिम बिंदु:

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


12

1. क्या यह वास्तव में काम करता है?

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

2. कोई भी वास्तव में अनुभवी नहीं है या जानता है कि स्वचालित परीक्षण कैसे ठीक से करना है।

एक सलाहकार प्राप्त करें (कोई है जो जानता है कि यह कैसे ठीक से किया जाता है)। या, अधिक समय निवेश करें। विकल्प के लिए बड़ी परीक्षण टीम है, जो मैन्युअल रूप से एक ही परीक्षण करते हैं (जो त्रुटि प्रवण है)।

3.हमारे पास 20 अच्छे अनुभवी डेवलपर्स के साथ काम करने का एक बड़ा प्रोजेक्ट है। तो यह इकाई परीक्षण / एकीकरण परीक्षण शुरू करने के लिए एक शानदार वातावरण होना चाहिए। यह हमारे लिए काम क्यों नहीं करता है? आपने इसे अपनी कंपनी में कैसे काम किया?

मैं उन्हें "अच्छा अनुभवी डेवलपर्स" नहीं कहूंगा, अगर वे यूनिट परीक्षण करने से इनकार करते हैं। परीक्षण के सकारात्मक लाभों के कई महान लेख हैं (दोनों इकाई और एकीकरण परीक्षण), और अंत में यह उबलता है कि बग आपकी कंपनी की लागत कितनी है । उदाहरण के लिए, मैं एक ऐसी कंपनी में काम करता हूँ जहाँ एक गुणवत्ता मायने रखती है, इसलिए इकाई और एकीकरण परीक्षण अपरिहार्य हैं। आप आसानी से बहुत सारे लेख पा सकते हैं जो बताता है कि इकाई परीक्षण केवल बग की संख्या को 30% तक कम कर रहे हैं! (वास्तव में, यह 20-90% रेंज में है, औसतन 30% है, लेकिन यह अभी भी बहुत कुछ है।)

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


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

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

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

1
"यूनिट परीक्षणों पर समय बर्बाद न करें": मैं इसे "बेकार यूनिट परीक्षणों पर समय बर्बाद न करने" के रूप में पुनः प्रकाशित करूंगा। ब्लाइंडली यूनिट परीक्षण सब कुछ समय की एक बड़ी बर्बादी में परिणाम कर सकते हैं।
जियोर्जियो

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

10

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

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

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

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

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

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


Introduce automated tests on the unit test level and build automated integration tests on a solid foundation of unit tests.+1
c69

10

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

यह क्या है कि परीक्षण के एक सूट से टीम या एक व्यक्तिगत डेवलपर को लाभ होता है, जबकि यह लिखना एक ऐसा करने के लिए एक लागत है, ज्यादातर समय।

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

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


8

यह दिलचस्प है कि व्यवसाय डेवलपर्स की तुलना में अधिक प्रो-परीक्षण है! यह मुझे लगता है कि आपकी सबसे बड़ी चुनौती अपने डेवलपर्स प्रतिरोध को बदलने के लिए दूर होगी; यूनिट टेस्टिंग को शामिल करने के लिए उन्हें अपनी नौकरी की अपनी समझ को फिर से परिभाषित करने की आवश्यकता है।

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

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

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

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

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


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

7

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

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

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

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

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

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

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

TL: DR: अधिकांश लोगों को लगता है कि परीक्षण आसान है और आप मौजूदा कोड में परीक्षणों को आसानी से वापस कर सकते हैं। ये दोनों धारणाएं गलत हैं। यदि आप इन दोनों तथ्यों को ध्यान में रखते हुए अपनी परियोजनाओं में इकाई परीक्षण कराने के लिए किसी परियोजना को अपनाते हैं तो आपके सफल होने की संभावना अधिक होती है।


संकेत: डाल टीएल? DR: शीर्ष पर - मैं इसे पाने के लिए बस अपने सभी पोस्ट को पढ़ने के लिए था! (जो थोड़े बिंदु को हराता है)
gbjbaanb

4
  • स्वचालित परीक्षण करने के व्यापक अनुभव के साथ आपकी कंपनी में कोई है?

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

  • क्या किसी के पास नेतृत्व की शक्ति है? क्या वे बदलाव की मांग करने में सक्षम हैं?

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

  • क्या आप विकास चक्र में लागू करने और एकीकृत करने के लिए स्वचालित परीक्षण को आसान बनाने के लिए उपकरण और प्रक्रियाएं विकसित कर रहे हैं?

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

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


मुझे नहीं लगता कि डेवलपर्स को आलसी कहना उचित है। हो सकता है कि आपके अनुभव में ऐसा ही हो, लेकिन निश्चित रूप से यह एक सार्वभौमिक सत्य नहीं है।
सैम

4

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

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

आप उससे बचना चाहते हैं।

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

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

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

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


1
मुझे ऐसा कोड पसंद है कि मैं उस कोड से बेहतर पढ़ सकूं जिसे किसी ने ठीक उसी तरह से परीक्षण करने की आवश्यकता महसूस की हो।
एरिक रिपेन

1
सुंदर हरे रंग की टिक मुझे लगता है कि समस्या है - यह किसी प्रकार के खेल में परीक्षण करती है।
gbjbaanb

2

पहले से मौजूद प्रोजेक्ट में बहुत सारे यूनिट टेस्ट जोड़ना कठिन काम है। यदि आपको पहले से ही एक अच्छा नकली ढांचा मिल गया है जो आपके लिए काम करता है तो आपको सबसे कठिन समस्या हल करनी चाहिए।

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

एक बार जब लोगों को आसान चीजों के लिए परीक्षण लिखने की आदत पड़ने लगे तो आपको उम्मीद करनी चाहिए कि वे अपने कोड को अधिक परीक्षण योग्य बनाने के लिए लिखेंगे।

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


2

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

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


1

यह मेरा मजबूत मत है कि इकाई परीक्षण का मूल्य कई कारकों के कारण काफी हद तक कम करके आंका जाता है, क्योंकि कई कारकों के जवाब में पहले से ही हाइलाइट किया गया है।

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

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

लेकिन एक अपवाद है

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

इसके बजाय, यदि डेवलपर अत्यधिक स्वचालित और उच्च-वॉल्यूम-डेटा मॉड्यूल विकसित करने के लिए प्रभारी है, तो वह पूरी तरह से इकाई परीक्षण लिखने और उन्हें परीक्षण बैचों में जमा करने की अधिक संभावना होगी। ऐसा इसलिए है क्योंकि बाहरी डेटा स्रोत (परिवर्तित या नहीं) से परिवर्तित डेटा के साथ एक बड़े XML पेलोड को भरना मानव-प्रवण कार्य नहीं है। कुछ परीक्षण डेवलपर्स अंततः इस विशिष्ट प्रकार के परीक्षणों के लिए एक छोटे और मजेदार फ्रंट एंड का निर्माण करेंगे। जब मैंने अपने मास्टर की थीसिस पर काम किया तो मैं एक लॉगिंग बस पर काम कर रहा था, जो प्रति सेकंड 6000+ syslog संदेश संभाला करती थी और मुझे पैकेट नुकसान और भ्रष्टाचार को मापना था: मैंने स्वाभाविक रूप से लगभग सभी घटकों, विशेष रूप से Syslog Tser के लिए इकाई और तनाव परीक्षण लिखा था।

डेवलपर्स को अधिक इकाई परीक्षण-प्रवण बनाने के लिए

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

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


1

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

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

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

आप इन कारणों के कारण असफल हो जाते हैं

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

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


इकाई- और एकीकरण-परीक्षण के मामले में, जिन लोगों को परीक्षण लिखना चाहिए, वे डेवलपर्स हैं, न कि "परीक्षण इंजीनियर"। (जैसा कि प्रश्न में लिखा गया है, क्यूए, यानी परीक्षण इंजीनियर, वास्तव में पहले से ही स्वचालित यूआई परीक्षण का उपयोग करते हैं।)
पाओलो एबरमन

वास्तविक रूप से, स्वचालित परीक्षण लिखने वाले किसी व्यक्ति के पास विकास कौशल होना चाहिए।
सिद्धार्थ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.