लोग अपने परीक्षण सूट को कैसे बनाए रखते हैं?


17

विशेष रूप से, मैं निम्नलिखित पहलुओं के बारे में उत्सुक हूं:

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

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


4
विरोधाभास करने के लिए: परीक्षण कौन करता है?
कोनराड रुडोल्फ

जवाबों:


11

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

लंबा जवाब:

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

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

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

मैंने पहले प्रश्न के लिए जो लिखा है, वह आपके दूसरे प्रश्न के उत्तर का हिस्सा है। मैं यहाँ निम्नलिखित बिंदुएँ भी जोड़ूँगा:

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

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

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

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

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

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

9

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

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

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

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

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