सॉफ्टवेयर गुणवत्ता के लिए उद्देश्य मैट्रिक्स [बंद]


12

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

मैं जिस चीज में दिलचस्पी रखता हूं, वह प्रकारों के नेटवर्क (या ग्राफ) से संबंधित गुणवत्ता का गहरा रूप है और उनकी अंतर-संबंधितता है, अर्थात, प्रत्येक प्रकार किस प्रकार को संदर्भित करता है, क्या एक उचित रूप से संबंधित इंटरकनेक्टिविटी के स्पष्ट रूप से पहचाने जाने योग्य क्लस्टर हैं tiered वास्तुकला, या इसके विपरीत प्रकार के संदर्भों का एक बड़ा 'बॉल' है ('अखंड' कोड)। साथ ही प्रत्येक प्रकार और / या विधि का आकार (जैसे जावा बाइट कोड या .net IL की मात्रा में मापा जाता है) कुछ संकेत देना चाहिए जहां बड़े जटिल एल्गोरिदम को कोड के अखंड ब्लॉक के रूप में लागू किया गया है बजाय अधिक प्रबंधनीय / बनाए रखने में विघटित होने के। मात्रा।

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

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

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


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

जवाबों:


20

यह एक खतरनाक विचार है। गुणवत्ता उद्देश्य के लिए "उद्देश्य" सीधे प्रबंधन पुरस्कार के लिए अग्रणी है और डेवलपर्स वास्तविक गुणवत्ता की कीमत पर इन मैट्रिक्स का पीछा करेंगे।

यह अनपेक्षित परिणामों का नियम है।

गुणवत्ता - जबकि महत्वपूर्ण - सॉफ्टवेयर का केवल एक छोटा पहलू है। सॉफ्टवेयर द्वारा बनाई गई कार्यक्षमता और मूल्य गुणवत्ता की तुलना में कहीं अधिक महत्वपूर्ण हैं।

सभी मीट्रिक मीट्रिक को अनुकूलित करने के लिए गतिविधि की ओर ले जाते हैं। बदले में, परिणाम है कि आप वास्तव में पसंद नहीं कर सकते हैं।

सॉफ्टवेयर बहुत जटिल है। यह समझना मुश्किल है कि यह वास्तव में कितना जटिल है।

यहां तक ​​कि यूनिट टेस्ट कोड कवरेज के रूप में ऐसी "स्पष्ट" चीजें समय बर्बाद कर सकती हैं। 100% प्राप्त करने के लिए परीक्षण बनाने की आवश्यकता हो सकती है जो वास्तव में परीक्षण किए जा रहे तुच्छ कोड की तुलना में अधिक जटिल हैं। 100% कवरेज प्राप्त करने में अस्वीकार्य लागत शामिल हो सकती है। [तुच्छ, छोटे, शायद ही कभी इस्तेमाल किए गए कोड का विकल्प परीक्षण-दर-निरीक्षण है। लेकिन यह 100% के मेट्रिक्स गेम के लायक नहीं है।]

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


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

3
"हालांकि, यह नहीं होना चाहिए।" कुछ तरीके बताएं, जिसमें लोगों को बताया जा सकता है कि वे अपने पुरस्कार का अनुकूलन न करें। मानव व्यवहार का एक एकल उदाहरण ढूंढें जहां सांस्कृतिक पुरस्कार (सभी प्रकार की पागल सामाजिक संरचनाओं के आधार पर) प्राथमिक नहीं हैं, सर्वोपरि हैं और सबसे महत्वपूर्ण बात यह है कि लोग पीछा करेंगे। कुछ भी जिसमें "होना चाहिए" या "नहीं होना चाहिए" को लोगों के खिलाफ आंका जाना चाहिए कि लोग वास्तव में क्या करते हैं। वे वास्तव में अपने पुरस्कार का अनुकूलन करते हैं। यदि मैट्रिक्स पुरस्कारों का हिस्सा हैं, तो लोग मीट्रिक का अनुकूलन करते हैं। कृपया लोगों के व्यवहार का वर्णन करने के लिए "चाहिए" का उपयोग न करें।
S.Lott

2
@ थोमस ओवेन्स: "मेट्रिक्स के आधार पर अनुकूलन के लिए आपके पास कोई पुरस्कार नहीं है"। अजीब बात है। आप उन्हें इतना गुप्त कैसे रखेंगे? एक बार जब मुझे पता चला कि आपका कोड मेरे मुकाबले जल्दी ही स्वीकार कर लिया गया है, तो मैं जानना चाहता हूं कि प्रबंधन ने कैसे तय किया कि आपका मॉड्यूल किया गया था और मेरा नहीं किया गया था। एक बार जब मैं मीट्रिक को उस निर्णय को "गाइड" करता हूं, तो मैं पूरी तरह से आपके द्वारा किए गए मीट्रिक को पूरी तरह से गेम करूंगा। यदि कोई मीट्रिक नहीं है जिसे मैं खेल सकता हूं, तो मैं देखूंगा कि निर्णय मनमाना था, प्रबंधन आपको मुझसे बेहतर पसंद करता है, और मैं छोड़ दूंगा क्योंकि कोई प्रदर्शन मानक नहीं है जिसे मैं देख सकता हूं।
S.Lott

2
@ थोमस ओवेन्स: "मैंने कभी मेट्रिक्स को पुरस्कार के लिए नेतृत्व करते नहीं देखा"। सांस्कृतिक प्रोत्साहन उन सभी स्थितियों में मौजूद हैं जहां दो या दो से अधिक लोग एक साथ काम करते हैं। "व्यक्तियों को उनके प्रदर्शन के लिए पहचाना जाता है"। चक्रवाती जटिलता के लिए एक मीट्रिक एक लक्ष्य बन जाता है। यदि आप अपने चक्रवाती जटिलता लक्ष्य को मुझसे जल्दी पूरा करते हैं, तो सांस्कृतिक पुरस्कार हैं: आप मुझसे अधिक "उत्पादक" हैं। मुझे आप के रूप में "उत्पादक" के रूप में प्रकट होने के लिए अपनी जटिलता मीट्रिक गेम की आवश्यकता है।
S.Lott

2
@ थोमस ओवेन्स: "यह व्यक्तिगत गौरव की बात है"। यह एक सांस्कृतिक पुरस्कार प्रणाली का एक बड़ा उदाहरण है। मैट्रिक्स एक अच्छे दिखने वाले मीट्रिक बनाने में सक्षम होने के अनपेक्षित परिणामों के कारण इसे तिरछा कर सकता है जो अच्छे कोड से मेल नहीं खाता है। आपने सांस्कृतिक पुरस्कारों का एक उत्कृष्ट उदाहरण प्रदान किया है जिसे मीट्रिक द्वारा तिरछा किया जा सकता है।
१२:०४ पर

4

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

बिंगो, और नहीं "अगर" इसके बारे में। इसे "माप दोष" कहा जाता है और देखा गया है और कई बार लिखा गया है कि योएल ने 2002 में हार्वर्ड के प्रोफेसर द्वारा एक पुस्तक का उल्लेख करते हुए इस पर एक लेख लिखा था

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


3

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

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

साथ ही प्रत्येक प्रकार और / या विधि का आकार (जैसे जावा बाइट कोड या .net IL की मात्रा में मापा जाता है) कुछ संकेत देना चाहिए जहां बड़े जटिल एल्गोरिदम को कोड के अखंड ब्लॉक के रूप में लागू किया गया है बजाय अधिक प्रबंधनीय / बनाए रखने में विघटित होने के। मात्रा।

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

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

उच्च और निम्न गुणवत्ता के बीच सटीक थ्रेशोल्ड / निर्णय बिंदु मैं व्यक्तिपरक हो सकता है, उदाहरण के लिए बनाए रखने के बाद से हम मानव प्रोग्रामर द्वारा स्थिरता बनाए रखने का मतलब है और इस प्रकार कार्यात्मक अपघटन मानव मन कैसे काम करते हैं के साथ संगत होना चाहिए।

मुझे यकीन नहीं है कि यह मामला है।

उदाहरण के लिए, वहाँ शोध किया गया है जो बताता है कि एक मानव की कार्यशील मेमोरी केवल 7 प्लस / माइनस 2 ऑब्जेक्ट ही पकड़ सकती है । यह शायद पंखे और पंखे-आउट को मापने के लिए रुचि है - अगर मैं एक मॉड्यूल में काम कर रहा हूं, और यह ~ 7 अन्य मॉड्यूल से अधिक से जुड़ा है, तो मैं संभवतः उन लोगों पर नज़र नहीं रख पाऊंगा जो अन्य मॉड्यूल मेरे सिर में हैं।

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

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

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


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

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

3

जिन गुणों में आप रुचि रखते हैं उनमें से कई के लिए मैट्रिक्स या प्रॉक्सी हैं:

  1. कोड की लाइनें
  2. फैन, फैन आउट
  3. प्रति 1000 कोड की त्रुटि दर
  4. साइक्लोमेटिक कम्पलेक्सिटी
  5. कोड कवरेज़
  6. निर्णय बिंदु कवरेज
  7. रखरखाव गतिविधियों द्वारा निर्धारित / शुरू की गई त्रुटियों का अनुपात
  8. कार्य बिंदु विश्लेषण

इन सभी वस्तुओं के साथ कुछ समस्याएं हैं:

  1. मीट्रिक को अनुकूलित करने के लिए काम किया जा रहा है - एक सार्वभौमिक प्रवृत्ति; अगर किसी भी मैट्रिक्स का उपयोग टीमों या व्यक्तियों के लिए मूल्यांकन या इनाम के आधार के रूप में किया जाता है, तो बड़े पैमाने पर अतिरंजित।
  2. मुझे किसी भी मीट्रिक के बारे में जानकारी नहीं है जो संदर्भ मुक्त है। तात्पर्य यह है कि दुकानों के भीतर कोई तुलना संभव नहीं है - केवल दुकानों के भीतर, समय के साथ। इस तरह की तुलना से उत्पन्न मैट्रिक्स अभी भी मूल्यवान हैं - "क्या हम एक साल पहले की तुलना में अब अधिक सही ढंग से कोड का उत्पादन कर रहे हैं"।

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


2

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


नसीम तालेब पुस्तक संदर्भ के लिए +1। कम गुणवत्ता के लिए कार्य-कारण की श्रृंखला पर होने वाले तर्कपूर्ण तर्क / प्रसंग।
Redcalx

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

1

मैट्रिक्स के साथ यह मूलभूत समस्या है।

प्रस्तावित बहुत सारे मेट्रिक्स दिखाए गए हैं, वास्तविक दुनिया में वास्तविक कोड पर, कच्चे एसएलओसी (कोड के स्रोत लाइनों) के साथ दृढ़ता से या बहुत दृढ़ता से सहसंबद्ध होना चाहिए।

इसने 1970 के दशक में हैलस्टेड के मेट्रिक्स को वापस मार दिया। (एक दिन की दुर्घटना से, 1978, मैं Halstead के मेट्रिक्स के बारे में एक नए पीएचडी द्वारा बात कर रहा था, जिसमें उन्होंने यह बताया।)

अभी हाल ही में, मैककेबे की साइक्लोमैटिक जटिलता को कच्चे एसएलओसी के साथ बहुत दृढ़ता से सहसंबद्ध दिखाया गया है, इस बात के लिए कि अध्ययन करने वाले ने जोर से आश्चर्यचकित किया अगर मैककेबे की मीट्रिक ने हमें कुछ भी उपयोगी बताया।

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


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

1
@ लॉकर: दो 100 एसएलओसी मॉड्यूल को देखते हुए, 47 की सीसी के साथ एक की सीसी के साथ एक से अधिक समस्याएं होने की संभावना है। वास्तविक दुनिया कोड के लिए, बड़ी मात्रा में, एक व्यक्ति को पता चलता है कि छोटे मॉड्यूल कम हैं CC और लंबे मॉड्यूल्स में उच्च CC होता है, इस बिंदु पर कि SLOC को जानने से आपको CC पर बहुत अच्छा अनुमान लगता है, और इसके विपरीत। इसका मतलब "बहुत दृढ़ता से सहसंबद्ध" है। एसयूसीएच के अनुसार, वास्तविक कोड पर, आपको CC = 47 नोट करने से कोई भी लाभ मिलता है, SLOC = 1500 को सूचित करने से अधिक आसानी से प्राप्त होता है। (यादृच्छिक रूप से खींची गई संख्या, सिद्धांत समान है।)
जॉन आर। स्ट्रॉहैम

हां मैं सहमत हूं कि वे दृढ़ता से सहसंबद्ध होंगे, हालांकि संबंध आमतौर पर गैर-रैखिक होते हैं। उदाहरण के लिए एक CC स्कोर मोटे तौर पर LOC को कुछ शक्ति तक बढ़ाता है। इसलिए मनोवैज्ञानिक दृष्टिकोण से CC स्कोर बहुत तेजी से बड़ा होता देखा जा सकता है, जबकि संबद्ध SLOC स्कोर केवल 'थोड़ा अधिक' लगता है। हाँ, मैं जानता हूँ कि मैं यहाँ तिनके पर
चढ़

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

-2

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

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

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