कोड कवरेज गुणवत्ता तर्क का खंडन करने के बारे में कोई भी उपकरण / सुझाव


11

अब मुझे पता है कि लोग इस प्रश्न पर डुप्लिकेट या कई बार पूछ सकते हैं, जिस स्थिति में मैं अपने प्रश्न के उत्तर के साथ प्रासंगिक प्रश्नों के लिंक की सराहना करूंगा।

मैं हाल ही में कोड कवरेज के बारे में कुछ लोगों से असहमत रहा हूं। मेरे पास ऐसे लोगों का एक समूह है जो चाहते हैं कि हमारी टीम कोड कवरेज को पूरी तरह से इस तर्क के आधार पर देखना छोड़ दे कि 100% कवरेज का मतलब अच्छी गुणवत्ता परीक्षण और इस प्रकार अच्छी गुणवत्ता कोड नहीं है।

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

(ऊपर इस तरह से अन्य एसओ सवालों में इसी तरह से चर्चा की गई है - /programming/695811/pitfall-of-code-coverage )

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

जबकि मैं उनकी बात को समझता हूं, मैं अधिक मजबूत उपकरण / रूपरेखा पेश करके कोड कवरेज के लिए अधिक मजबूत मामला बनाने का तरीका खोज रहा हूं जो अधिक कवरेज मानदंडों का ख्याल रखता है(Functional, Statement,Decision, Branch, Condition, State, LCSAJ, path, jump path, entry/exit, Loop, Parameter Value etc)

जो मैं देख रहा हूं वह ऐसे कोड कवरेज टूल और प्रथाओं / प्रक्रियाओं के संयोजन के लिए सुझाव है जो उनके साथ जाने के लिए है जो मेरी सिफारिश के बारे में सहज महसूस करते हुए मुझे इस तरह के तर्कों का मुकाबला करने में मदद कर सकते हैं।

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


संपादित करें: ठेठ कोड कवरेज की कमजोरी के बारे में मेरी समझ के बारे में किसी भी भ्रम को कम करने के लिए, मैं इंगित करना चाहता हूं कि मैंStatement Coverage (या निष्पादित कोड की पंक्तियों) टूल का उल्लेख नहीं कर रहा हूं (बहुत सारे हैं)। वास्तव में यहां हर चीज पर एक अच्छा लेख है जो इसके साथ गलत है: http://www.bullseye.com/statementCoverage.html

मैं सिर्फ बयान या लाइन कवरेज से अधिक के लिए देख रहा था, कई कवरेज मानदंडों और स्तरों में अधिक जा रहा था।

देखें: http://en.wikipedia.org/wiki/Code_coverage#Coverage_criteria

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


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


संपादित करें: अब तक मेरे पास जवाबों से क्या है:

  • परीक्षणों की गुणवत्ता सुनिश्चित करने के लिए कोड समीक्षाओं को परीक्षणों को कवर करना चाहिए
  • टेस्ट फर्स्ट स्ट्रैटिजी उन परीक्षणों से बचने में मदद करती है जो केवल कवरेज% बढ़ाने के लिए तथ्य के बाद लिखे जाते हैं
  • वैकल्पिक उपकरणों की खोज करना जो केवल कथन / रेखा के अलावा परीक्षण मानदंडों को कवर करते हैं
  • कवर किए गए कोड / बगों की संख्या का विश्लेषण कवरेज के महत्व की सराहना करने और एक बेहतर मामला बनाने में मदद करेगा
  • सबसे महत्वपूर्ण बात यह है कि टीम के इनपुट को सही काम करने के लिए और अपने विश्वासों के लिए लड़ने के लिए विश्वास करें
  • ब्लॉक किए गए / # परीक्षण के - बहस योग्य लेकिन कुछ मूल्य रखता है

अब तक के शानदार जवाब के लिए धन्यवाद। मैं वास्तव में उनकी सराहना करता हूं। यह धागा उन शक्तियों के साथ विचार-मंथन के घंटों से बेहतर है।


4
कोई भी कहीं भी 100% कोड कवरेज को पूरा करने का सुझाव नहीं देता है , यह वास्तव में एक मूर्ख है।
जिमी हॉफ

1
धन्यवाद। और मैं पहले से ही जानता हूं और स्वीकार करता हूं। और लोग आमतौर पर 100% कोड कवरेज को 100% स्टेटमेंट (या लाइन) कवरेज के साथ जोड़ते हैं। यह भी विरोध नहीं कर सकता - जिमी, वे सभी जगह आप के लिए देख रहे थे।
मिकज

3
"तब टीम कम गुणवत्ता परीक्षण बनाकर तुरंत प्रतिक्रिया देगी और इस तरह समय बर्बाद करेगी जबकि कोई महत्वपूर्ण गुणवत्ता नहीं" - महान टीम!
पियोट्र पेरक

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

1
@JimmyHoffa - स्पेस क्रिटिकल सॉफ्टवेयर को आमतौर पर 100% कोड कवरेज की आवश्यकता होती है।
मौविसील

जवाबों:


9

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

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

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


+1 यह सुझाव देने के लिए कि परीक्षण लिखने से परीक्षण की गुणवत्ता में सुधार होता है इसलिए कोड कवरेज के साथ पहले टेस्ट का संयोजन निश्चित रूप से सहायक है।
मिकज

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

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

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

धन्यवाद। आप Statement Coverage(या निष्पादित कोड की पंक्तियों) का उल्लेख कर रहे हैं । मैं सिर्फ बयान या लाइन कवरेज से अधिक की तलाश में था, multiple coverage criteriaऔर अधिक और स्तरों में जा रहा था । देखें: en.wikipedia.org/wiki/Code_coverage#Coverage_criteria और en.wikipedia.org/wiki/Linear_Code_Sequence_and_Jump । विचार यह है कि यदि कोई टूल हमें कई मानदंडों के आधार पर हमारी कवरेज बता सकता है तो यह परीक्षण गुणवत्ता का एक उचित स्वचालित मूल्यांकन बन जाता है। मैं किसी भी तरह से यह कहने की कोशिश नहीं कर रहा हूं कि लाइन कवरेज एक अच्छा मूल्यांकन है। वास्तव में यही मेरे प्रश्न का आधार है।
मिकज

6

सबसे पहले, लोग 100% कवरेज की वकालत करते हैं :

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

स्टीव मैककोनेल, कोड पूरा , अध्याय 22: डेवलपर परीक्षण।

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

मैं सुझाव देता हूं कि अपनी परियोजनाओं पर डेटा एकत्र करके और उसका विश्लेषण करके तर्क को हल करें।

डेटा इकट्ठा करने के लिए, मैं व्यक्तिगत रूप से निम्नलिखित टूल का उपयोग करता हूं:

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

एक बार आपके पास (या कुछ समान) होने के बाद, आप अपने स्वयं के डेटा को अधिक बारीकी से देखना शुरू कर सकते हैं:

  • खराब कवर वाली परियोजनाओं में अधिक कीड़े पाए जाते हैं?
  • क्या खराब बग क्लासेस / विधियों में अधिक कीड़े पाए जाते हैं?
  • आदि।

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


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

4

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

यह भरोसे का मुद्दा है , औजारों का नहीं ।

उनसे पूछें कि, यदि वे वास्तव में उस कथन पर विश्वास करते हैं, तो वे टीम पर किसी भी कोड को लिखने के लिए भरोसा करेंगे?


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

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

3

ठीक है, शायद मैंने इसे थोड़ा नाटकीय रूप से पेश किया, लेकिन आपको यह बात समझ आ गई। समस्या एक सजातीय / सुसंगत फैशन में सभी टीमों में सामान्य रूप से प्रक्रियाओं / नीतियों को स्थापित करने के बारे में है।

मुझे लगता है कि यही समस्या है। डेवलपर्स लगातार या वैश्विक नीतियों के बारे में (और अक्सर उत्कृष्ट कारणों के लिए) परवाह नहीं करते हैं, और चाहते हैं कि कॉर्पोरेट नीतियों के अनुपालन के बजाय वे जो सोचते हैं, वह करने की स्वतंत्रता।

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

सामान्य समय:

  1. देव: अरे, देखो - मैंने हमारे डैशबोर्ड में कोड कवरेज मेट्रिक्स जोड़ा है, यह बहुत अच्छा नहीं है?
  2. प्रबंधक: यकीन है, चलो उन पर अनिवार्य लक्ष्य और अनुपालन जोड़ते हैं
  3. देव: कोई बात नहीं, कोड कवरेज बेवकूफ और बेकार है, चलो इसे छोड़ दें

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

2

मेरे अनुभव में, मीट्रिक को सार्थक बनाने के लिए कोड कवरेज के साथ संयोजन करने के लिए कुछ चीजें हैं:

कोड समीक्षा

यदि आप डेवलपर को खराब परीक्षण वापस कर सकते हैं, तो यह खराब परीक्षणों की संख्या को सीमित करने में मदद कर सकता है जो इस अर्थहीन कवरेज प्रदान कर रहे हैं।

बस पर नज़र रखना

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

व्यवहारवाद

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

टेस्ट के कवर / # ब्लॉक

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


+1 अच्छा सुझाव, मैं विशेष रूप से परीक्षण और कोड समीक्षा के कवर / # पसंद है। हालांकि हम पहले से ही कोड की समीक्षा करते हैं, लेकिन यह समीक्षा के महत्व पर जोर देने में मददगार साबित होगा कि वे खुद को अधिक बारीकी से देखें।
मिकज

2

यहाँ मेरे 2 सेंट हैं।

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

कुछ उदाहरण:

  • 100% कोड कवरेज के साथ इकाई परीक्षण लिखें और आपको बेहतर कोड गुणवत्ता मिलेगी।
  • टीडीडी को व्यवस्थित रूप से लागू करें और आपको बेहतर डिज़ाइन मिलेगा।
  • जोड़ी प्रोग्रामिंग करें और आप कोड की गुणवत्ता में सुधार करेंगे और विकास के समय को कम करेंगे।

मुझे लगता है कि उपरोक्त कथनों के साथ मूल समस्या यह है कि मनुष्य कंप्यूटर नहीं हैं और सॉफ्टवेयर लिखना एल्गोरिथ्म को क्रियान्वित करने जैसा नहीं है।

इसलिए, उपरोक्त कथनों में कुछ सच्चाई है लेकिन चीजों को थोड़ा बहुत सरल करना, जैसे:

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

कोड कवरेज पर वापस जाना।

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

मुझे लगता है कि अगर आपको एक निश्चित मॉड्यूल के लिए 100% कवरेज प्राप्त करना सार्थक है तो आपको मामले से मामले का न्याय करना होगा।

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

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

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

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

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

कैसे आप इसे करने के लिए कोई उपाय किए बिना गारंटीकृत समय आवंटित करते हैं

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

तो (फिर, ये मेरे 2 सेंट हैं): कोड कवरेज जैसी प्रक्रिया और सेट पैरामीटर खोजने की कोशिश न करें जो सभी टीमों के लिए, सभी परियोजनाओं के लिए और सभी मॉड्यूल के लिए फिट होने चाहिए। इस तरह की सामान्य प्रक्रिया का पता लगाना एक भ्रम है और मेरा मानना ​​है कि जब आप एक को खोज लेंगे तो यह सब-ऑप्टिमल होगा।


सब सच है और मैं पहले से ही समझौते में हूं। यदि आप ध्यान दें तो मैं 100% कोड कवरेज का समर्थन नहीं करता। बेटट तकनीक, औजारों और प्रक्रियाओं के उपयोग द्वारा इसके मूल्य में सुधार के बारे में। यह कोड कवरेज मानदंडों को पूरी तरह से समझने में भी मदद करता है (ज्यादातर इसे लाइन / स्टेटमेंट मान लेते हैं)। अपनी उत्कृष्ट पोस्ट के लिए +1।
मिकज

2

"टीम जल्दी से कम गुणवत्ता परीक्षण बनाकर प्रतिक्रिया देगी और इस तरह समय बर्बाद करेगी जबकि कोई महत्वपूर्ण गुणवत्ता नहीं होगी"

यह एक वास्तविक जोखिम है, न कि केवल सैद्धांतिक।

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

"ऐसे कोड कवरेज टूल्स और प्रथाओं / प्रक्रियाओं के संयोजन के लिए सुझाव उनके साथ जाने के लिए"

अन्य सभी सुझावों के अलावा, एक स्वचालन तकनीक है जो परीक्षणों की गुणवत्ता का आकलन कर सकती है: उत्परिवर्तन परीक्षण ( http://en.wikipedia.org/wiki/Mutation_testing )। जावा कोड के लिए, PIT ( http://pitest.org/ ) काम करता है, और यह पहला उत्परिवर्तन परीक्षण उपकरण है जो मैंने किया है।

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


1

कोड कवरेज निश्चित रूप से अच्छी इकाई परीक्षणों का प्रमाण नहीं है, इसमें वे सही हैं।

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


2
अंक जो नहीं बोलते हैं, वे मूक हो जाते हैं । (मैं वहाँ शब्दपट्टी की तरह है - मेरी वर्तनी अक्सर सही है)।

1

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

"हम कितने करीबी हैं?"

"इस प्रणाली की गुणवत्ता कैसी है?"

"ये मॉड्यूल कितने जटिल हैं?"

काश, एक भी मीट्रिक कभी नहीं होती जो आपको बता सके कि परियोजना कितनी अच्छी या बुरी है, और एक भी संख्या से उस अर्थ को प्राप्त करने का कोई भी प्रयास आवश्यक रूप से सरल हो जाएगा। जबकि मेट्रिक्स सभी डेटा के बारे में हैं, उनकी व्याख्या करने का मतलब है कि वे बहुत अधिक भावनात्मक / मनोवैज्ञानिक कार्य हैं और जैसे कि संभवतः अलग-अलग रचनाओं की टीमों या विभिन्न डोमेन की समस्याओं के बीच सामान्य रूप से लागू नहीं किया जा सकता है।

कवरेज के मामले में, मुझे लगता है कि यह अक्सर कोड की गुणवत्ता के लिए एक प्रॉक्सी के रूप में उपयोग किया जाता है, अल्बाइट एक कच्चे एक। और असली समस्या यह है कि यह 0 और 100 के बीच एक एकल पूर्णांक के लिए एक भयानक जटिल विषय को उबालता है, जो निश्चित रूप से 100% कवरेज प्राप्त करने के लिए एक अंतहीन खोज में संभावित अनैतिक काम को चलाने के लिए उपयोग किया जाएगा। बॉब मार्टिन जैसे लोग कहेंगे कि 100% कवरेज एकमात्र गंभीर लक्ष्य है, और मैं समझ सकता हूं कि ऐसा क्यों है, क्योंकि कुछ और सिर्फ मनमाना है।

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

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

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


कोड योग्य कवरेज और Crap4J लिंक को चुनने के लिए चक्रीय जटिलता का उपयोग करने के महान सुझाव के लिए धन्यवाद। मैंने एक महान लेख भी पाया, जिसमें crap4j की अजीबता को कोबर्तुरा में निचोड़ने के बारे में बात की गई थी - schneide.wordpress.com/2010/09/27/…
मिक

0

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

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

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

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