यूनिट और एकीकरण परीक्षणों के लिए अलग-अलग कोड कवरेज रिपोर्ट, या दोनों के लिए एक रिपोर्ट?


10

क्या यूनिट और एकीकरण परीक्षणों के लिए एक अलग कोड कवरेज रिपोर्ट या दोनों के लिए एक कोड कवरेज रिपोर्ट होनी चाहिए?

इसके पीछे सोच यह है कि कोड कवरेज हमें यह सुनिश्चित करने की अनुमति देता है कि हमारे कोड को परीक्षणों द्वारा कवर किया गया है जहाँ तक संभव हो (जितना मशीन अब किसी भी तरह हो सकता है)।

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


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

हम इस कारण से अलग-अलग पुस्तकालयों में इकाई परीक्षण और एकीकरण परीक्षण रखते हैं।
रॉबी डी डे

यह ग्राहक की आवश्यकताओं पर निर्भर करता है।
मौविसील

जवाबों:


12

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

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


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

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

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

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

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



5

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


अब, क्या हम कमरे में हाथी के बारे में बात कर सकते हैं?

कोई चम्मच नहीं है। और कोई "कुल कवरेज प्रतिशत" नहीं है। कम से कम, कोई सरल नहीं।

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

मान लीजिए कि आपने "100% परीक्षण कवरेज" की महिमा हासिल की है। वाह! लेकिन इसका क्या मतलब है? 100% कोड लाइनों का परीक्षण किया जाता है, है ना? फिर इस लाइन का क्या?

launch_missile = launch_authorized and launch_cmd_given else previous_launch_status

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

engage_laser = (laser_armed and safety_disengaged) or random.random() < 0.0000003

कितनी बार आपको उस लाइन को वास्तव में पूरी तरह से परीक्षण करने के लिए कवर करना होगा? कार्यक्रम में अन्य सभी चर के साथ संयोजन में इसे परीक्षण करने के लिए आपको इसे कितनी बार कवर करना होगा (अपनी खुद की, संभवतः इसी तरह की दुर्लभ) संभावनाओं के साथ?

मैं यह नहीं कह रहा हूं कि कवरेज मेट्रिक्स बेकार हैं। वे वास्तव में महान हैं । वे प्रमुख मुद्दों में से एक पर ध्यान केंद्रित करते हैं: मेरे सॉफ्टवेयर सिस्टम का परीक्षण बड़े पैमाने पर कैसे किया जाता है? वे "हमारे पास कुछ परीक्षण हैं" से "हम पूरी तरह से परीक्षण कर चुके हैं" को स्थानांतरित करने में मदद करते हैं।

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


कवरेज मैट्रिक्स के प्रकार इस्तेमाल किया जा रहा है पूरी तरह से सवाल का ओर्थोगोनल प्रतीत हो रहा है, किसी भी मीट्रिक इकाई परीक्षण या एकीकरण परीक्षण या दोनों के लिए गणना की जा सकती
जे।

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

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