Erlang 21 - 10. Code Coverage Analysis

10 कोड कवरेज विश्लेषण




erlang

10 कोड कवरेज विश्लेषण

10.1 सामान्य

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

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

10.2 उपयोग करें

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

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

कवर विनिर्देशन फ़ाइल में आप कोड कवरेज विश्लेषण के अपने आवश्यक स्तर को भी निर्दिष्ट कर सकते हैं; details या overview । विस्तृत मोड में, आपको एक कवरेज अवलोकन पृष्ठ मिलता है, जो प्रति मॉड्यूल और कुल कवरेज प्रतिशत दिखाता है। आपको प्रत्येक मॉड्यूल के लिए एक HTML फ़ाइल भी मुद्रित होती है जो विश्लेषण में शामिल होती है जो यह दिखाती है कि परीक्षण के दौरान कोड के किन हिस्सों को निष्पादित किया गया है। अवलोकन मोड में, केवल कोड कवरेज अवलोकन पृष्ठ मुद्रित होता है।

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

कोड कवरेज समर्थन को सक्रिय करने के लिए, Common Test शुरू करते ही कवर स्पेसिफिकेशन फ़ाइल का नाम निर्दिष्ट करें। उदाहरण के लिए -cover साथ ध्वज- -cover का उपयोग करके ऐसा करें:

$ ct_run -dir $TESTOBJS/db -cover $TESTOBJS/db/config/db.coverspec

आप ct:run_test/1 कॉल विनिर्देशन फ़ाइल का नाम भी पास कर सकते हैं ct:run_test/1 to तर्क को {cover,CoverSpec} करके एक {cover,CoverSpec} tuple जोड़कर।

आप अपने परीक्षण विनिर्देशों में कोड कवरेज को भी सक्षम कर सकते हैं (अनुभाग रनिंग टेस्ट और विश्लेषण परिणामों में अनुभाग Test Specifications देखें)।

10.3 टेस्ट को पूरा करने पर कवर टूल को रोकना

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

विकल्प को -cover_stop साथ फ्लैग -cover_stop का उपयोग करके सेट किया जा सकता है, {cover_stop,true|false} को तर्क में शामिल करके ct:run_test/1 , या Test Specifications में एक cover_stop शब्द जोड़कर (सेक्शन Test Specifications में सेक्शन देख सकते हैं) टेस्ट और विश्लेषण परिणाम)।

10.4 कवर विशिष्टता फ़ाइल

कवर विनिर्देश फ़ाइल में निम्नलिखित शर्तों की अनुमति है:

%% List of Nodes on which cover will be active during test.
%% Nodes = [atom()]
{nodes, Nodes}.       

%% Files with previously exported cover data to include in analysis.
%% CoverDataFiles = [string()]
{import, CoverDataFiles}.

%% Cover data file to export from this session.
%% CoverDataFile = string()
{export, CoverDataFile}.

%% Cover analysis level.
%% Level = details | overview
{level, Level}.       

%% Directories to include in cover.
%% Dirs = [string()]
{incl_dirs, Dirs}.

%% Directories, including subdirectories, to include.
{incl_dirs_r, Dirs}.

%% Specific modules to include in cover.
%% Mods = [atom()]
{incl_mods, Mods}.

%% Directories to exclude in cover.
{excl_dirs, Dirs}.

%% Directories, including subdirectories, to exclude.
{excl_dirs_r, Dirs}.

%% Specific modules to exclude in cover.
{excl_mods, Mods}.

%% Cross cover compilation
%% Tag = atom(), an identifier for a test run
%% Mod = [atom()], modules to compile for accumulated analysis
{cross,[{Tag,Mods}]}.

शब्द incl_dirs_r और excl_dirs_r Common Test को निर्दिष्ट निर्देशिकाओं को पुन: खोज करने और खोज के दौरान पाए गए किसी भी मॉड्यूल को शामिल करने या बाहर करने के लिए कहते हैं। incl_dirs और excl_dirs परिणाम मॉड्यूल के लिए एक गैर-पुनरावर्ती खोज में excl_dirs (अर्थात, निर्दिष्ट निर्देशिकाओं में पाए गए केवल मॉड्यूल शामिल या बहिष्कृत हैं)।

ध्यान दें

कोड कवरेज परीक्षण में शामिल किए जाने वाले Erlang मॉड्यूल वाले निर्देशिकाएँ कोड सर्वर पथ में मौजूद होना चाहिए। अन्यथा, कवर टूल मॉड्यूल को फिर से जोड़ने में विफल रहता है। इन निर्देशिकाओं को Common Test लिए कवर विनिर्देशन फ़ाइल में निर्दिष्ट करना पर्याप्त नहीं है।

10.5 क्रॉस कवर विश्लेषण

क्रॉस कवर तंत्र कई परीक्षणों के दौरान मॉड्यूल के कवर विश्लेषण की अनुमति देता है। यह उपयोगी है यदि कुछ कोड, उदाहरण के लिए, एक पुस्तकालय मॉड्यूल, कई अलग-अलग परीक्षणों द्वारा उपयोग किया जाता है और संचित कवर परिणाम वांछनीय है।

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

एक उदाहरण द्वारा तंत्र को सबसे आसान तरीके से समझाया गया है:

मान लें कि दो प्रणालियां हैं, s1 और s2 , जिन्हें अलग-अलग परीक्षण रन में परीक्षण किया जाता है। सिस्टम s1 में एक लाइब्रेरी मॉड्यूल m1 है जिसे टेस्ट रन s1 द्वारा जांचा जाता है और इसे s1 के कवर विनिर्देश में निम्न प्रकार से शामिल किया जाता है:

s1.cover:
  {incl_mods,[m1]}.

कोड कवरेज का विश्लेषण करते समय, m1 के परिणाम को s1 परीक्षा परिणाम में कवर लॉग में देखा जा सकता है।

अब, कल्पना करें कि चूंकि m1 एक लाइब्रेरी मॉड्यूल है, इसलिए इसे अक्सर सिस्टम s2 द्वारा भी उपयोग किया जाता है। टेस्ट रन s2 विशेष रूप से m1 परीक्षण नहीं करता है, लेकिन यह अभी भी देखना दिलचस्प हो सकता है कि m1 कौन से हिस्से s2 परीक्षणों द्वारा कवर किए गए हैं। ऐसा करने के लिए, m1 को एस 2 के कवर विनिर्देश में भी शामिल किया जा सकता है:

s2.cover:
  {incl_mods,[m1]}.

यह टेस्ट रन s2 लिए कवर लॉग में m1 लिए एक प्रविष्टि भी देता है। समस्या यह है कि यह केवल s2 परीक्षणों द्वारा कवरेज को दर्शाता है, s1 और s2 पर संचित परिणाम नहीं। यह वह जगह है जहां क्रॉस कवर तंत्र काम में आता है।

यदि इसके बजाय s2 लिए कवर विनिर्देश निम्नलिखित की तरह है:

s2.cover:
  {cross,[{s1,[m1]}]}.

फिर m1 को टेस्ट रन s2 में संकलित किया गया है, लेकिन कवरेज लॉग में नहीं दिखाया गया है। इसके बजाय, अगर ct_cover:cross_cover_analyse/2 को s1 और s2 दोनों टेस्ट रन पूरा होने के बाद कहा जाता है, m1 लिए संचित परिणाम टेस्ट रन s1 लिए क्रॉस कवर लॉग में उपलब्ध है।

विश्लेषण फ़ंक्शन का कॉल निम्नानुसार होना चाहिए:

ct_cover:cross_cover_analyse(Level, [{s1,S1LogDir},{s2,S2LogDir}]).

यहाँ, S1LogDir और S2LogDir क्रमशः प्रत्येक टेस्ट के लिए <TestName>.logs नाम की निर्देशिका हैं।

टैग s1 और s2 नोटिस करें, जो कवर विनिर्देशन फ़ाइल में और ct_cover:cross_cover_analyse/2 लिए कॉल में उपयोग किए जाते हैं। इनका उद्देश्य केवल कवर विनिर्देश में निर्दिष्ट मॉड्यूल को मैप करना है ताकि विश्लेषण फ़ंक्शन के लिए कॉल में निर्दिष्ट लॉग डायरेक्टरी को निर्दिष्ट किया जा सके। टैग नाम का इससे आगे कोई अर्थ नहीं है।

10.6 लॉगिंग

कोड कवरेज परीक्षण के परिणाम को देखने के लिए, परीक्षण रन के लिए शीर्ष-स्तरीय इंडेक्स पेज में "COVER लॉग" लेबल वाले बटन पर क्लिक करें।

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

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

यदि क्रॉस कवर विश्लेषण किया जाता है, और वर्तमान परीक्षण के लिए संचित कवरेज परिणाम हैं, तो लिंक "कवरडाटा सभी परीक्षणों पर एकत्र" आपको इन परिणामों पर ले जाता है।