साइक्लोमेटिक कम्पलेक्सिटी: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Short description|Measure of the structural complexity of a software program}}
{{Short description|Measure of the structural complexity of a software program}}
साइक्लोमैटिक कम्पलेक्सिटी एक [[सॉफ्टवेयर मीट्रिक]] है जिसका उपयोग [[प्रोग्रामिंग जटिलता|प्रोग्रामिंग कम्पलेक्सिटी]] को इंगित करने के लिए किया जाता है। यह प्रोग्राम के स्रोत कोड के माध्यम से रैखिक रूप से इंडिपेंडेंट पाथ्स की संख्या का एक मात्रात्मक माप है। इसे 1976 में थॉमस जे. मैककेबे, सीनियर द्वारा विकसित किया गया था।
'''साइक्लोमैटिक कम्पलेक्सिटी''' एक [[सॉफ्टवेयर मीट्रिक]] है जिसका उपयोग [[प्रोग्रामिंग जटिलता|प्रोग्रामिंग कम्पलेक्सिटी]] को इंगित करने के लिए किया जाता है। यह प्रोग्राम के स्रोत कोड के माध्यम से रैखिक रूप से इंडिपेंडेंट पाथ्स की संख्या का एक मात्रात्मक माप है। इसे 1976 में थॉमस जे. मैककेबे, सीनियर द्वारा विकसित किया गया था।


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

Revision as of 09:24, 8 August 2023

साइक्लोमैटिक कम्पलेक्सिटी एक सॉफ्टवेयर मीट्रिक है जिसका उपयोग प्रोग्रामिंग कम्पलेक्सिटी को इंगित करने के लिए किया जाता है। यह प्रोग्राम के स्रोत कोड के माध्यम से रैखिक रूप से इंडिपेंडेंट पाथ्स की संख्या का एक मात्रात्मक माप है। इसे 1976 में थॉमस जे. मैककेबे, सीनियर द्वारा विकसित किया गया था।

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

एक सॉफ़्टवेयर टैस्टिंग रणनीति, जिसे मैककेबे ने बेसिस पाथ टैस्टिंग कहा है, जिन्होंने सबसे पहले इसे प्रस्तावित किया था, प्रोग्राम के माध्यम से प्रत्येक रैखिक रूप से इंडिपेंडेंट पाथ की टैस्टिंग करना है; इस स्थिति में, टैस्टिंग स्थितियों की संख्या प्रोग्राम की साईक्लोमैटिक कम्पलेक्सिटी के समतुल्य होती है।[1]

विवरण

परिभाषा

एक साधारण प्रोग्राम का कंट्रोल-फ्लो ग्राफ़। प्रोग्राम लाल नोड पर निष्पादित होना शुरू होता है, फिर एक लूप में प्रवेश करता है (लाल नोड के ठीक नीचे तीन नोड्स का समूह)। लूप से बाहर निकलने पर, एक कंडीशनल विवरण (लूप के नीचे समूह) होता है, और अंत में प्रोग्राम नीले नोड पर बाहर निकलता है। इस ग्राफ़ में 9 एज, 8 नोड्स और 1 जुड़ा हुआ घटक (ग्राफ़ सिद्धांत) है, इसलिए प्रोग्राम की साईक्लोमैटिक कम्पलेक्सिटी है 9 − 8 + 2×1 = 3.

स्रोत कोड के एक अनुभाग की साईक्लोमैटिक कम्पलेक्सिटी इसके समाविष्ट रैखिक रूप से इंडिपेंडेंट पाथ (ग्राफ सिद्धांत) की संख्या है - पाथ्स का एक सेट रैखिक रूप से निर्भर होता है यदि एक या अधिक पाथ्स का एक उपसमूह होता है जहां उनके एज सेट का सममित अंतर रिक्त होता है। उदाहरण के लिए, यदि स्रोत कोड में कोई कंट्रोल फ्लो (कंडीशनल या डिसीज़न पॉइंट) नहीं है, तो कम्पलेक्सिटी 1 होगी, क्योंकि कोड के माध्यम से केवल एक ही पाथ होता है। यदि कोड में एक एकल-स्थिति IF कथन है, तो कोड के माध्यम से दो पाथ होंगे: एक जहां IF कथन TRUE का मूल्यांकन करता है और दूसरा जहां यह FALSE का मूल्यांकन करता है, इसलिए कम्पलेक्सिटी 2 होगी, दो नेस्टेड एकल-स्थिति IF, या दो शर्तों वाला एक IF, 3 की कम्पलेक्सिटी उत्पन्न करता है।

गणितीय रूप से, संरचित प्रोग्रामिंग की साईक्लोमैटिक कम्पलेक्सिटी[lower-alpha 1] के प्रोग्राम को कंट्रोल-फ्लो ग्राफ के संदर्भ में परिभाषित किया गया है, एक डायरेक्टेड ग्राफ जिसमें प्रोग्राम के बुनियादी ब्लॉक होते हैं, दो बुनियादी ब्लॉकों के बीच एक एज के साथ यदि कंट्रोल पहले से दूसरे तक जा सकता है। कम्पलेक्सिटी M को इसलिए परिभाषित किया गया है[2]

कहाँ

  • E = ग्राफ़ के किनारों की संख्या.
  • N = ग्राफ़ के नोड्स की संख्या।
  • P = जुड़े हुए घटक की संख्या (ग्राफ़ सिद्धांत)।
ऊपर जैसा ही कार्य, वैकल्पिक फॉर्मूलेशन का उपयोग करके दर्शाया गया है, जहां प्रत्येक निकास पॉइंट वापस प्रवेश पॉइंट से जुड़ा हुआ है। इस ग्राफ़ में 10 एज, 8 नोड्स और 1 जुड़ा हुआ घटक (ग्राफ़ सिद्धांत) है, जिसके परिणामस्वरूप वैकल्पिक फॉर्मूलेशन का उपयोग करके 3 की साइक्लोमैटिक कम्पलेक्सिटी भी उत्पन्न होती है (10 − 8 + 1 = 3).

एक वैकल्पिक सूत्रीकरण एक ग्राफ़ का उपयोग करना है जिसमें प्रत्येक निकास पॉइंट वापस प्रवेश पॉइंट से जुड़ा होता है। इस स्थिति में, ग्राफ दृढ़ता से जुड़ा हुआ है, और प्रोग्राम की साइक्लोमैटिक कम्पलेक्सिटी इसके ग्राफ की साईक्लोमैटिक संख्या के समतुल्य है (जिसे बेट्टी संख्या # उदाहरण 2 के रूप में भी जाना जाता है: ग्राफ सिद्धांत में पहली बेट्टी संख्या), जिसे इस प्रकार परिभाषित किया गया है[2]

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

एकल प्रोग्राम (या सबरूटीन या मेथड्स) के लिए, P हमेशा 1 के समतुल्य होता है। इसलिए एकल सबरूटीन के लिए एक सरल सूत्र है[3]

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

मैककेबे ने दिखाया कि केवल एक प्रवेश पॉइंट और एक निकास पॉइंट के साथ किसी भी संरचित प्रोग्राम की साईक्लोमैटिक कम्पलेक्सिटी उस प्रोग्राम में निहित डिसीज़न पॉइंटओं (यानी, यदि कथन या कंडीशनल लूप) की संख्या प्लस एक के समतुल्य है। हालाँकि, यह केवल निम्नतम, मशीन-स्तर के निर्देशों पर गिने जाने वाले डिसीज़न पॉइंटओं के लिए सच है।[4] यौगिक विधेय से जुड़े डिसीज़न जैसे उच्च-स्तरीय भाषाओं में पाए जाते हैं IF cond1 AND cond2 THEN ... शामिल विधेय चर के संदर्भ में गिना जाना चाहिए, यानी इस उदाहरण में किसी को दो डिसीज़न पॉइंट गिनने चाहिए, क्योंकि मशीन स्तर पर यह समतुल्य है IF cond1 THEN IF cond2 THEN ....[2][5]

साइक्लोमैटिक कम्पलेक्सिटी को कई निकास पॉइंटओं वाले प्रोग्राम तक बढ़ाया जा सकता है; इस स्थिति में यह समतुल्य है

कहाँ प्रोग्राम में डिसीज़न पॉइंटओं की संख्या है, और s निकास पॉइंटओं की संख्या है।[5][6]

बीजगणितीय टोपोलॉजी के संदर्भ में स्पष्टीकरण

ग्राफ़ का एक सम उपसमूह (जिसे यूलेरियन पाथ के रूप में भी जाना जाता है) वह है जहां प्रत्येक शीर्ष (ग्राफ़ सिद्धांत) किनारों की सम संख्या के साथ घटना है; ऐसे उपसमूह चक्रों और पृथक शीर्षों के संघ हैं। निम्नलिखित में, सम सबग्राफ को उनके एज सेट के साथ पहचाना जाएगा, जो केवल उन सम सबग्राफ पर विचार करने के समतुल्य है जिसमें पूर्ण ग्राफ के सभी शीर्ष शामिल हैं।

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

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

जिसे टर्मिनल नोड्स टी के सापेक्ष ग्राफ़ जी के पहले होमोलॉजी समूह की रैंक के रूप में पढ़ा जाता है। यह एक प्रवेश से निकास तक फ्लो ग्राफ के माध्यम से रैखिक रूप से इंडिपेंडेंट पाथ्स की संख्या कहने का एक तकनीकी तरीका है, जहां:

  • रैखिक रूप से इंडिपेंडेंट समरूपता से मेल खाता है, और इसका मतलब है कि कोई बैकट्रैकिंग को दोगुना नहीं करता है;
  • पाथ प्रथम समरूपता से मेल खाते हैं: पाथ एक 1-आयामी वस्तु है;
  • सापेक्ष का अर्थ है कि पाथ किसी प्रवेश या निकास पॉइंट पर शुरू और समाप्त होना चाहिए।

यह साईक्लोमैटिक कम्पलेक्सिटी की सहज धारणा से मेल खाता है, और ऊपर बताए अनुसार कंप्यूटेड की जा सकती है।

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

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

यह लूप की संख्या और घटकों की संख्या के रूप में साइक्लोमैटिक कम्पलेक्सिटी के लक्षण वर्णन से मेल खाता है।

व्याख्या

अपनी प्रस्तुति में 'जोखिम की पहचान करने के लिए सॉफ्टवेयर गुणवत्ता मेट्रिक्स'[8] होमलैंड सिक्योरिटी विभाग के लिए, टॉम मैककेबे ने साईक्लोमैटिक कम्पलेक्सिटी की व्याख्या करने के लिए निम्नलिखित क्लासेसीकरण प्रस्तुत किया है:

  • 1-10 सरल प्रक्रिया, थोड़ा जोखिम
  • 11-20 अधिक जटिल, मध्यम जोखिम
  • 21 - 50 जटिल, उच्च जोखिम
  • > 50 अप्राप्य कोड, बहुत अधिक जोखिम

अनुप्रयोग

विकास के दौरान कम्पलेक्सिटी को सीमित करना

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

किसी प्रोग्राम की संरचना को मापना

मैककेबे के 1976 के पेपर का खंड VI यह निर्धारित करने से संबंधित है कि गैर-संरचित प्रोग्रामिंग के कंट्रोल-फ्लो ग्राफ़ (सीएफजी) उनके सबग्राफ के संदर्भ में कैसा दिखते हैं, जिसे मैककेबे पहचानते हैं। (उस भाग के विवरण के लिए संरचित प्रोग्राम प्रमेय देखें।) मैककेबे ने उस खंड को एक संख्यात्मक माप का प्रस्ताव देकर समाप्त किया है कि कोई दिया गया प्रोग्राम संरचित प्रोग्रामिंग आदर्श के कितना करीब है, यानी मैककेबे के नवशास्त्रवाद का उपयोग करके इसकी संरचितता। मैककेबे ने इस उद्देश्य के लिए जो माप तैयार किया, उसे आवश्यक कम्पलेक्सिटी (संरचितता का संख्यात्मक माप) कहा।[2]

इस माप की कंप्यूटेड करने के लिए, मूल सीएफजी को एकल-प्रविष्टि और एकल-निकास पॉइंट वाले सबग्राफ की पहचान करके पुनरावृत्त रूप से कम किया जाता है, जिन्हें फिर एक नोड द्वारा प्रतिस्थापित किया जाता है। यह कटौती इस बात से मेल खाती है कि यदि कोई इंसान कोड के बड़े हिस्से से एक सबरूटीन निकालता है तो वह क्या करेगा। (आजकल ऐसी प्रक्रिया पुनर्रचना के छत्र शब्द के अंतर्गत आती है।) मैककेबे की कटौती मेथड्स को बाद में कुछ पाठ्यपुस्तकों में संक्षेपण कहा गया, क्योंकि इसे संक्षेपण (ग्राफ सिद्धांत) के सामान्यीकरण के रूप में देखा गया था।[10] यदि कोई प्रोग्राम संरचित है, तो मैककेबे की कमी/संक्षेपण प्रक्रिया इसे एकल सीएफजी नोड में कम कर देती है। इसके विपरीत, यदि प्रोग्राम संरचित नहीं है, तो पुनरावृत्त प्रक्रिया अपरिवर्तनीय भाग की पहचान करेगी। मैककेबे द्वारा परिभाषित आवश्यक कम्पलेक्सिटी माप केवल इस अपरिवर्तनीय ग्राफ की साईक्लोमैटिक कम्पलेक्सिटी है, इसलिए यह सभी संरचित प्रोग्रामों के लिए सटीक रूप से 1 होगा, लेकिन गैर-संरचित प्रोग्रामों के लिए एक से अधिक होगा।[9]: 80 

सॉफ़्टवेयर टैस्टिंग के लिए निहितार्थ

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

यह साईक्लोमैटिक कम्पलेक्सिटी के दो गुणों के कारण उपयोगी है, M, एक विशिष्ट मॉड्यूल के लिए:

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

उपरोक्त तीनों संख्याएँ समान हो सकती हैं: शाखा कवरेज साइक्लोमेटिक कम्पलेक्सिटी पाथ्स की संख्या.

उदाहरण के लिए, एक प्रोग्राम पर विचार करें जिसमें दो अनुक्रमिक यदि-तब-अन्यथा कथन शामिल हैं।

if (c1())
    f1();
else
    f2();

if (c2())
    f3();
else
    f4();
उपरोक्त स्रोत कोड का कंट्रोल-फ्लो ग्राफ़; लाल वृत्त फ़ंक्शन का प्रवेश पॉइंट है, और नीला वृत्त निकास पॉइंट है। ग्राफ़ को मजबूती से कनेक्ट करने के लिए निकास को प्रवेश से जोड़ा गया है।

इस उदाहरण में, पूर्ण शाखा कवरेज प्राप्त करने के लिए दो टैस्टिंग स्थिति पर्याप्त हैं, जबकि पूर्ण पाथ कवरेज के लिए चार आवश्यक हैं। प्रोग्राम की साईक्लोमैटिक कम्पलेक्सिटी 3 है (क्योंकि प्रोग्राम के लिए दृढ़ता से जुड़े ग्राफ में 9 एज, 7 नोड्स और 1 जुड़ा घटक शामिल है) (9 − 7 + 1).

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

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

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

एक फ़ंक्शन के उदाहरण के रूप में जिसे सटीक रूप से टैस्टिंग करने के लिए केवल शाखा कवरेज से अधिक की आवश्यकता होती है, उपरोक्त फ़ंक्शन पर फिर से विचार करें, लेकिन मान लें कि बग होने से बचने के लिए, कोई भी कोड जो कॉल करता है f1() या f3() दूसरे को भी बुलाना चाहिए.[lower-alpha 2] यह मानते हुए कि के परिणाम c1() और c2() इंडिपेंडेंट हैं, इसका मतलब है कि ऊपर प्रस्तुत फ़ंक्शन में एक बग है। शाखा कवरेज हमें केवल दो टैस्टिंगों के साथ मेथड्स का टैस्टिंग करने की अनुमति देगा, और टैस्टिंगों का एक संभावित सेट निम्नलिखित स्थितियों का टैस्टिंग करना होगा:

  • c1() सत्य लौटाता है और c2() सत्य लौटाता है
  • c1() झूठा रिटर्न देता है और c2() झूठा लौटाता है

इनमें से कोई भी मामला बग को उजागर नहीं करता है। हालाँकि, यदि हम आवश्यक टैस्टिंगों की संख्या को इंगित करने के लिए साइक्लोमैटिक कम्पलेक्सिटी का उपयोग करते हैं, तो संख्या बढ़कर 3 हो जाती है। इसलिए हमें निम्नलिखित पाथ्स में से एक का टैस्टिंग करना चाहिए:

  • c1() सत्य लौटाता है और c2() झूठा लौटाता है
  • c1() झूठा रिटर्न देता है और c2() सत्य लौटाता है

इनमें से कोई भी टैस्टिंग बग को उजागर करेगा।

दोषों की संख्या से सहसंबंध

कई अध्ययनों ने किसी फ़ंक्शन या मेथड्स में होने वाले दोषों की आवृत्ति के साथ मैककेबे की साइक्लोमैटिक कम्पलेक्सिटी संख्या के बीच संबंध की जांच की है।[11] कुछ अध्ययन[12] साईक्लोमैटिक कम्पलेक्सिटी और दोषों के बीच एक सकारात्मक सहसंबंध खोजें: जिन कार्यों और मेथड्सयों में सबसे अधिक कम्पलेक्सिटी होती है उनमें सबसे अधिक दोष भी होते हैं। हालाँकि, साइक्लोमैटिक कम्पलेक्सिटी और प्रोग्राम आकार (आमतौर पर कोड की पंक्तियों में मापा जाता है) के बीच संबंध को कई बार प्रदर्शित किया गया है। द हैटन्स ने दावा किया है[13] उस कम्पलेक्सिटी में कोड की पंक्तियों के समान ही पूर्वानुमान लगाने की क्षमता होती है। प्रोग्राम के आकार को नियंत्रित करने वाले अध्ययन (अर्थात, अलग-अलग कम्पलेक्सिटीओं वाले लेकिन समान आकार वाले मॉड्यूल की तुलना करना) आम तौर पर कम निर्णायक होते हैं, जिनमें से कई में कोई महत्वपूर्ण सहसंबंध नहीं पाया जाता है, जबकि अन्य में सहसंबंध पाया जाता है। क्षेत्र का अध्ययन करने वाले कुछ शोधकर्ता कोई सहसंबंध नहीं पाते हुए अध्ययन में उपयोग की जाने वाली मेथड्सयों की वैधता पर सवाल उठाते हैं।[14] हालाँकि यह संबंध संभवतः सत्य है, लेकिन इसे आसानी से उपयोग में नहीं लाया जा सकता।[15] चूँकि प्रोग्राम का आकार व्यावसायिक सॉफ़्टवेयर की कंट्रोलीय विशेषता नहीं है, इसलिए मैककेब्स के नंबर की उपयोगिता पर प्रश्न उठाया गया है।[11]इस अवलोकन का सार यह है कि बड़े प्रोग्राम अधिक जटिल होते हैं और उनमें अधिक दोष होते हैं। कोड की साईक्लोमैटिक कम्पलेक्सिटी को कम करने से सहसंबंध उस कोड में त्रुटियों या बग की संख्या को कम करने का कारण नहीं बनता है। हालाँकि, ISO 26262 जैसे अंतर्राष्ट्रीय सुरक्षा मानक, कम कोड कम्पलेक्सिटी को लागू करने वाले कोडिंग दिशानिर्देशों को अनिवार्य करते हैं।[16]

कृत्रिम बुद्धि

कृत्रिम बुद्धिमत्ता प्रोग्रामों की सिमेंटिक कम्पलेक्सिटी के मूल्यांकन के लिए साइक्लोमैटिक कम्पलेक्सिटी का भी उपयोग किया जा सकता है।[17]

अल्ट्रामेट्रिक टोपोलॉजी

साइक्लोमैटिक कम्पलेक्सिटी भौगोलिक और परिदृश्य-पारिस्थितिक विश्लेषण में उपयोगी साबित हुई है, यह दिखाए जाने के बाद कि इसे अल्ट्रामेट्रिक स्पेस दूरी के ग्राफ़ पर लागू किया जा सकता है।[18]

यह भी देखें

टिप्पणियाँ

  1. Here "structured" means in particular "with a single exit (return statement) per function".
  2. This is a fairly common type of condition; consider the possibility that f1 allocates some resource which f3 releases.


संदर्भ

  1. A J Sobey. "Basis Path Testing".
  2. 2.0 2.1 2.2 2.3 2.4 McCabe (December 1976). "एक जटिलता उपाय". IEEE Transactions on Software Engineering. SE-2 (4): 308–320. doi:10.1109/tse.1976.233837. S2CID 9116234.
  3. Philip A. Laplante (25 April 2007). सॉफ्टवेयर इंजीनियरिंग के बारे में प्रत्येक इंजीनियर को क्या पता होना चाहिए. CRC Press. p. 176. ISBN 978-1-4200-0674-2.
  4. Fricker, Sébastien (April 2018). "What exactly is cyclomatic complexity?". froglogic GmbH. Retrieved October 27, 2018. To compute a graph representation of code, we can simply disassemble its assembly code and create a graph following the rules: ...
  5. 5.0 5.1 J. Belzer; A. Kent; A. G. Holzman; J. G. Williams (1992). Encyclopedia of Computer Science and Technology. CRC Press. pp. 367–368.
  6. Harrison (October 1984). "मैकाबे की जटिलता माप को बहु-निकास कार्यक्रमों पर लागू करना". Software: Practice and Experience. 14 (10): 1004–1007. doi:10.1002/spe.4380141009. S2CID 62422337.
  7. Diestel, Reinhard (2000). Graph theory. Graduate texts in mathematics 173 (2 ed.). New York: Springer. ISBN 978-0-387-98976-1.
  8. Thomas McCabe Jr. (2008). "जोखिम की पहचान करने के लिए सॉफ़्टवेयर गुणवत्ता मेट्रिक्स". Archived from the original on 2022-03-29.
  9. 9.0 9.1 9.2 Arthur H. Watson; Thomas J. McCabe (1996). "Structured Testing: A Testing Methodology Using the Cyclomatic Complexity Metric" (PDF). NIST Special Publication 500-235.
  10. Paul C. Jorgensen (2002). Software Testing: A Craftsman's Approach, Second Edition (2nd ed.). CRC Press. pp. 150–153. ISBN 978-0-8493-0809-3.
  11. 11.0 11.1 Norman E Fenton; Martin Neil (1999). "A Critique of Software Defect Prediction Models" (PDF). IEEE Transactions on Software Engineering. 25 (3): 675–689. CiteSeerX 10.1.1.548.2998. doi:10.1109/32.815326.
  12. Schroeder, Mark (1999). "ऑब्जेक्ट-ओरिएंटेड मेट्रिक्स के लिए एक व्यावहारिक मार्गदर्शिका". IT Professional. 1 (6): 30–36. doi:10.1109/6294.806902. S2CID 14945518.
  13. Les Hatton (2008). "The role of empiricism in improving the reliability of future software". version 1.1.
  14. Kan (2003). Metrics and Models in Software Quality Engineering. Addison-Wesley. pp. 316–317. ISBN 978-0-201-72915-3.
  15. G.S. Cherf (1992). "An Investigation of the Maintenance and Support Characteristics of Commercial Software". Journal of Software Quality. 1 (3): 147–158. doi:10.1007/bf01720922. ISSN 1573-1367. S2CID 37274091.
  16. ISO 26262-3:2011(en) Road vehicles — Functional safety — Part 3: Concept phase. International Standardization Organization.
  17. Papadimitriou, Fivos (2012). "भूमध्यसागरीय परिदृश्य परिवर्तनों की जटिलता के मॉडलिंग में कृत्रिम बुद्धिमत्ता". Computers and Electronics in Agriculture. 81: 87–96. doi:10.1016/j.compag.2011.11.009.
  18. Papadimitriou, Fivos (2013). "अल्ट्रामेट्रिक टोपोलॉजी के साथ भूमि उपयोग और परिदृश्य जटिलता का गणितीय मॉडलिंग". Journal of Land Use Science. 8 (2): 234–254. doi:10.1080/1747423X.2011.637136. S2CID 121927387.


बाहरी संबंध