कोड मेट्रिक्स के साथ आकर्षण क्या है? [बन्द है]


83

मैंने SO पर कई 'कोड मेट्रिक्स' संबंधित प्रश्न देखे हैं, और मुझे आश्चर्य है कि मोह क्या है? यहाँ कुछ हालिया उदाहरण हैं:

मेरे दिमाग में, कोई भी मीट्रिक कोड समीक्षा के लिए स्थानापन्न नहीं कर सकता है, हालांकि:

  • कुछ मीट्रिक कभी-कभी उन स्थानों को इंगित कर सकते हैं जिनकी समीक्षा करने की आवश्यकता है, और
  • कम समय के फ्रेम पर मैट्रिक्स में आमूल-चूल परिवर्तन उन स्थानों को इंगित कर सकते हैं जिनकी समीक्षा करने की आवश्यकता है

लेकिन मैं एक भी मीट्रिक के बारे में नहीं सोच सकता जो अपने आप में हमेशा 'अच्छे' या 'बुरे' कोड को इंगित करता है - माप को नहीं देख सकने वाली चीजों के हमेशा अपवाद और कारण होते हैं।

क्या कोड मेट्रिक्स से प्राप्त होने वाली कुछ जादुई अंतर्दृष्टि है जिसे मैंने अनदेखा कर दिया है? क्या आलसी प्रोग्रामर / प्रबंधक कोड नहीं पढ़ने के बहाने ढूंढ रहे हैं? क्या लोगों को विशाल विरासत कोड आधारों के साथ प्रस्तुत किया गया है और शुरू करने के लिए जगह की तलाश है? क्या चल रहा है?

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

संपादित करें: मैं सबसे ज्यादा परिचित हूं अगर सभी मेट्रिक्स की चर्चा नहीं की जाती है, तो मैं उन्हें अलगाव में या गुणवत्ता के मनमाने मानकों के रूप में नहीं देखता हूं।


2
C # कोड के लिए मेरा कोड मीट्रिक है the number of StyleCop warnings + 10 * the number of FxCop warnings + 2 to the power of the number of disabled warning types। उस मीट्रिक का मान जितना संभव हो उतना कम होने के बाद ही, क्या किसी मानव के लिए कोड की समीक्षा शुरू करना उचित है (मेरी राय में)। संक्षेप में: सरलीकृत फ़ार्मुलों के बजाय परिष्कृत उपकरण कोड गुणवत्ता में सुधार करने में मदद कर सकते हैं। यह संभवत: ऑफ-टॉपिक है।
हामिश ग्रुबीजन 16

@ अधिकृत - I just don't see the point of them in isolation or as arbitrary standards of quality.- जो अलगाव में या गुणवत्ता के मनमाने मानकों के रूप में मैट्रिक्स का उपयोग करने के बारे में सोचेंगे?
luis.espinal

@ ललिस जो मेरा संपादन था, कई सवालों के आधार पर जिसने इस प्रश्न को जन्म दिया - इसका उत्तर "प्रबंधन" है, मुख्य रूप से
स्टीवन ए। लोव

बुलेट की सूची के लिए +1 जहां वे उपयोगी हैं, मुझे लगता है कि यह बिल्कुल वैसा ही है जैसा कि आप वर्णन करते हैं
दुस्साहसी चर

जवाबों:


85

इस थ्रेड के उत्तर थोड़े अजीब हैं क्योंकि वे बोलते हैं:

  • "टीम", जैसे कि "मेट्रिक्स के एक और एकमात्र लाभार्थी";
  • "मेट्रिक्स", जैसे वे अपने आप में कुछ भी मतलब रखते हैं।

1 / मैट्रिक्स एक आबादी के लिए नहीं है , लेकिन तीन के लिए :

  • डेवलपर्स: वे अपने कोड के स्थैतिक विश्लेषण के बारे में तात्कालिक स्थिर कोड मेट्रिक्स से संबंधित हैं (साइक्लोमैटिक जटिलता, टिप्पणियाँ गुणवत्ता, लाइनों की संख्या, ...)
  • परियोजना के नेता: वे यूनिट टेस्ट, कोड कवरेज, निरंतर एकीकरण परीक्षण से आने वाले दैनिक लाइव कोड मैट्रिक्स से चिंतित हैं
  • व्यवसाय प्रायोजक (वे हमेशा भूल जाते हैं, लेकिन वे हितधारक हैं, विकास के लिए भुगतान करने वाले): वे वास्तुशिल्प डिजाइन, सुरक्षा, निर्भरता, के बारे में साप्ताहिक वैश्विक कोड मैट्रिक्स से संबंधित हैं ...

उन सभी मैट्रिक्स को निश्चित रूप से सभी तीन आबादी द्वारा देखा और विश्लेषण किया जा सकता है, लेकिन प्रत्येक प्रकार को प्रत्येक विशिष्ट समूह द्वारा बेहतर उपयोग करने के लिए डिज़ाइन किया गया है।

2 / मेट्रिक्स, खुद के द्वारा, कोड के एक स्नैपशॉट का प्रतिनिधित्व करते हैं , और इसका मतलब है ... कुछ भी नहीं!

यह उन मैट्रिक्स का संयोजन है, और विश्लेषण के उन विभिन्न स्तरों के संयोजन जो "अच्छा" या "बुरा" कोड का संकेत दे सकते हैं, लेकिन इससे भी महत्वपूर्ण बात यह है कि यह उन मैट्रिक्स का रुझान है जो महत्वपूर्ण है।

यह उन मैट्रिक्स की पुनरावृत्ति है जो वास्तविक अतिरिक्त मूल्य देगा, क्योंकि वे व्यापार प्रबंधकों / परियोजना के नेताओं / डेवलपर्स को विभिन्न संभावित कोड सुधारों के बीच प्राथमिकता देने में मदद करेंगे।


दूसरे शब्दों में, "मेट्रिक्स के आकर्षण" के बारे में आपका प्रश्न इस अंतर को संदर्भित कर सकता है:

  • "सुंदर" कोड (हालांकि यह हमेशा देखने वाले-कोडर की नजर में है)
  • "अच्छा" कोड (जो काम करता है, और यह साबित कर सकता है कि यह काम करता है)

इसलिए, उदाहरण के लिए, 9 के साइक्लोमैटिक जटिलता के साथ एक फ़ंक्शन को "सुंदर" के रूप में परिभाषित किया जा सकता है, 42 के साइक्लोमैटिक जटिलता के एक लंबे जटिल कार्य के विपरीत।

लेकिन अगर:

  • उत्तरार्द्ध फ़ंक्शन में एक स्थिर जटिलता है, जो 95% के कोड कवरेज के साथ संयुक्त है ,
  • जबकि पूर्व में एक बढ़ती हुई जटिलता है, एक कवरेज के साथ संयुक्त ... 0%,

कोई बहस कर सकता है:

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

इसलिए, संक्षेप में:

एक एकल मीट्रिक जो अपने आप में हमेशा इंगित करता है [...]

: ज्यादा नहीं, सिवाय इसके कि कोड अधिक "सुंदर" हो सकता है, जो अपने आप में बहुत मायने नहीं रखता ...

क्या कोड मेट्रिक्स से प्राप्त होने वाली कुछ जादुई अंतर्दृष्टि है जिसे मैंने अनदेखा कर दिया है?

केवल मेट्रिक्स का संयोजन और प्रवृत्ति वास्तविक "जादुई अंतर्दृष्टि" देते हैं जो आप बाद में हैं।


5
"सुंदर" कोड को बनाए रखना आसान हो सकता है - और यदि ऐसा है, तो बहुत अधिक मूल्य है!
रिचर्ड टी

21

मेरे पास एक प्रोजेक्ट था जो मैंने कुछ महीने पहले साइक्लोमैटिक जटिलता के लिए मापा गया एक व्यक्ति के रूप में किया था। इस तरह के मेट्रिक्स के लिए यह मेरा पहला प्रदर्शन था।

मुझे जो पहली रिपोर्ट मिली, वह चौंकाने वाली थी। मेरे लगभग सभी कार्य परीक्षण में विफल रहे, यहां तक ​​कि (इम्हो) बहुत ही सरल। मुझे तार्किक उप-कार्य को सबरूटीन्स में स्थानांतरित करके जटिलता वाली चीज़ के आसपास मिला, भले ही उन्हें केवल एक बार बुलाया गया हो।

राउटर के अन्य आधे के लिए एक प्रोग्रामर के रूप में मेरे गर्व ने लात मारी और मैंने उन्हें इस तरह से फिर से लिखने की कोशिश की कि वे ऐसा ही करते हैं, बस सरल और अधिक पठनीय। यह काम किया और मैं ग्राहकों के लिए नीचे उतरने में सक्षम था।

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

मुझे लगता है कि यदि आप उन्हें अपने कोड में सुधार करने के लिए एक कारण / प्रेरणा के रूप में उपयोग करते हैं तो मैट्रिक्स एक अच्छी बात है। हालांकि यह जानना कि कब रोकना है और एक मीट्रिक उल्लंघन अनुदान के लिए पूछना है।

मेट्रिक्स मार्गदर्शक और मददगार होते हैं, अपने आप में समाप्त नहीं होते हैं।


1
बहुत अच्छा, आप एक बहुत ही महत्वपूर्ण विचार को सुरुचिपूर्ण तरीके से व्यक्त करने में कामयाब रहे हैं। मैं वर्तमान में सॉफ्टवेयर मेट्रिक्स के क्षेत्र में अनुसंधान कर रहा हूं और मैं इसका संदर्भ ले सकता हूं।
पीटर पेर्क

5
+1 के लिए "यह जानना कि कब रोकना है और एक मीट्रिक उल्लंघन अनुदान के लिए पूछना है।" तुम इस बारे में सही हो। यह विधिवत रूप से मैट्रिक्स का पालन करने के लिए विनाशकारी है।
Shabbyrobe

14

सबसे अच्छा मीट्रिक जो मैंने कभी इस्तेमाल किया है वह CRAP स्कोर है

मूल रूप से यह एक एल्गोरिथ्म है जो स्वचालित परीक्षण कवरेज के साथ भारित चक्रीय जटिलता की तुलना करता है। एल्गोरिथ्म इस तरह दिखता है: CRAP(m) = comp(m)^2 * (1 – cov(m)/100)^3 + comp(m) जहां COMP (m) विधि m की चक्रीय जटिलता है, और cov (m) परीक्षण कोड है जो स्वचालित परीक्षणों द्वारा प्रदान किया जाता है।

उपर्युक्त लेख के लेखक (कृपया, इसे पढ़ें ... यह आपके समय के लायक है) 30 के अधिकतम सीआरएपी स्कोर का सुझाव देते हैं जो निम्न तरीके से टूट जाता है:

Method’s Cyclomatic Complexity        % of coverage required to be
                                      below CRAPpy threshold
------------------------------        --------------------------------
0 – 5                                   0%
10                                     42%
15                                     57%
20                                     71%
25                                     80%
30                                    100%
31+                                   No amount of testing will keep methods
                                      this complex out of CRAP territory.

जैसा कि आप जल्दी से देखते हैं, मेट्रिक रिवॉर्ड्स कोड जो कि अच्छे टेस्ट कवरेज के साथ जटिल नहीं है (यदि आप यूनिट टेस्ट लिख रहे हैं, और आपको होना चाहिए, और कवरेज को मापना नहीं चाहिए ... तो, आप शायद हवा में थूकना पसंद करेंगे। भी)। ;-)

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

अधिकांश लोगों को शुरू में कोड लिखना कठिन लगा जो कि CRAP स्कोर को पास करेगा। लेकिन समय के साथ उन्होंने बेहतर कोड, कोड लिखा, जिसमें कम समस्याएं थीं, और कोड जो डीबग करना बहुत आसान था। किसी भी मीट्रिक में से, यह वह है जो सबसे कम चिंताओं और सबसे बड़ा लाभ है।


10

मेरे लिए एकल सबसे महत्वपूर्ण मीट्रिक जो खराब कोड की पहचान करता है, साइक्लोमैटिक जटिलता है। मेरी परियोजनाओं में लगभग सभी विधियाँ CC 10 से नीचे हैं और बग्स लगभग 30 से अधिक CC वाली विरासत विधियों में पाए जाते हैं। उच्च CC आमतौर पर संकेत करता है:

  • कोड जल्दबाजी में लिखा गया है (अर्थात, एक सुंदर समाधान खोजने का समय नहीं था और इसलिए नहीं कि समस्या को एक जटिल समाधान की आवश्यकता थी)
  • निष्कलंक कोड (कोई भी ऐसे जानवरों के लिए परीक्षण नहीं लिखता है)
  • कोड जो पैच किया गया था और कई बार तय किया गया था (यानी ifs और todo टिप्पणियों से युक्त)
  • रिफैक्टरिंग के लिए एक प्रमुख लक्ष्य

9

एक अच्छा कोड समीक्षा एक अच्छा स्थैतिक विश्लेषण उपकरण के लिए कोई विकल्प नहीं है, जो निश्चित रूप से इकाई परीक्षणों के एक अच्छे सेट के लिए विकल्प नहीं है, अब यूनिट परीक्षण स्वीकृति परीक्षणों के एक सेट के बिना अच्छे नहीं हैं ......

कोड मेट्रिक्स आपके टूल बॉक्स में डालने के लिए एक और टूल है, वे अपने आप में कोई समाधान नहीं हैं, वे सिर्फ एक टूल हैं जो उचित रूप में उपयोग किया जा सकता है (बेशक आपके बॉक्स के सभी अन्य उपकरण!)।


6

लोग कोड को समझने और वर्णन करने के लिए यंत्रवत तरीकों के विचार के लिए तैयार हैं। अगर सच है, तो दक्षता और उत्पादकता के लिए प्रभावों के बारे में सोचें!

मैं मानता हूं कि "कोड अच्छाई" के लिए एक मीट्रिक "अच्छे गद्य" के लिए मीट्रिक के रूप में समझदार है। हालांकि इसका मतलब यह नहीं है कि मेट्रिक्स बेकार हैं, बस शायद दुरुपयोग किया गया है।

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

मुझे लगता है कि अगर हम एक सुझाव के रूप में मैट्रिक्स का उपयोग करते हैं - एक लाल झंडा - शायद वे उपयोगी हो सकते हैं। समस्या तब है जब लोग परीक्षण के साथ लाइनों के प्रतिशत में SLOC या गुणवत्ता में उत्पादकता को मापना शुरू करते हैं।


6

मेरी अत्यधिक व्यक्तिपरक राय यह है कि कोड मेट्रिक्स अप्रतिरोध्य संस्थागत आकर्षण को व्यक्त करता है, जो अंतर्निहित कुछ अयोग्य को निर्धारित करने में सक्षम है।

समझ में आता है, एक तरह से, कम से कम मनोवैज्ञानिक रूप से - आप किसी ऐसी चीज पर निर्णय कैसे ले सकते हैं जिसे आप मूल्यांकन या समझ नहीं सकते हैं? अंत में, निश्चित रूप से, आप गुणवत्ता का मूल्यांकन नहीं कर सकते हैं जब तक कि आप विषय के जानकार नहीं हों (और कम से कम उतना ही अच्छा हो जितना आप मूल्यांकन करने की कोशिश कर रहे हैं) या किसी ऐसे व्यक्ति से पूछें, जो निश्चित रूप से समस्या को वापस रखता है एक कदम।

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

यह नहीं कह रहा हूं कि मुझे लगता है कि यह एक अच्छा उपाय है, केवल मैं ही इसे देख सकता हूं। और, जैसा कि आपने बताया, कुछ उचित मेट्रिक्स (500+ लाइन के कई तरीके, उच्च जटिलता-शायद खराब) हैं। मैं एक जगह है कि इस में खरीदा है, हालांकि कभी नहीं रहा।


6

मेरा मानना ​​है कि एक कोड मीट्रिक है।

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

यह संख्या जितनी छोटी होगी, उतना अच्छा होगा।


2
यह विचार करना सही होगा कि पिछला कोड स्वयं या किसी अन्य डेवलपर द्वारा समकक्ष या बेहतर कौशल के साथ विकसित किया गया था। यदि दूसरी तरफ कोड को कम कौशल के साथ एक डेवलपर द्वारा विकसित किया गया था, तो अंतर में लाइनों की बढ़ती संख्या (बदली हुई लाइनें + नई लाइनें + बहुत सारी हटाई गई लाइनें) वास्तव में कोड में सुधार का मतलब हो सकता है क्योंकि आप छुटकारा पा रहे हैं। खराब गुणवत्ता कोड।
अल्फ्रेड मायर्स

@ उपलब्ध: सुनिश्चित करें। मैं आदर्श-दुनिया की बात कर रहा हूं, और आवश्यकता से अधिक बदलावों पर औसत रहा हूं। यहाँ एक उदाहरण है कि मैं किस बारे में बात कर रहा हूँ, और इसमें सीखने की अवस्था है: stackoverflow.com/questions/371898/…
माइक डनलैवी

अगर आप इसकी तुलना करने के लिए कोई आधार रेखा नहीं रखते हैं तो आप कैसे जानते हैं कि आपने अच्छा काम किया है?
JS

5

मेट्रिक्स और स्वचालित परीक्षण पूर्ण कोड समीक्षाओं के लिए प्रतिस्थापन नहीं हैं।

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

प्रबंधक भी उन्हें मैट्रिक्स पसंद करते हैं क्योंकि उन्हें लगता है कि वे उत्पादकता पर एक सटीक आंकड़ा प्राप्त कर रहे हैं (हालांकि यह वास्तव में मामला नहीं है) और वे लोगों को बेहतर ढंग से हथकंडा करने में सक्षम होना चाहिए।


5

माप केवल उपयोगी हैं यदि:

  • टीम ने उन्हें विकसित किया
  • टीम ने उनकी बात मान ली
  • उनका उपयोग किसी विशिष्ट क्षेत्र की पहचान करने के लिए किया जा रहा है

सामान्य तौर पर, कोई भी मीट्रिक जो इसमें फिट नहीं होती है वह टीम के अनुकूलन से पीड़ित होगी। आप कोड की पंक्तियों को मापना चाहते हैं? Gosh करके, देखो कि वे कितने लिख सकते हैं! आप कोड कवरेज को मापना चाहते हैं, जो कि, मुझे उस कोड को कवर करते हुए देखता है!

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


5

यहाँ stan4j से कुछ जटिलता मेट्रिक्स हैं

एक ग्रहण वर्ग संरचना उपकरण का विश्लेषण करती है।

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

जटिलता मेट्रिक्स

चक्रवाती जटिलता मेट्रिक्स

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

औसत साइक्लोमैटिक कॉम्प्लेक्सिटी किसी एप्लिकेशन, लाइब्रेरी, पैकेज ट्री या पैकेज के सभी तरीकों पर साइक्लोमैटिक कॉम्प्लेक्सिटी मीट्रिक का औसत मूल्य।

मोटी मेट्रिक्स का फैट मेट्रिक की एक उपयुक्त निर्भरता ग्राफ में किनारों की संख्या है। निर्भरता ग्राफ प्रकार मीट्रिक संस्करण और चुने हुए कलाकृतियों पर निर्भर करता है:

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

एक पैकेज का फैट मीट्रिक, इसकी इकाई निर्भरता ग्राफ की बढ़त गणना है। इस ग्राफ में पैकेज के सभी शीर्ष स्तर के वर्ग हैं।

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

लाइब्रेरी डिपेंडेंसीज़ के लिए फैट (फैट - लाइब्रेरीज़) किसी ऐप्लीकेशन की मीट्रिक डिपेंडेंसीज़ के लिए फैट उसके लाइब्रेरी डिपेंडेंसी ग्राफ की एज काउंट है। इस ग्राफ में एप्लिकेशन के सभी पुस्तकालय शामिल हैं। (संरचना दृश्य में उपयुक्त ग्राफ देखने के लिए, संरचना एक्सप्लोरर के शो लाइब्रेरी टॉगल को सक्षम करना होगा।)

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

किसी लाइब्रेरी के फ़्लैट पैकेज डिपेंडेंसी मेट्रिक का फैट उसके फ़्लैट पैकेज डिपेंडेंसी ग्राफ की बढ़त की गिनती है। इस ग्राफ़ में लाइब्रेरी के सभी पैकेज हैं। (संरचना दृश्य में उपयुक्त ग्राफ देखने के लिए, स्ट्रक्चर एक्सप्लोरर के फ्लैट पैकेज और शो लाइब्रेरी टॉगल को सक्षम करना होगा।)

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


2

किसी परियोजना में सुधार या गिरावट का निर्धारण करने के लिए मेट्रिक्स उपयोगी हो सकते हैं, और निश्चित रूप से स्टाइल और कन्वेंशन उल्लंघन का पता लगा सकते हैं, लेकिन सहकर्मी कोड समीक्षा करने के लिए कोई विकल्प नहीं है। आप संभवतः उनके बिना अपने कोड की गुणवत्ता नहीं जान सकते।

ओह ... और यह मानता है कि आपकी कोड समीक्षा में प्रतिभागियों में से कम से कम एक सुराग है।


2

मैं आपसे सहमत हूं कि कोड मेट्रिक्स को कोड की समीक्षा नहीं करनी चाहिए, लेकिन मेरा मानना ​​है कि उन्हें कोड समीक्षाओं का पूरक होना चाहिए। मुझे लगता है कि यह पुरानी कहावत पर लौट आती है कि "आप जो सुधार नहीं कर सकते उसे आप माप नहीं सकते।" कोड मेट्रिक्स डेवलपमेंट टीम को क्वांटिफिबल "कोड स्मेल" या पैटर्न प्रदान कर सकता है जिसे आगे की जांच की आवश्यकता हो सकती है। अधिकांश स्थैतिक विश्लेषण उपकरणों में कैप्चर किए गए मेट्रिक्स आमतौर पर ऐसे मेट्रिक्स होते हैं जिनकी पहचान हमारे क्षेत्र के लघु इतिहास में महत्वपूर्ण अर्थ रखने के लिए शोध के दौरान की गई है।


2

मेट्रिक्स कोड समीक्षा का विकल्प नहीं हैं, लेकिन वे बहुत सस्ते हैं। वे किसी भी चीज़ से अधिक एक संकेतक हैं।


2

उत्तर का एक हिस्सा यह है कि कुछ कोड मेट्रिक्स आपको प्रश्न के उत्तर में एक बहुत ही त्वरित, प्रारंभिक छुरा दे सकते हैं: यह कोड क्या है?

यहां तक ​​कि Even कोड की पंक्तियां ’आपको उस आधार कोड के आकार का अंदाजा दे सकती हैं, जिसे आप देख रहे हैं।

जैसा कि एक अन्य उत्तर में कहा गया है, मैट्रिक्स का चलन आपको सबसे अधिक जानकारी देता है।


2

खुद के मेट्रिक्स विशेष रूप से दिलचस्प नहीं हैं। यह है कि आप उनके साथ क्या करते हैं जो मायने रखता है।

उदाहरण के लिए यदि आप कोड की प्रति पंक्ति टिप्पणियों की संख्या को माप रहे थे तो आप एक अच्छे मूल्य पर क्या विचार करेंगे? कौन जाने? या शायद अधिक महत्वपूर्ण बात, हर किसी की अपनी राय है।

अब यदि आप एक कीड़े को हल करने के लिए या कोडिंग के लिए जिम्मेदार पाए जाने वाले कीड़े की संख्या के खिलाफ कोड की प्रति पंक्ति की संख्या को सहसंबंधित करने के लिए पर्याप्त जानकारी एकत्र करते हैं, तो आप एक आनुभविक रूप से उपयोगी संख्या ढूंढना शुरू कर सकते हैं ।

सॉफ्टवेयर में मैट्रिक्स का उपयोग करने और किसी अन्य प्रक्रिया पर किसी अन्य प्रदर्शन माप का उपयोग करने के बीच कोई अंतर नहीं है - पहले आप मापते हैं, फिर आप विश्लेषण करते हैं, फिर आप प्रक्रिया में सुधार करते हैं। यदि आप सब कर रहे हैं, तो आप अपना समय बर्बाद कर रहे हैं।

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

लेकिन इससे पहले कि आप संबंध (कारण या नहीं) पा सकें, आपके पास डेटा होना चाहिए।

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

इसलिए डेटा एकत्र करने से पहले आपको यह जानना होगा कि आप इसके साथ क्या करना चाहते हैं। यदि मेट्रिक्स साधन है, तो अंत क्या है?


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

दूसरे शब्दों में, मानक के रूप में उपयोग करने के लिए कोई स्थापित सहसंबंध नहीं हैं; क्या आप मानक स्थापित करने के लिए मैट्रिक्स और सहसंबंध के उपयोग की सिफारिश कर रहे हैं? यदि हां, तो क्या आप एक कारण लिंकेज प्रदर्शित कर सकते हैं या क्या हम फिर से कॉफी की खपत को माप रहे हैं?
स्टीवन ए लोव

2

मुझे नहीं लगता कि मैट्रिक्स में छोटे बदलाव सार्थक हैं: जटिलता 20 के साथ एक फ़ंक्शन 30 के साथ एक फ़ंक्शन की तुलना में आवश्यक रूप से क्लीनर नहीं है। लेकिन बड़े अंतरों को देखने के लिए यह मैट्रिक्स चलाने के लायक है।

एक बार जब मैं एक दो दर्जन परियोजनाओं का सर्वेक्षण कर रहा था और परियोजनाओं में से एक की अधिकतम जटिलता 6,000 के आसपास थी जबकि हर दूसरी परियोजना का मूल्य लगभग 100 या उससे कम था। जिसने मुझे बेसबॉल के बल्ले की तरह सिर पर मारा। जाहिर है कुछ असामान्य, और शायद बुरा, उस परियोजना के साथ चल रहा था।


क्या आपने परियोजना को देखा? मीट्रिक में भारी अंतर का कारण क्या था?
स्टीवन ए। लोव

6K जटिलता के साथ परियोजना खराब रूप से लिखी जाने लगी, फिर अत्यधिक दबाव में विकसित होने के कारण यह खराब हो गई।
जॉन डी। कुक

1

हम प्रोग्रामर हैं। हमें नंबर पसंद हैं।

इसके अलावा, आप क्या करने जा रहे हैं, कोडबेस के आकार का वर्णन न करें क्योंकि "कोड मेट्रिक्स की लाइनें अप्रासंगिक हैं"?

एक मूर्खतापूर्ण उदाहरण लेने के लिए निश्चित रूप से 150 लाइनों के कोडबेस और 150 मिलियन में से एक के बीच अंतर है। और यह एक कठिन संख्या नहीं है।


1
एक अंतर है, एक कोड की अधिक लाइनें हैं। लेकिन तो क्या? सॉफ्टवेयर की गुणवत्ता के बारे में कुछ भी नहीं कहता है ...
स्टीवन ए। लोव

2
मुझे पता है कि मैं अगला काम करने के लिए
कौन सा चुनूँगा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.