क्या जटिलता और पुनरावृत्ति के बीच संबंध है?


18

मैं हाल ही में यूनी में साइक्लोमैटिक जटिलता (मैककेबे) और सॉफ्टवेयर की पुनरावृत्ति का अध्ययन कर रहा हूं। आज मेरे व्याख्याता ने कहा कि दोनों मैट्रिक्स के बीच कोई संबंध नहीं है, लेकिन क्या वास्तव में ऐसा है?

मुझे लगता है कि निश्चित रूप से कुछ सहसंबंध होंगे, क्योंकि कम जटिल कार्यक्रम (जिस पर हमने बहुत गौर किया है) से रीछबैलिटी के संदर्भ में 'बेहतर' परिणाम प्रतीत होते हैं।

क्या किसी को दोनों मैट्रिक्स को एक साथ देखने के किसी भी प्रयास का पता है, और यदि नहीं, तो कार्यक्रमों की एक बड़ी (ish) संख्या के लिए जटिलता और पुनरावृत्ति दोनों पर डेटा खोजने के लिए एक अच्छी जगह क्या होगी?

जवाबों:


2

मैं हाल ही में यूनी में साइक्लोमैटिक जटिलता (मैककेबे) और सॉफ्टवेयर की पुनरावृत्ति का अध्ययन कर रहा हूं। आज मेरे व्याख्याता ने कहा कि दोनों मैट्रिक्स के बीच कोई संबंध नहीं है, लेकिन क्या वास्तव में ऐसा है?

असल में हाँ और ना दोनों।

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

CC = E - N

रिएक्शन की समस्या ग्राफ थ्योरी में एक आम समस्या है जिसे इस तरह से व्यक्त किया जा सकता है: दो नोड्स ए और बी दिए गए, नोड ए से नोड बी है, जो कि ए से शुरू होने वाले बी तक पहुंच सकता है और सही तरीके से ग्राफ के किनारों का अनुसरण कर सकता है। दिशा? तो, यह फिर से मीट्रिक है जो नियंत्रण प्रवाह ग्राफ पर लागू होता है और कोड पर नहीं।

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

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

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


1

मैं रीचैबिलिटी से परिचित नहीं हूं, लेकिन अगर यह कोड रास्तों का माप है जिसे कभी भी निष्पादित नहीं किया जा सकता है, तो साइक्लोमैटिक जटिलता एक ऊपरी सीमा की तरह होनी चाहिए।


0

इस पर कुछ आंकड़े हो सकते हैं, लेकिन मैं कहूंगा कि कोई संबंध नहीं है क्योंकि एक दूसरे पर निर्भर नहीं है और एक सॉफ्टवेयर सिस्टम के डिजाइन में भी विकल्प है ताकि आप इसे खत्म कर सकें।

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


1
दूसरे के आधार पर एक संबंध है, संबंध नहीं।
जेएफओ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.