साइक्लोमेटिक कम्पलेक्सिटी: 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 में थॉमस जे. मैककेबे, सीनियर द्वारा विकसित किया गया था।


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


एक [[सॉफ़्टवेयर परीक्षण]] रणनीति, जिसे मैककेबे ने [[आधार पथ परीक्षण]] कहा है, जिन्होंने सबसे पहले इसे प्रस्तावित किया था, कार्यक्रम के माध्यम से प्रत्येक रैखिक रूप से स्वतंत्र पथ का परीक्षण करना है; इस मामले में, परीक्षण मामलों की संख्या कार्यक्रम की चक्रीय जटिलता के बराबर होगी।<ref>{{cite web|
एक [[सॉफ़्टवेयर परीक्षण|सॉफ़्टवेयर टैस्टिंग]] रणनीति, जिसे मैककेबे ने [[आधार पथ परीक्षण|बेसिस पाथ टैस्टिंग]] कहा है, जिन्होंने सबसे पहले इसे प्रस्तावित किया था, प्रोग्राम के माध्यम से प्रत्येक रैखिक रूप से इंडिपेंडेंट पाथ की टैस्टिंग करना है; इस स्थिति में, टैस्टिंग स्थितियों की संख्या प्रोग्राम की साईक्लोमैटिक कम्पलेक्सिटी के समतुल्य होती है।<ref>{{cite web|
url=http://users.csc.calpoly.edu/~jdalbey/206/Lectures/BasisPathTutorial/index.html|
url=http://users.csc.calpoly.edu/~jdalbey/206/Lectures/BasisPathTutorial/index.html|
title=Basis Path Testing|
title=Basis Path Testing|
Line 10: Line 10:
==विवरण==
==विवरण==
===परिभाषा===
===परिभाषा===
[[Image:control flow graph of function with loop and an if statement without loop back.svg|thumb|250px|right|एक साधारण प्रोग्राम का नियंत्रण-प्रवाह ग्राफ़। प्रोग्राम लाल नोड पर निष्पादित होना शुरू होता है, फिर एक लूप में प्रवेश करता है (लाल नोड के ठीक नीचे तीन नोड्स का समूह)। लूप से बाहर निकलने पर, एक सशर्त विवरण (लूप के नीचे समूह) होता है, और अंत में प्रोग्राम नीले नोड पर बाहर निकलता है। इस ग्राफ़ में 9 किनारे, 8 नोड्स और 1 [[जुड़ा हुआ घटक (ग्राफ़ सिद्धांत)]] है, इसलिए कार्यक्रम की चक्रीय जटिलता है {{math|1=9 − 8 + 2×1 = 3}}.]]स्रोत कोड के एक अनुभाग की चक्रीय जटिलता इसके भीतर [[रैखिक रूप से स्वतंत्र]] [[पथ (ग्राफ सिद्धांत)]] की संख्या है - पथों का एक सेट रैखिक रूप से निर्भर होता है यदि एक या अधिक पथों का एक उपसमूह होता है जहां उनके किनारे सेट का [[सममित अंतर]] खाली होता है। उदाहरण के लिए, यदि स्रोत कोड में कोई नियंत्रण प्रवाह (सशर्त या निर्णय बिंदु) नहीं है, तो जटिलता 1 होगी, क्योंकि कोड के माध्यम से केवल एक ही पथ होगा। यदि कोड में एक एकल-स्थिति IF कथन है, तो कोड के माध्यम से दो पथ होंगे: एक जहां IF कथन TRUE का मूल्यांकन करता है और दूसरा जहां यह FALSE का मूल्यांकन करता है, इसलिए जटिलता 2 होगी। दो नेस्टेड एकल-स्थिति IF, या दो शर्तों वाला एक IF, 3 की जटिलता उत्पन्न करेगा।
[[Image:control flow graph of function with loop and an if statement without loop back.svg|thumb|250px|right|एक साधारण प्रोग्राम का कंट्रोल-फ्लो ग्राफ़। प्रोग्राम लाल नोड पर निष्पादित होना शुरू होता है, फिर एक लूप में प्रवेश करता है (लाल नोड के ठीक नीचे तीन नोड्स का समूह)। लूप से बाहर निकलने पर, एक कंडीशनल विवरण (लूप के नीचे समूह) होता है, और अंत में प्रोग्राम नीले नोड पर बाहर निकलता है। इस ग्राफ़ में 9 एज, 8 नोड्स और 1 [[जुड़ा हुआ घटक (ग्राफ़ सिद्धांत)]] है, इसलिए प्रोग्राम की साईक्लोमैटिक कम्पलेक्सिटी है {{math|1=9 − 8 + 2×1 = 3}}.]]स्रोत कोड के एक अनुभाग की साईक्लोमैटिक कम्पलेक्सिटी इसके समाविष्ट [[रैखिक रूप से स्वतंत्र|रैखिक रूप से इंडिपेंडेंट]] [[पथ (ग्राफ सिद्धांत)|पाथ (ग्राफ सिद्धांत)]] की संख्या है - पाथ्स का एक सेट रैखिक रूप से निर्भर होता है यदि एक या अधिक पाथ्स का एक उपसमूह होता है जहां उनके एज सेट का [[सममित अंतर]] रिक्त होता है। उदाहरण के लिए, यदि स्रोत कोड में कोई कंट्रोल फ्लो (कंडीशनल या डिसीज़न पॉइंट) नहीं है, तो कम्पलेक्सिटी 1 होगी, क्योंकि कोड के माध्यम से केवल एक ही पाथ होता है। यदि कोड में एक एकल-स्थिति IF कथन है, तो कोड के माध्यम से दो पाथ होंगे: एक जहां IF कथन TRUE का मूल्यांकन करता है और दूसरा जहां यह FALSE का मूल्यांकन करता है, इसलिए कम्पलेक्सिटी 2 होगी, दो नेस्टेड एकल-स्थिति IF, या दो शर्तों वाला एक IF, 3 की कम्पलेक्सिटी उत्पन्न करता है।


गणितीय रूप से, [[संरचित प्रोग्रामिंग]] की चक्रीय जटिलता{{efn|1=Here "structured" means in particular "with a single exit ([[return statement]]) per function".}} को प्रोग्राम के नियंत्रण-प्रवाह ग्राफ के संदर्भ में परिभाषित किया गया है, एक निर्देशित ग्राफ जिसमें प्रोग्राम के [[बुनियादी ब्लॉक]] होते हैं, दो बुनियादी ब्लॉकों के बीच एक किनारे के साथ यदि नियंत्रण पहले से दूसरे तक जा सकता है। जटिलता {{mvar|M}} को तब परिभाषित किया गया है<ref name="mccabe76">{{cite journal| last=McCabe|date=December 1976| journal=IEEE Transactions on Software Engineering|issue=4| pages=308–320| title=एक जटिलता उपाय| volume=SE-2| doi=10.1109/tse.1976.233837|s2cid=9116234}}</ref><math display="block">M = E - N + 2P,</math>कहाँ
गणितीय रूप से, [[संरचित प्रोग्रामिंग]] की साईक्लोमैटिक कम्पलेक्सिटी{{efn|1=Here "structured" means in particular "with a single exit ([[return statement]]) per function".}} के प्रोग्राम को कंट्रोल-फ्लो ग्राफ के संदर्भ में परिभाषित किया गया है, एक डायरेक्टेड ग्राफ जिसमें प्रोग्राम के [[बुनियादी ब्लॉक]] होते हैं, दो बुनियादी ब्लॉकों के बीच एक एज के साथ यदि कंट्रोल पहले से दूसरे तक जा सकता है। कम्पलेक्सिटी {{mvar|M}} को इसलिए परिभाषित किया गया है<ref name="mccabe76">{{cite journal| last=McCabe|date=December 1976| journal=IEEE Transactions on Software Engineering|issue=4| pages=308–320| title=एक जटिलता उपाय| volume=SE-2| doi=10.1109/tse.1976.233837|s2cid=9116234}}</ref><math display="block">M = E - N + 2P,</math>कहाँ
*{{mvar|E}} = ग्राफ़ के किनारों की संख्या.
*{{mvar|E}} = ग्राफ़ के किनारों की संख्या.
*{{mvar|N}} = ग्राफ़ के नोड्स की संख्या।
*{{mvar|N}} = ग्राफ़ के नोड्स की संख्या।
*{{mvar|P}} = जुड़े हुए घटक की संख्या (ग्राफ़ सिद्धांत)।
*{{mvar|P}} = जुड़े हुए घटक की संख्या (ग्राफ़ सिद्धांत)।


[[Image:control flow graph of function with loop and an if statement.svg|thumb|250px|ऊपर जैसा ही कार्य, वैकल्पिक फॉर्मूलेशन का उपयोग करके दर्शाया गया है, जहां प्रत्येक निकास बिंदु वापस प्रवेश बिंदु से जुड़ा हुआ है। इस ग्राफ़ में 10 किनारे, 8 नोड्स और 1 जुड़ा हुआ घटक (ग्राफ़ सिद्धांत) है, जिसके परिणामस्वरूप वैकल्पिक फॉर्मूलेशन का उपयोग करके 3 की साइक्लोमैटिक जटिलता भी उत्पन्न होती है ({{math|1=10 − 8 + 1 = 3}}).]] एक वैकल्पिक सूत्रीकरण एक ग्राफ़ का उपयोग करना है जिसमें प्रत्येक निकास बिंदु वापस प्रवेश बिंदु से जुड़ा होता है। इस मामले में, ग्राफ दृढ़ता से जुड़ा हुआ है, और कार्यक्रम की साइक्लोमैटिक जटिलता इसके ग्राफ की [[चक्रीय संख्या]] के बराबर है (जिसे बेट्टी संख्या # उदाहरण 2 के रूप में भी जाना जाता है: ग्राफ सिद्धांत में पहली बेट्टी संख्या), जिसे इस प्रकार परिभाषित किया गया है<ref name="mccabe76" /><math display="block">M = E - N + P.</math>इसे ग्राफ़ में मौजूद [[रैखिक रूप से स्वतंत्र चक्र]]ों की संख्या की गणना के रूप में देखा जा सकता है, यानी वे चक्र जिनके भीतर अन्य चक्र शामिल नहीं हैं। ध्यान दें कि क्योंकि प्रत्येक निकास बिंदु प्रवेश बिंदु पर वापस लूप करता है, प्रत्येक निकास बिंदु के लिए कम से कम एक ऐसा चक्र होता है।
[[Image:control flow graph of function with loop and an if statement.svg|thumb|250px|ऊपर जैसा ही कार्य, वैकल्पिक फॉर्मूलेशन का उपयोग करके दर्शाया गया है, जहां प्रत्येक निकास पॉइंट वापस प्रवेश पॉइंट से जुड़ा हुआ है। इस ग्राफ़ में 10 एज, 8 नोड्स और 1 जुड़ा हुआ घटक (ग्राफ़ सिद्धांत) है, जिसके परिणामस्वरूप वैकल्पिक फॉर्मूलेशन का उपयोग करके 3 की साइक्लोमैटिक कम्पलेक्सिटी भी उत्पन्न होती है ({{math|1=10 − 8 + 1 = 3}}).]] एक वैकल्पिक सूत्रीकरण एक ग्राफ़ का उपयोग करना है जिसमें प्रत्येक निकास पॉइंट वापस प्रवेश पॉइंट से जुड़ा होता है। इस स्थिति में, ग्राफ दृढ़ता से जुड़ा हुआ है, और प्रोग्राम की साइक्लोमैटिक कम्पलेक्सिटी इसके ग्राफ की [[चक्रीय संख्या|साईक्लोमैटिक संख्या]] के समतुल्य है (जिसे बेट्टी संख्या # उदाहरण 2 के रूप में भी जाना जाता है: ग्राफ सिद्धांत में पहली बेट्टी संख्या), जिसे इस प्रकार परिभाषित किया गया है<ref name="mccabe76" /><math display="block">M = E - N + P.</math>इसे ग्राफ़ में मौजूद [[रैखिक रूप से स्वतंत्र चक्र|रैखिक रूप से इंडिपेंडेंट चक्र]]ों की संख्या की कंप्यूटेड के रूप में देखा जा सकता है, यानी वे चक्र जिनके समाविष्ट अन्य चक्र शामिल नहीं हैं। ध्यान दें कि क्योंकि प्रत्येक निकास पॉइंट प्रवेश पॉइंट पर वापस लूप करता है, प्रत्येक निकास पॉइंट के लिए कम से कम एक ऐसा चक्र होता है।
एकल प्रोग्राम (या सबरूटीन या विधि) के लिए, {{mvar|P}} हमेशा 1 के बराबर होता है। इसलिए एकल सबरूटीन के लिए एक सरल सूत्र है<ref name="Laplante2007">{{cite book|author=Philip A. Laplante|title=सॉफ्टवेयर इंजीनियरिंग के बारे में प्रत्येक इंजीनियर को क्या पता होना चाहिए|date=25 April 2007|publisher=CRC Press|isbn=978-1-4200-0674-2|page=176}}</ref><math display="block">M = E - N + 2.</math>
एकल प्रोग्राम (या सबरूटीन या मेथड्स) के लिए, {{mvar|P}} हमेशा 1 के समतुल्य होता है। इसलिए एकल सबरूटीन के लिए एक सरल सूत्र है<ref name="Laplante2007">{{cite book|author=Philip A. Laplante|title=सॉफ्टवेयर इंजीनियरिंग के बारे में प्रत्येक इंजीनियर को क्या पता होना चाहिए|date=25 April 2007|publisher=CRC Press|isbn=978-1-4200-0674-2|page=176}}</ref><math display="block">M = E - N + 2.</math>
हालाँकि, साइक्लोमैटिक जटिलता को एक ही समय में ऐसे कई कार्यक्रमों या उपप्रोग्रामों पर लागू किया जा सकता है (उदाहरण के लिए, एक वर्ग के सभी तरीकों पर), और इन मामलों में {{mvar|P}} विचाराधीन कार्यक्रमों की संख्या के बराबर होगा, क्योंकि प्रत्येक उपप्रोग्राम ग्राफ़ के डिस्कनेक्ट किए गए सबसेट के रूप में दिखाई देगा।
हालाँकि, साइक्लोमैटिक कम्पलेक्सिटी को एक ही समय में ऐसे कई प्रोग्रामों या उपप्रोग्रामों पर लागू किया जा सकता है (उदाहरण के लिए, एक क्लासेस के सभी तरीकों पर), और इन स्थितियों में {{mvar|P}} विचाराधीन प्रोग्रामों की संख्या के समतुल्य होगा, क्योंकि प्रत्येक उपप्रोग्राम ग्राफ़ के डिस्कनेक्ट किए गए सबसेट के रूप में दिखाई देगा।


मैककेबे ने दिखाया कि केवल एक प्रवेश बिंदु और एक निकास बिंदु के साथ किसी भी संरचित कार्यक्रम की चक्रीय जटिलता उस कार्यक्रम में निहित निर्णय बिंदुओं (यानी, यदि कथन या सशर्त लूप) की संख्या प्लस एक के बराबर है। हालाँकि, यह केवल निम्नतम, मशीन-स्तर के निर्देशों पर गिने जाने वाले निर्णय बिंदुओं के लिए सच है।<ref>{{cite web|
मैककेबे ने दिखाया कि केवल एक प्रवेश पॉइंट और एक निकास पॉइंट के साथ किसी भी संरचित प्रोग्राम की साईक्लोमैटिक कम्पलेक्सिटी उस प्रोग्राम में निहित डिसीज़न पॉइंटओं (यानी, यदि कथन या कंडीशनल लूप) की संख्या प्लस एक के समतुल्य है। हालाँकि, यह केवल निम्नतम, मशीन-स्तर के निर्देशों पर गिने जाने वाले डिसीज़न पॉइंटओं के लिए सच है।<ref>{{cite web|
url=https://www.froglogic.com/blog/tip-of-the-week/what-is-cyclomatic-complexity/| title=What exactly is cyclomatic complexity?|quote=To compute a graph representation of code, we can simply disassemble its assembly code and create a graph following the rules:&nbsp;... |first=Sébastien|last=Fricker|date=April 2018|website=froglogic GmbH|access-date=October 27, 2018}}</ref> यौगिक विधेय से जुड़े निर्णय जैसे उच्च-स्तरीय भाषाओं में पाए जाते हैं <code>IF cond1 AND cond2 THEN ...</code> शामिल विधेय चर के संदर्भ में गिना जाना चाहिए, यानी इस उदाहरण में किसी को दो निर्णय बिंदु गिनने चाहिए, क्योंकि मशीन स्तर पर यह बराबर है <code>IF cond1 THEN IF cond2 THEN ...</code>.<ref name="mccabe76"/><ref name="ecst">{{cite book|
url=https://www.froglogic.com/blog/tip-of-the-week/what-is-cyclomatic-complexity/| title=What exactly is cyclomatic complexity?|quote=To compute a graph representation of code, we can simply disassemble its assembly code and create a graph following the rules:&nbsp;... |first=Sébastien|last=Fricker|date=April 2018|website=froglogic GmbH|access-date=October 27, 2018}}</ref> यौगिक विधेय से जुड़े डिसीज़न जैसे उच्च-स्तरीय भाषाओं में पाए जाते हैं <code>IF cond1 AND cond2 THEN ...</code> शामिल विधेय चर के संदर्भ में गिना जाना चाहिए, यानी इस उदाहरण में किसी को दो डिसीज़न पॉइंट गिनने चाहिए, क्योंकि मशीन स्तर पर यह समतुल्य है <code>IF cond1 THEN IF cond2 THEN ...</code>.<ref name="mccabe76"/><ref name="ecst">{{cite book|
title=Encyclopedia of Computer Science and Technology|
title=Encyclopedia of Computer Science and Technology|
author1=J. Belzer |author2=A. Kent |author3=A. G. Holzman |author4=J. G. Williams|
author1=J. Belzer |author2=A. Kent |author3=A. G. Holzman |author4=J. G. Williams|
Line 28: Line 28:
pages=367–368}}</ref>
pages=367–368}}</ref>


साइक्लोमैटिक जटिलता को कई निकास बिंदुओं वाले प्रोग्राम तक बढ़ाया जा सकता है; इस मामले में यह बराबर है<math display="block">\pi - s + 2,</math>कहाँ <math>\pi</math> कार्यक्रम में निर्णय बिंदुओं की संख्या है, और {{mvar|s}} निकास बिंदुओं की संख्या है।<ref name="ecst" /><ref name="harrison">{{cite journal | journal=Software: Practice and Experience | title=मैकाबे की जटिलता माप को बहु-निकास कार्यक्रमों पर लागू करना| author=Harrison | date=October 1984 | doi=10.1002/spe.4380141009 | volume=14 | issue=10 | pages=1004–1007 | s2cid=62422337}}</ref>
साइक्लोमैटिक कम्पलेक्सिटी को कई निकास पॉइंटओं वाले प्रोग्राम तक बढ़ाया जा सकता है; इस स्थिति में यह समतुल्य है<math display="block">\pi - s + 2,</math>कहाँ <math>\pi</math> प्रोग्राम में डिसीज़न पॉइंटओं की संख्या है, और {{mvar|s}} निकास पॉइंटओं की संख्या है।<ref name="ecst" /><ref name="harrison">{{cite journal | journal=Software: Practice and Experience | title=मैकाबे की जटिलता माप को बहु-निकास कार्यक्रमों पर लागू करना| author=Harrison | date=October 1984 | doi=10.1002/spe.4380141009 | volume=14 | issue=10 | pages=1004–1007 | s2cid=62422337}}</ref>


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


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


चक्र स्थान के लिए एक आधार आसानी से ग्राफ सिद्धांत # ग्राफ के पेड़ों की शब्दावली को ठीक करके बनाया जा सकता है, और फिर जंगल में नहीं एक किनारे से बने चक्रों और उस किनारे के अंतिम बिंदुओं को जोड़ने वाले जंगल में पथ पर विचार किया जा सकता है; ये चक्र चक्र स्थान के लिए आधार बनाते हैं। इसलिए, साइक्लोमैटिक संख्या ग्राफ़ के अधिकतम फैले हुए जंगल में नहीं किनारों की संख्या के बराबर होती है। चूँकि ग्राफ़ के अधिकतम फैले हुए जंगल में किनारों की संख्या शीर्षों की संख्या घटा घटकों की संख्या के बराबर होती है, सूत्र <math>E-N+P</math> चक्रीय संख्या के लिए ऊपर इस प्रकार है।<ref>{{cite book
चक्र स्थान के लिए एक आधार आसानी से ग्राफ सिद्धांत # ग्राफ के पेड़ों की शब्दावली को ठीक करके बनाया जा सकता है, और फिर जंगल में नहीं एक एज से बने चक्रों और उस एज के अंतिम पॉइंटओं को जोड़ने वाले जंगल में पाथ पर विचार किया जा सकता है; ये चक्र चक्र स्थान के लिए आधार बनाते हैं। इसलिए, साइक्लोमैटिक संख्या ग्राफ़ के अधिकतम फैले हुए जंगल में नहीं किनारों की संख्या के समतुल्य होती है। चूँकि ग्राफ़ के अधिकतम फैले हुए जंगल में किनारों की संख्या शीर्षों की संख्या घटा घटकों की संख्या के समतुल्य होती है, सूत्र <math>E-N+P</math> साईक्लोमैटिक संख्या के लिए ऊपर इस प्रकार है।<ref>{{cite book
|last=Diestel
|last=Diestel
|first=Reinhard
|first=Reinhard
Line 46: Line 46:
|isbn=978-0-387-98976-1
|isbn=978-0-387-98976-1
}}</ref>
}}</ref>
अधिक टोपोलॉजिकली झुकाव के लिए, साइक्लोमैटिक जटिलता को वैकल्पिक रूप से एक सापेक्ष बेट्टी संख्या, एक सापेक्ष होमोलॉजी समूह के आकार के रूप में परिभाषित किया जा सकता है:
अधिक टोपोलॉजिकली झुकाव के लिए, साइक्लोमैटिक कम्पलेक्सिटी को वैकल्पिक रूप से एक सापेक्ष बेट्टी संख्या, एक सापेक्ष होमोलॉजी समूह के आकार के रूप में परिभाषित किया जा सकता है:
<math display="block">M := b_1(G,t) := \operatorname{rank}H_1(G,t),</math>
<math display="block">M := b_1(G,t) := \operatorname{rank}H_1(G,t),</math>
जिसे टर्मिनल नोड्स टी के सापेक्ष ग्राफ़ जी के पहले होमोलॉजी समूह की रैंक के रूप में पढ़ा जाता है। यह एक प्रवेश से निकास तक प्रवाह ग्राफ के माध्यम से रैखिक रूप से स्वतंत्र पथों की संख्या कहने का एक तकनीकी तरीका है, जहां:
जिसे टर्मिनल नोड्स टी के सापेक्ष ग्राफ़ जी के पहले होमोलॉजी समूह की रैंक के रूप में पढ़ा जाता है। यह एक प्रवेश से निकास तक फ्लो ग्राफ के माध्यम से रैखिक रूप से इंडिपेंडेंट पाथ्स की संख्या कहने का एक तकनीकी तरीका है, जहां:
* रैखिक रूप से स्वतंत्र समरूपता से मेल खाता है, और इसका मतलब है कि कोई बैकट्रैकिंग को दोगुना नहीं करता है;
* रैखिक रूप से इंडिपेंडेंट समरूपता से मेल खाता है, और इसका मतलब है कि कोई बैकट्रैकिंग को दोगुना नहीं करता है;
* पथ प्रथम समरूपता से मेल खाते हैं: पथ एक 1-आयामी वस्तु है;
* पाथ प्रथम समरूपता से मेल खाते हैं: पाथ एक 1-आयामी वस्तु है;
* सापेक्ष का अर्थ है कि पथ किसी प्रवेश या निकास बिंदु पर शुरू और समाप्त होना चाहिए।
* सापेक्ष का अर्थ है कि पाथ किसी प्रवेश या निकास पॉइंट पर शुरू और समाप्त होना चाहिए।


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


वैकल्पिक रूप से, कोई किसी दिए गए घटक पर सभी टर्मिनल नोड्स की पहचान करके (एक साथ चिपकाकर) पूर्ण बेट्टी संख्या (पूर्ण समरूपता - सापेक्ष नहीं) के माध्यम से इसकी गणना कर सकता है (या समकक्ष, प्रवेश द्वार से निकास को जोड़ने वाले पथ बनाएं), जिस स्थिति में (नए, संवर्धित ग्राफ को कॉल करना) <math>\tilde G</math>, जो है ), एक प्राप्त होता है
वैकल्पिक रूप से, कोई किसी दिए गए घटक पर सभी टर्मिनल नोड्स की पहचान करके (एक साथ चिपकाकर) पूर्ण बेट्टी संख्या (पूर्ण समरूपता - सापेक्ष नहीं) के माध्यम से इसकी कंप्यूटेड कर सकता है (या समकक्ष, प्रवेश द्वार से निकास को जोड़ने वाले पाथ बनाएं), जिस स्थिति में (नए, संवर्धित ग्राफ को कॉल करना) <math>\tilde G</math>, जो है ), एक प्राप्त होता है
<math display="block">M = b_1(\tilde G) = \operatorname{rank}H_1(\tilde G).</math>
<math display="block">M = b_1(\tilde G) = \operatorname{rank}H_1(\tilde G).</math>
इसकी गणना [[होमोटॉपी]] के माध्यम से भी की जा सकती है। यदि कोई (जुड़े हुए) नियंत्रण-प्रवाह ग्राफ को 1-आयामी [[सीडब्ल्यू कॉम्प्लेक्स]] मानता है, तो इसे कहा जाता है <math>X</math>, फिर का [[मौलिक समूह]] <math>X</math> होगा <math>\pi_1(X) \cong \Z^{*n}</math>. का मान है <math>n+1</math> चक्रीय जटिलता है. मौलिक समूह गणना करता है कि होमोटॉपी तक ग्राफ़ के माध्यम से कितने लूप हैं, और इसलिए हम सहज रूप से जो अपेक्षा करते हैं उसके साथ संरेखित होता है।
इसकी कंप्यूटेड [[होमोटॉपी]] के माध्यम से भी की जा सकती है। यदि कोई (जुड़े हुए) कंट्रोल-फ्लो ग्राफ को 1-आयामी [[सीडब्ल्यू कॉम्प्लेक्स]] मानता है, तो इसे कहा जाता है <math>X</math>, फिर का [[मौलिक समूह]] <math>X</math> होगा <math>\pi_1(X) \cong \Z^{*n}</math>. का मान है <math>n+1</math> साईक्लोमैटिक कम्पलेक्सिटी है. मौलिक समूह कंप्यूटेड करता है कि होमोटॉपी तक ग्राफ़ के माध्यम से कितने लूप हैं, और इसलिए हम सहज रूप से जो अपेक्षा करते हैं उसके साथ संरेखित होता है।


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


=== व्याख्या ===
=== व्याख्या ===
अपनी प्रस्तुति में 'जोखिम की पहचान करने के लिए सॉफ्टवेयर गुणवत्ता मेट्रिक्स'<ref>{{cite web |url=http://www.mccabe.com/ppt/SoftwareQualityMetricsToIdentifyRisk.ppt |title=जोखिम की पहचान करने के लिए सॉफ़्टवेयर गुणवत्ता मेट्रिक्स|author=Thomas McCabe Jr. |year=2008 |archive-url=https://web.archive.org/web/20220329072759/http://www.mccabe.com/ppt/SoftwareQualityMetricsToIdentifyRisk.ppt |archive-date=2022-03-29 |url-status=live}}</ref> होमलैंड सिक्योरिटी विभाग के लिए, टॉम मैककेबे ने चक्रीय जटिलता की व्याख्या करने के लिए निम्नलिखित वर्गीकरण प्रस्तुत किया है:
अपनी प्रस्तुति में 'जोखिम की पहचान करने के लिए सॉफ्टवेयर गुणवत्ता मेट्रिक्स'<ref>{{cite web |url=http://www.mccabe.com/ppt/SoftwareQualityMetricsToIdentifyRisk.ppt |title=जोखिम की पहचान करने के लिए सॉफ़्टवेयर गुणवत्ता मेट्रिक्स|author=Thomas McCabe Jr. |year=2008 |archive-url=https://web.archive.org/web/20220329072759/http://www.mccabe.com/ppt/SoftwareQualityMetricsToIdentifyRisk.ppt |archive-date=2022-03-29 |url-status=live}}</ref> होमलैंड सिक्योरिटी विभाग के लिए, टॉम मैककेबे ने साईक्लोमैटिक कम्पलेक्सिटी की व्याख्या करने के लिए निम्नलिखित क्लासेसीकरण प्रस्तुत किया है:


*1-10 सरल प्रक्रिया, थोड़ा जोखिम
*1-10 सरल प्रक्रिया, थोड़ा जोखिम
Line 71: Line 71:
==अनुप्रयोग==
==अनुप्रयोग==


===विकास के दौरान जटिलता को सीमित करना===
===विकास के दौरान कम्पलेक्सिटी को सीमित करना===
मैककेबे के मूल अनुप्रयोगों में से एक कार्यक्रम विकास के दौरान दिनचर्या की जटिलता को सीमित करना था; उन्होंने सुझाव दिया कि प्रोग्रामर्स को अपने द्वारा विकसित किए जा रहे मॉड्यूल की जटिलता की गणना करनी चाहिए, और जब भी मॉड्यूल की साइक्लोमैटिक जटिलता 10 से अधिक हो तो उन्हें छोटे मॉड्यूल में विभाजित करना चाहिए।<ref name="mccabe76" />इस अभ्यास को [[एनआईएसटी]] संरचित परीक्षण पद्धति द्वारा अपनाया गया था, इस अवलोकन के साथ कि मैककेबे के मूल प्रकाशन के बाद से, 10 के आंकड़े को पर्याप्त पुष्ट साक्ष्य प्राप्त हुए थे, लेकिन कुछ परिस्थितियों में प्रतिबंध में ढील देना और 15 तक की जटिलता वाले मॉड्यूल को अनुमति देना उचित हो सकता है। चूंकि पद्धति ने स्वीकार किया कि सहमति-सीमा से परे जाने के लिए कभी-कभी कारण थे, इसने अपनी सिफारिश को प्रत्येक मॉड्यूल के लिए, या तो साइक्लोमैटिक जटिलता को [सहमत-सीमा] तक सीमित कर दिया या एक प्रदान किया। सीमा क्यों पार की गई इसका लिखित स्पष्टीकरण।<ref name="nist">{{cite web|
मैककेबे के मूल अनुप्रयोगों में से एक प्रोग्राम विकास के दौरान दिनचर्या की कम्पलेक्सिटी को सीमित करना था; उन्होंने सुझाव दिया कि प्रोग्रामर्स को अपने द्वारा विकसित किए जा रहे मॉड्यूल की कम्पलेक्सिटी की कंप्यूटेड करनी चाहिए, और जब भी मॉड्यूल की साइक्लोमैटिक कम्पलेक्सिटी 10 से अधिक हो तो उन्हें छोटे मॉड्यूल में विभाजित करना चाहिए।<ref name="mccabe76" />इस अभ्यास को [[एनआईएसटी]] संरचित टैस्टिंग पद्धति द्वारा अपनाया गया था, इस अवलोकन के साथ कि मैककेबे के मूल प्रकाशन के बाद से, 10 के आंकड़े को पर्याप्त पुष्ट साक्ष्य प्राप्त हुए थे, लेकिन कुछ परिस्थितियों में प्रतिबंध में ढील देना और 15 तक की कम्पलेक्सिटी वाले मॉड्यूल को अनुमति देना उचित हो सकता है। चूंकि पद्धति ने स्वीकार किया कि सहमति-सीमा से परे जाने के लिए कभी-कभी कारण थे, इसने अपनी सिफारिश को प्रत्येक मॉड्यूल के लिए, या तो साइक्लोमैटिक कम्पलेक्सिटी को [सहमत-सीमा] तक सीमित कर दिया या एक प्रदान किया। सीमा क्यों पार की गई इसका लिखित स्पष्टीकरण।<ref name="nist">{{cite web|
url=http://www.mccabe.com/pdf/mccabe-nist235r.pdf| title=Structured Testing: A Testing Methodology Using the Cyclomatic Complexity Metric|author1=Arthur H. Watson |author2=Thomas J. McCabe | year=1996|publisher=NIST Special Publication 500-235}}</ref>
url=http://www.mccabe.com/pdf/mccabe-nist235r.pdf| title=Structured Testing: A Testing Methodology Using the Cyclomatic Complexity Metric|author1=Arthur H. Watson |author2=Thomas J. McCabe | year=1996|publisher=NIST Special Publication 500-235}}</ref>
===किसी प्रोग्राम की संरचना को मापना===
===किसी प्रोग्राम की संरचना को मापना===
{{Main|Essential complexity (numerical measure of "structuredness")}} मैककेबे के 1976 के पेपर का खंड VI यह निर्धारित करने से संबंधित है कि गैर-संरचित प्रोग्रामिंग के नियंत्रण-प्रवाह ग्राफ़ (सीएफजी) उनके सबग्राफ के संदर्भ में कैसा दिखते हैं, जिसे मैककेबे पहचानते हैं। (उस भाग के विवरण के लिए [[संरचित कार्यक्रम प्रमेय]] देखें।) मैककेबे ने उस खंड को एक संख्यात्मक माप का प्रस्ताव देकर समाप्त किया है कि कोई दिया गया कार्यक्रम संरचित प्रोग्रामिंग आदर्श के कितना करीब है, यानी मैककेबे के नवशास्त्रवाद का उपयोग करके इसकी संरचितता। मैककेबे ने इस उद्देश्य के लिए जो माप तैयार किया, उसे आवश्यक जटिलता (संरचितता का संख्यात्मक माप) कहा।<ref name="mccabe76" />
{{Main|Essential complexity (numerical measure of "structuredness")}} मैककेबे के 1976 के पेपर का खंड VI यह निर्धारित करने से संबंधित है कि गैर-संरचित प्रोग्रामिंग के कंट्रोल-फ्लो ग्राफ़ (सीएफजी) उनके सबग्राफ के संदर्भ में कैसा दिखते हैं, जिसे मैककेबे पहचानते हैं। (उस भाग के विवरण के लिए [[संरचित कार्यक्रम प्रमेय|संरचित प्रोग्राम प्रमेय]] देखें।) मैककेबे ने उस खंड को एक संख्यात्मक माप का प्रस्ताव देकर समाप्त किया है कि कोई दिया गया प्रोग्राम संरचित प्रोग्रामिंग आदर्श के कितना करीब है, यानी मैककेबे के नवशास्त्रवाद का उपयोग करके इसकी संरचितता। मैककेबे ने इस उद्देश्य के लिए जो माप तैयार किया, उसे आवश्यक कम्पलेक्सिटी (संरचितता का संख्यात्मक माप) कहा।<ref name="mccabe76" />


इस माप की गणना करने के लिए, मूल सीएफजी को एकल-प्रविष्टि और एकल-निकास बिंदु वाले सबग्राफ की पहचान करके पुनरावृत्त रूप से कम किया जाता है, जिन्हें फिर एक नोड द्वारा प्रतिस्थापित किया जाता है। यह कटौती इस बात से मेल खाती है कि यदि कोई इंसान कोड के बड़े हिस्से से एक सबरूटीन निकालता है तो वह क्या करेगा। (आजकल ऐसी प्रक्रिया [[पुनर्रचना]] के छत्र शब्द के अंतर्गत आती है।) मैककेबे की कटौती विधि को बाद में कुछ पाठ्यपुस्तकों में संक्षेपण कहा गया, क्योंकि इसे संक्षेपण (ग्राफ सिद्धांत) के सामान्यीकरण के रूप में देखा गया था।<ref>{{cite book|author=Paul C. Jorgensen|title=Software Testing: A Craftsman's Approach, Second Edition|url=https://books.google.com/books?id=Yph_AwAAQBAJ&pg=PA150|year=2002|publisher=CRC Press|isbn=978-0-8493-0809-3|pages=150–153|edition=2nd}}</ref> यदि कोई प्रोग्राम संरचित है, तो मैककेबे की कमी/संक्षेपण प्रक्रिया इसे एकल सीएफजी नोड में कम कर देती है। इसके विपरीत, यदि प्रोग्राम संरचित नहीं है, तो पुनरावृत्त प्रक्रिया अपरिवर्तनीय भाग की पहचान करेगी। मैककेबे द्वारा परिभाषित आवश्यक जटिलता माप केवल इस अपरिवर्तनीय ग्राफ की चक्रीय जटिलता है, इसलिए यह सभी संरचित कार्यक्रमों के लिए सटीक रूप से 1 होगा, लेकिन गैर-संरचित कार्यक्रमों के लिए एक से अधिक होगा।<ref name="nist"/>{{rp|80}}
इस माप की कंप्यूटेड करने के लिए, मूल सीएफजी को एकल-प्रविष्टि और एकल-निकास पॉइंट वाले सबग्राफ की पहचान करके पुनरावृत्त रूप से कम किया जाता है, जिन्हें फिर एक नोड द्वारा प्रतिस्थापित किया जाता है। यह कटौती इस बात से मेल खाती है कि यदि कोई इंसान कोड के बड़े हिस्से से एक सबरूटीन निकालता है तो वह क्या करेगा। (आजकल ऐसी प्रक्रिया [[पुनर्रचना]] के छत्र शब्द के अंतर्गत आती है।) मैककेबे की कटौती मेथड्स को बाद में कुछ पाठ्यपुस्तकों में संक्षेपण कहा गया, क्योंकि इसे संक्षेपण (ग्राफ सिद्धांत) के सामान्यीकरण के रूप में देखा गया था।<ref>{{cite book|author=Paul C. Jorgensen|title=Software Testing: A Craftsman's Approach, Second Edition|url=https://books.google.com/books?id=Yph_AwAAQBAJ&pg=PA150|year=2002|publisher=CRC Press|isbn=978-0-8493-0809-3|pages=150–153|edition=2nd}}</ref> यदि कोई प्रोग्राम संरचित है, तो मैककेबे की कमी/संक्षेपण प्रक्रिया इसे एकल सीएफजी नोड में कम कर देती है। इसके विपरीत, यदि प्रोग्राम संरचित नहीं है, तो पुनरावृत्त प्रक्रिया अपरिवर्तनीय भाग की पहचान करेगी। मैककेबे द्वारा परिभाषित आवश्यक कम्पलेक्सिटी माप केवल इस अपरिवर्तनीय ग्राफ की साईक्लोमैटिक कम्पलेक्सिटी है, इसलिए यह सभी संरचित प्रोग्रामों के लिए सटीक रूप से 1 होगा, लेकिन गैर-संरचित प्रोग्रामों के लिए एक से अधिक होगा।<ref name="nist"/>{{rp|80}}
===सॉफ़्टवेयर परीक्षण के लिए निहितार्थ===
===सॉफ़्टवेयर टैस्टिंग के लिए निहितार्थ===
साइक्लोमैटिक जटिलता का एक अन्य अनुप्रयोग उन परीक्षण मामलों की संख्या निर्धारित करना है जो किसी विशेष मॉड्यूल के संपूर्ण परीक्षण कवरेज को प्राप्त करने के लिए आवश्यक हैं।
साइक्लोमैटिक कम्पलेक्सिटी का एक अन्य अनुप्रयोग उन टैस्टिंग स्थितियों की संख्या निर्धारित करना है जो किसी विशेष मॉड्यूल के संपूर्ण टैस्टिंग कवरेज को प्राप्त करने के लिए आवश्यक हैं।


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


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


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


[[File:Control flow graph of function with two if else statements.svg|thumb|250px|right|उपरोक्त स्रोत कोड का नियंत्रण-प्रवाह ग्राफ़; लाल वृत्त फ़ंक्शन का प्रवेश बिंदु है, और नीला वृत्त निकास बिंदु है। ग्राफ़ को मजबूती से कनेक्ट करने के लिए निकास को प्रवेश से जोड़ा गया है।]]इस उदाहरण में, पूर्ण शाखा कवरेज प्राप्त करने के लिए दो परीक्षण मामले पर्याप्त हैं, जबकि पूर्ण पथ कवरेज के लिए चार आवश्यक हैं। कार्यक्रम की चक्रीय जटिलता 3 है (क्योंकि कार्यक्रम के लिए दृढ़ता से जुड़े ग्राफ में 9 किनारे, 7 नोड्स और 1 जुड़ा घटक शामिल है) ({{math|9 − 7 + 1}}).
[[File:Control flow graph of function with two if else statements.svg|thumb|250px|right|उपरोक्त स्रोत कोड का कंट्रोल-फ्लो ग्राफ़; लाल वृत्त फ़ंक्शन का प्रवेश पॉइंट है, और नीला वृत्त निकास पॉइंट है। ग्राफ़ को मजबूती से कनेक्ट करने के लिए निकास को प्रवेश से जोड़ा गया है।]]इस उदाहरण में, पूर्ण शाखा कवरेज प्राप्त करने के लिए दो टैस्टिंग स्थिति पर्याप्त हैं, जबकि पूर्ण पाथ कवरेज के लिए चार आवश्यक हैं। प्रोग्राम की साईक्लोमैटिक कम्पलेक्सिटी 3 है (क्योंकि प्रोग्राम के लिए दृढ़ता से जुड़े ग्राफ में 9 एज, 7 नोड्स और 1 जुड़ा घटक शामिल है) ({{math|9 − 7 + 1}}).


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


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


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


एक फ़ंक्शन के उदाहरण के रूप में जिसे सटीक रूप से परीक्षण करने के लिए केवल शाखा कवरेज से अधिक की आवश्यकता होती है, उपरोक्त फ़ंक्शन पर फिर से विचार करें, लेकिन मान लें कि बग होने से बचने के लिए, कोई भी कोड जो कॉल करता है <code>f1()</code> या <code>f3()</code> दूसरे को भी बुलाना चाहिए.{{efn|This is a fairly common type of condition; consider the possibility that <code>f1</code> allocates some resource which <code>f3</code> releases.}} यह मानते हुए कि के परिणाम <code>c1()</code> और <code>c2()</code> स्वतंत्र हैं, इसका मतलब है कि ऊपर प्रस्तुत फ़ंक्शन में एक बग है। शाखा कवरेज हमें केवल दो परीक्षणों के साथ विधि का परीक्षण करने की अनुमति देगा, और परीक्षणों का एक संभावित सेट निम्नलिखित मामलों का परीक्षण करना होगा:
एक फ़ंक्शन के उदाहरण के रूप में जिसे सटीक रूप से टैस्टिंग करने के लिए केवल शाखा कवरेज से अधिक की आवश्यकता होती है, उपरोक्त फ़ंक्शन पर फिर से विचार करें, लेकिन मान लें कि बग होने से बचने के लिए, कोई भी कोड जो कॉल करता है <code>f1()</code> या <code>f3()</code> दूसरे को भी बुलाना चाहिए.{{efn|This is a fairly common type of condition; consider the possibility that <code>f1</code> allocates some resource which <code>f3</code> releases.}} यह मानते हुए कि के परिणाम <code>c1()</code> और <code>c2()</code> इंडिपेंडेंट हैं, इसका मतलब है कि ऊपर प्रस्तुत फ़ंक्शन में एक बग है। शाखा कवरेज हमें केवल दो टैस्टिंगों के साथ मेथड्स का टैस्टिंग करने की अनुमति देगा, और टैस्टिंगों का एक संभावित सेट निम्नलिखित स्थितियों का टैस्टिंग करना होगा:


* <code>c1()</code> सत्य लौटाता है और <code>c2()</code> सत्य लौटाता है
* <code>c1()</code> सत्य लौटाता है और <code>c2()</code> सत्य लौटाता है
* <code>c1()</code> झूठा रिटर्न देता है और <code>c2()</code> झूठा लौटाता है
* <code>c1()</code> झूठा रिटर्न देता है और <code>c2()</code> झूठा लौटाता है


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


* <code>c1()</code> सत्य लौटाता है और <code>c2()</code> झूठा लौटाता है
* <code>c1()</code> सत्य लौटाता है और <code>c2()</code> झूठा लौटाता है
* <code>c1()</code> झूठा रिटर्न देता है और <code>c2()</code> सत्य लौटाता है
* <code>c1()</code> झूठा रिटर्न देता है और <code>c2()</code> सत्य लौटाता है


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


===दोषों की संख्या से सहसंबंध===
===दोषों की संख्या से सहसंबंध===
कई अध्ययनों ने किसी फ़ंक्शन या विधि में होने वाले दोषों की आवृत्ति के साथ मैककेबे की साइक्लोमैटिक जटिलता संख्या के बीच संबंध की जांच की है।<ref name="fenton">{{cite journal
कई अध्ययनों ने किसी फ़ंक्शन या मेथड्स में होने वाले दोषों की आवृत्ति के साथ मैककेबे की साइक्लोमैटिक कम्पलेक्सिटी संख्या के बीच संबंध की जांच की है।<ref name="fenton">{{cite journal
|journal=IEEE Transactions on Software Engineering|author1=Norman E Fenton |author2=Martin Neil |
|journal=IEEE Transactions on Software Engineering|author1=Norman E Fenton |author2=Martin Neil |
url=http://www.eecs.qmul.ac.uk/~norman/papers/defects_prediction_preprint105579.pdf|
url=http://www.eecs.qmul.ac.uk/~norman/papers/defects_prediction_preprint105579.pdf|
title=A Critique of Software Defect Prediction Models|
title=A Critique of Software Defect Prediction Models|
year=1999|volume=25|issue=3|pages=675–689|doi=10.1109/32.815326|citeseerx=10.1.1.548.2998 }}</ref> कुछ अध्ययन<ref name="schroeder99">{{cite journal| title=ऑब्जेक्ट-ओरिएंटेड मेट्रिक्स के लिए एक व्यावहारिक मार्गदर्शिका|author=Schroeder, Mark|s2cid=14945518|year=1999|volume=1|issue=6|pages=30–36|journal=IT Professional |doi=10.1109/6294.806902}}</ref> चक्रीय जटिलता और दोषों के बीच एक सकारात्मक सहसंबंध खोजें: जिन कार्यों और विधियों में सबसे अधिक जटिलता होती है उनमें सबसे अधिक दोष भी होते हैं। हालाँकि, साइक्लोमैटिक जटिलता और प्रोग्राम आकार (आमतौर पर कोड की पंक्तियों में मापा जाता है) के बीच संबंध को कई बार प्रदर्शित किया गया है। [[ द हैटन्स ]] ने दावा किया है<ref name="taic">
year=1999|volume=25|issue=3|pages=675–689|doi=10.1109/32.815326|citeseerx=10.1.1.548.2998 }}</ref> कुछ अध्ययन<ref name="schroeder99">{{cite journal| title=ऑब्जेक्ट-ओरिएंटेड मेट्रिक्स के लिए एक व्यावहारिक मार्गदर्शिका|author=Schroeder, Mark|s2cid=14945518|year=1999|volume=1|issue=6|pages=30–36|journal=IT Professional |doi=10.1109/6294.806902}}</ref> साईक्लोमैटिक कम्पलेक्सिटी और दोषों के बीच एक सकारात्मक सहसंबंध खोजें: जिन कार्यों और मेथड्सयों में सबसे अधिक कम्पलेक्सिटी होती है उनमें सबसे अधिक दोष भी होते हैं। हालाँकि, साइक्लोमैटिक कम्पलेक्सिटी और प्रोग्राम आकार (आमतौर पर कोड की पंक्तियों में मापा जाता है) के बीच संबंध को कई बार प्रदर्शित किया गया है। [[ द हैटन्स |द हैटन्स]] ने दावा किया है<ref name="taic">
{{cite web |url=http://www.leshatton.org/TAIC2008-29-08-2008.html |title=The role of empiricism in improving the reliability of future software |author=Les Hatton |year=2008 |at=version 1.1}}</ref> उस जटिलता में कोड की पंक्तियों के समान ही पूर्वानुमान लगाने की क्षमता होती है।
{{cite web |url=http://www.leshatton.org/TAIC2008-29-08-2008.html |title=The role of empiricism in improving the reliability of future software |author=Les Hatton |year=2008 |at=version 1.1}}</ref> उस कम्पलेक्सिटी में कोड की पंक्तियों के समान ही पूर्वानुमान लगाने की क्षमता होती है।
कार्यक्रम के आकार को नियंत्रित करने वाले अध्ययन (अर्थात, अलग-अलग जटिलताओं वाले लेकिन समान आकार वाले मॉड्यूल की तुलना करना) आम तौर पर कम निर्णायक होते हैं, जिनमें से कई में कोई महत्वपूर्ण सहसंबंध नहीं पाया जाता है, जबकि अन्य में सहसंबंध पाया जाता है। क्षेत्र का अध्ययन करने वाले कुछ शोधकर्ता कोई सहसंबंध नहीं पाते हुए अध्ययन में उपयोग की जाने वाली विधियों की वैधता पर सवाल उठाते हैं।<ref name="kan">
प्रोग्राम के आकार को नियंत्रित करने वाले अध्ययन (अर्थात, अलग-अलग कम्पलेक्सिटीओं वाले लेकिन समान आकार वाले मॉड्यूल की तुलना करना) आम तौर पर कम निर्णायक होते हैं, जिनमें से कई में कोई महत्वपूर्ण सहसंबंध नहीं पाया जाता है, जबकि अन्य में सहसंबंध पाया जाता है। क्षेत्र का अध्ययन करने वाले कुछ शोधकर्ता कोई सहसंबंध नहीं पाते हुए अध्ययन में उपयोग की जाने वाली मेथड्सयों की वैधता पर सवाल उठाते हैं।<ref name="kan">
{{cite book |title=Metrics and Models in Software Quality Engineering |author=Kan |pages=316–317 |publisher=Addison-Wesley |year=2003 |isbn=978-0-201-72915-3}}</ref> हालाँकि यह संबंध संभवतः सत्य है, लेकिन इसे आसानी से उपयोग में नहीं लाया जा सकता।<ref name=cherf>{{cite journal|
{{cite book |title=Metrics and Models in Software Quality Engineering |author=Kan |pages=316–317 |publisher=Addison-Wesley |year=2003 |isbn=978-0-201-72915-3}}</ref> हालाँकि यह संबंध संभवतः सत्य है, लेकिन इसे आसानी से उपयोग में नहीं लाया जा सकता।<ref name=cherf>{{cite journal|
journal=Journal of Software Quality|
journal=Journal of Software Quality|
Line 135: Line 135:
year=1992|volume=1|issue=3|pages=147–158|
year=1992|volume=1|issue=3|pages=147–158|
issn=1573-1367|doi=10.1007/bf01720922|
issn=1573-1367|doi=10.1007/bf01720922|
s2cid=37274091}}</ref> चूँकि प्रोग्राम का आकार व्यावसायिक सॉफ़्टवेयर की नियंत्रणीय विशेषता नहीं है, इसलिए मैककेब्स के नंबर की उपयोगिता पर प्रश्न उठाया गया है।<ref name="fenton" />इस अवलोकन का सार यह है कि बड़े कार्यक्रम अधिक जटिल होते हैं और उनमें अधिक दोष होते हैं। कोड की चक्रीय जटिलता को कम करने से सहसंबंध उस कोड में त्रुटियों या बग की संख्या को कम करने का कारण नहीं बनता है। हालाँकि, [[ISO 26262]] जैसे अंतर्राष्ट्रीय सुरक्षा मानक, कम कोड जटिलता को लागू करने वाले कोडिंग दिशानिर्देशों को अनिवार्य करते हैं।<ref name="ISO26262Part3">{{cite book | title =ISO 26262-3:2011(en) Road vehicles — Functional safety — Part 3: Concept phase| publisher =International Standardization Organization | url =https://www.iso.org/obp/ui/#iso:std:iso:26262:-3:ed-1:v1:en}}</ref>
s2cid=37274091}}</ref> चूँकि प्रोग्राम का आकार व्यावसायिक सॉफ़्टवेयर की कंट्रोलीय विशेषता नहीं है, इसलिए मैककेब्स के नंबर की उपयोगिता पर प्रश्न उठाया गया है।<ref name="fenton" />इस अवलोकन का सार यह है कि बड़े प्रोग्राम अधिक जटिल होते हैं और उनमें अधिक दोष होते हैं। कोड की साईक्लोमैटिक कम्पलेक्सिटी को कम करने से सहसंबंध उस कोड में त्रुटियों या बग की संख्या को कम करने का कारण नहीं बनता है। हालाँकि, [[ISO 26262]] जैसे अंतर्राष्ट्रीय सुरक्षा मानक, कम कोड कम्पलेक्सिटी को लागू करने वाले कोडिंग दिशानिर्देशों को अनिवार्य करते हैं।<ref name="ISO26262Part3">{{cite book | title =ISO 26262-3:2011(en) Road vehicles — Functional safety — Part 3: Concept phase| publisher =International Standardization Organization | url =https://www.iso.org/obp/ui/#iso:std:iso:26262:-3:ed-1:v1:en}}</ref>
==कृत्रिम बुद्धि==
==कृत्रिम बुद्धि==
कृत्रिम बुद्धिमत्ता कार्यक्रमों की सिमेंटिक जटिलता के मूल्यांकन के लिए साइक्लोमैटिक जटिलता का भी उपयोग किया जा सकता है।<ref>{{cite journal |doi=10.1016/j.compag.2011.11.009 |title=भूमध्यसागरीय परिदृश्य परिवर्तनों की जटिलता के मॉडलिंग में कृत्रिम बुद्धिमत्ता|journal=Computers and Electronics in Agriculture |volume=81 |pages=87–96 |year=2012 |last1=Papadimitriou |first1=Fivos }}</ref>
कृत्रिम बुद्धिमत्ता प्रोग्रामों की सिमेंटिक कम्पलेक्सिटी के मूल्यांकन के लिए साइक्लोमैटिक कम्पलेक्सिटी का भी उपयोग किया जा सकता है।<ref>{{cite journal |doi=10.1016/j.compag.2011.11.009 |title=भूमध्यसागरीय परिदृश्य परिवर्तनों की जटिलता के मॉडलिंग में कृत्रिम बुद्धिमत्ता|journal=Computers and Electronics in Agriculture |volume=81 |pages=87–96 |year=2012 |last1=Papadimitriou |first1=Fivos }}</ref>
==अल्ट्रामेट्रिक टोपोलॉजी==
==अल्ट्रामेट्रिक टोपोलॉजी==
साइक्लोमैटिक जटिलता भौगोलिक और परिदृश्य-पारिस्थितिक विश्लेषण में उपयोगी साबित हुई है, यह दिखाए जाने के बाद कि इसे [[अल्ट्रामेट्रिक स्पेस]] दूरी के ग्राफ़ पर लागू किया जा सकता है।<ref>{{cite journal |doi=10.1080/1747423X.2011.637136 |title=अल्ट्रामेट्रिक टोपोलॉजी के साथ भूमि उपयोग और परिदृश्य जटिलता का गणितीय मॉडलिंग|journal=Journal of Land Use Science |volume=8 |issue=2 |pages=234–254 |year=2013 |last1=Papadimitriou |first1=Fivos |s2cid=121927387 |doi-access=free }}</ref>
साइक्लोमैटिक कम्पलेक्सिटी भौगोलिक और परिदृश्य-पारिस्थितिक विश्लेषण में उपयोगी साबित हुई है, यह दिखाए जाने के बाद कि इसे [[अल्ट्रामेट्रिक स्पेस]] दूरी के ग्राफ़ पर लागू किया जा सकता है।<ref>{{cite journal |doi=10.1080/1747423X.2011.637136 |title=अल्ट्रामेट्रिक टोपोलॉजी के साथ भूमि उपयोग और परिदृश्य जटिलता का गणितीय मॉडलिंग|journal=Journal of Land Use Science |volume=8 |issue=2 |pages=234–254 |year=2013 |last1=Papadimitriou |first1=Fivos |s2cid=121927387 |doi-access=free }}</ref>
==यह भी देखें==
==यह भी देखें==
* प्रोग्रामिंग जटिलता
* प्रोग्रामिंग कम्पलेक्सिटी
* [[जटिलता जाल]]
* [[जटिलता जाल|कम्पलेक्सिटी जाल]]
* [[कंप्यूटर प्रोग्राम]]
* [[कंप्यूटर प्रोग्राम]]
* [[कंप्यूटर प्रोग्रामिंग]]
* [[कंप्यूटर प्रोग्रामिंग]]
* बहाव को काबू करें
* बहाव को काबू करें
* [[निर्णय-से-निर्णय पथ]]
* [[निर्णय-से-निर्णय पथ|डिसीज़न-से-डिसीज़न पाथ]]
* डिज़ाइन विधेय
* डिज़ाइन विधेय
* आवश्यक जटिलता (संरचितता का संख्यात्मक माप)
* आवश्यक कम्पलेक्सिटी (संरचितता का संख्यात्मक माप)
* हालस्टेड जटिलता उपाय
* हालस्टेड कम्पलेक्सिटी उपाय
* [[सॉफ्टवेयर इंजीनियरिंग]]
* [[सॉफ्टवेयर इंजीनियरिंग]]
* सॉफ़्टवेयर परीक्षण
* सॉफ़्टवेयर टैस्टिंग
* [[स्थैतिक कार्यक्रम विश्लेषण]]
* [[स्थैतिक कार्यक्रम विश्लेषण|स्थैतिक प्रोग्राम विश्लेषण]]
* [[रख-रखाव]]
* [[रख-रखाव]]



Revision as of 09:05, 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.


बाहरी संबंध