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