साइक्लोमेटिक कम्पलेक्सिटी

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

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

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

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

गणितीय रूप से, संरचित प्रोग्रामिंग की चक्रीय जटिलता को प्रोग्राम के नियंत्रण-प्रवाह ग्राफ के संदर्भ में परिभाषित किया गया है, एक निर्देशित ग्राफ जिसमें प्रोग्राम के बुनियादी ब्लॉक होते हैं, दो बुनियादी ब्लॉकों के बीच एक किनारे के साथ यदि नियंत्रण पहले से दूसरे तक जा सकता है। जटिलता $M$ को तब परिभाषित किया गया है

$$M = E - N + 2P,$$ कहाँ
 * $E$ = ग्राफ़ के किनारों की संख्या.
 * $N$ = ग्राफ़ के नोड्स की संख्या।
 * $P$ = जुड़े हुए घटक की संख्या (ग्राफ़ सिद्धांत)।

एक वैकल्पिक सूत्रीकरण एक ग्राफ़ का उपयोग करना है जिसमें प्रत्येक निकास बिंदु वापस प्रवेश बिंदु से जुड़ा होता है। इस मामले में, ग्राफ दृढ़ता से जुड़ा हुआ है, और कार्यक्रम की साइक्लोमैटिक जटिलता इसके ग्राफ की चक्रीय संख्या के बराबर है (जिसे बेट्टी संख्या # उदाहरण 2 के रूप में भी जाना जाता है: ग्राफ सिद्धांत में पहली बेट्टी संख्या), जिसे इस प्रकार परिभाषित किया गया है $$M = E - N + P.$$ इसे ग्राफ़ में मौजूद रैखिक रूप से स्वतंत्र चक्रों की संख्या की गणना के रूप में देखा जा सकता है, यानी वे चक्र जिनके भीतर अन्य चक्र शामिल नहीं हैं। ध्यान दें कि क्योंकि प्रत्येक निकास बिंदु प्रवेश बिंदु पर वापस लूप करता है, प्रत्येक निकास बिंदु के लिए कम से कम एक ऐसा चक्र होता है।

एकल प्रोग्राम (या सबरूटीन या विधि) के लिए, $P$ हमेशा 1 के बराबर होता है। इसलिए एकल सबरूटीन के लिए एक सरल सूत्र है $$M = E - N + 2.$$ हालाँकि, साइक्लोमैटिक जटिलता को एक ही समय में ऐसे कई कार्यक्रमों या उपप्रोग्रामों पर लागू किया जा सकता है (उदाहरण के लिए, एक वर्ग के सभी तरीकों पर), और इन मामलों में $P$ विचाराधीन कार्यक्रमों की संख्या के बराबर होगा, क्योंकि प्रत्येक उपप्रोग्राम ग्राफ़ के डिस्कनेक्ट किए गए सबसेट के रूप में दिखाई देगा।

मैककेबे ने दिखाया कि केवल एक प्रवेश बिंदु और एक निकास बिंदु के साथ किसी भी संरचित कार्यक्रम की चक्रीय जटिलता उस कार्यक्रम में निहित निर्णय बिंदुओं (यानी, यदि कथन या सशर्त लूप) की संख्या प्लस एक के बराबर है। हालाँकि, यह केवल निम्नतम, मशीन-स्तर के निर्देशों पर गिने जाने वाले निर्णय बिंदुओं के लिए सच है। यौगिक विधेय से जुड़े निर्णय जैसे उच्च-स्तरीय भाषाओं में पाए जाते हैं  शामिल विधेय चर के संदर्भ में गिना जाना चाहिए, यानी इस उदाहरण में किसी को दो निर्णय बिंदु गिनने चाहिए, क्योंकि मशीन स्तर पर यह बराबर है. साइक्लोमैटिक जटिलता को कई निकास बिंदुओं वाले प्रोग्राम तक बढ़ाया जा सकता है; इस मामले में यह बराबर है $$\pi - s + 2,$$ कहाँ $$\pi$$ कार्यक्रम में निर्णय बिंदुओं की संख्या है, और $s$ निकास बिंदुओं की संख्या है।

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

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

चक्र स्थान के लिए एक आधार आसानी से ग्राफ सिद्धांत # ग्राफ के पेड़ों की शब्दावली को ठीक करके बनाया जा सकता है, और फिर जंगल में नहीं एक किनारे से बने चक्रों और उस किनारे के अंतिम बिंदुओं को जोड़ने वाले जंगल में पथ पर विचार किया जा सकता है; ये चक्र चक्र स्थान के लिए आधार बनाते हैं। इसलिए, साइक्लोमैटिक संख्या ग्राफ़ के अधिकतम फैले हुए जंगल में नहीं किनारों की संख्या के बराबर होती है। चूँकि ग्राफ़ के अधिकतम फैले हुए जंगल में किनारों की संख्या शीर्षों की संख्या घटा घटकों की संख्या के बराबर होती है, सूत्र $$E-N+P$$ चक्रीय संख्या के लिए ऊपर इस प्रकार है। अधिक टोपोलॉजिकली झुकाव के लिए, साइक्लोमैटिक जटिलता को वैकल्पिक रूप से एक सापेक्ष बेट्टी संख्या, एक सापेक्ष होमोलॉजी समूह के आकार के रूप में परिभाषित किया जा सकता है: $$M := b_1(G,t) := \operatorname{rank}H_1(G,t),$$ जिसे टर्मिनल नोड्स टी के सापेक्ष ग्राफ़ जी के पहले होमोलॉजी समूह की रैंक के रूप में पढ़ा जाता है। यह एक प्रवेश से निकास तक प्रवाह ग्राफ के माध्यम से रैखिक रूप से स्वतंत्र पथों की संख्या कहने का एक तकनीकी तरीका है, जहां:
 * रैखिक रूप से स्वतंत्र समरूपता से मेल खाता है, और इसका मतलब है कि कोई बैकट्रैकिंग को दोगुना नहीं करता है;
 * पथ प्रथम समरूपता से मेल खाते हैं: पथ एक 1-आयामी वस्तु है;
 * सापेक्ष का अर्थ है कि पथ किसी प्रवेश या निकास बिंदु पर शुरू और समाप्त होना चाहिए।

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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


 * सत्य लौटाता है और  सत्य लौटाता है
 * झूठा रिटर्न देता है और  झूठा लौटाता है

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


 * सत्य लौटाता है और  झूठा लौटाता है
 * झूठा रिटर्न देता है और  सत्य लौटाता है

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

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

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

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

यह भी देखें

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

बाहरी संबंध

 * Generating cyclomatic complexity metrics with Polyspace
 * The role of empiricism in improving the reliability of future software
 * McCabe's Cyclomatic Complexity and Why We Don't Use It