आपको कैसे पता चलेगा कि अनुभवजन्य मैट्रिक्स पर आधारित सॉफ्टवेयर अच्छा है या बुरा?


18

मुझे वर्तमान में एक ऐसी परियोजना को देखने के लिए कहा जा रहा है, जिसने पांच महीने पहले कोर विकास समाप्त कर दिया है, लेकिन अभी भी दोषों का एक उच्च स्तर है। लगभग 10 दोषों के लिए जो ट्रांसपायर होता है, हम कम से कम 4 और कुछ मामलों में 8 दोषों को बढ़ाते हैं।

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

बुनियादी ढांचे में यह अधिक परिभाषित है यदि कुछ खराब तरीके से बनाया गया है, तो आप एलओसी के दोषों के साथ सॉफ्टवेयर के लिए कौन से माप का उपयोग कर सकते हैं?

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

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

इसलिए जब आप किसी तीसरे पक्ष के उत्पाद को स्वीकार करते हैं और उसे समर्थन देने के लिए कहा जाता है, तो आप मानकों को परिभाषित करने के लिए कौन से स्वीकृति मानदंड का उपयोग करेंगे?

हमारे लीड डेवलपर को प्रति रिलीज़ कोड की सहकर्मी समीक्षा करने के अलावा, सुनिश्चित नहीं है कि और क्या किया जा सकता है?


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


दोष कई कारणों से आते हैं - विनिर्देश के साथ दोष, परीक्षण के साथ दोष, अस्पष्ट / बदलती आवश्यकताएं। उन सभी को डेवलपर दोष के लिए जिम्मेदार नहीं ठहराया जा सकता है।
रॉबी डी

wrt तत्वमीमांसा वाद-विवाद, विचार विमर्श पर
gnat

1
प्रश्न दोषों पर बहुत अधिक ध्यान केंद्रित करने के साथ उप-विषयी हो सकता है। मुझे लगता है कि शीर्षक में प्रश्न वैध है और कोई डुप्लिकेट नहीं है (जुडी हुई गुणवत्ता बनाम देव उत्पादकता बनाम जुड़े प्रश्न में)
फ्रैंक

जवाबों:


23

तुम नहीं।

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

यथास्थिति द्वारा तर्क

जैसा कि किलियन फोथ ने कहा, "अच्छा" सॉफ़्टवेयर के लिए एक सरल उपाय था, तो हम सभी इसका उपयोग करेंगे और हर कोई इसकी मांग करेगा।

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

प्रति-बुद्धि द्वारा तर्क करना

इसके अलावा पहले से ही किलियन द्वारा संकेत दिया गया है, और आम तौर पर "हर मीट्रिक कैन और खेला जाएगा" के रूप में चित्रित किया गया है।

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

मान लें कि आप प्रति LOC दोषों को मापते हैं। मैं कैसे खेलने जा रहा हूँ? आसान - बस अधिक कोड जोड़ें! बेवकूफ कोड बनाएं जिसके परिणामस्वरूप 100 से अधिक लाइनें न हों और अचानक आपको प्रति एलओसी कम दोष हो। सभी के सर्वश्रेष्ठ: आप वास्तव में इस तरह से सॉफ्टवेयर की गुणवत्ता में कमी आई है।

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

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

गलत लक्ष्य करके तर्क करना

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

आप क्या मापते हैं और आप क्या मानते हैं, इसके बीच एक अंतर है जो आपको बताएगा। यह अंतर बहुत बड़ा है।

यह हमारे चारों ओर सभी प्रकार के व्यवसायों में हर समय होता है। कभी KPI (मुख्य प्रदर्शन संकेतक) पर आधारित निर्णय देखा गया है? यह सिर्फ एक ही समस्या है - आप चाहते हैं कि एक कंपनी अच्छा करे, लेकिन आप कुछ और मापें।

क्वांटिफ़िबिलिटी द्वारा तर्क

मेट्रिक्स को मापा जा सकता है। केवल यही कारण है कि हम उनके साथ बिल्कुल व्यवहार करते हैं। सॉफ्टवेयर गुणवत्ता, हालांकि, इन मापने योग्य संस्थाओं से परे का विस्तार करती है और इसके लिए बहुत कुछ है जो इसे निर्धारित करना बहुत कठिन है: स्रोत कोड कितना पठनीय है? आपका डिज़ाइन कितना एक्स्टेंसिबल है? नई टीम के सदस्यों के लिए जहाज पर चलना कितना कठिन है? आदि आदि।

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

संपादित करें:

सारांश

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

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

आप सॉफ्टवेयर ए को मापते हैं, और मेट्रिक्स वास्तव में खराब हो जाते हैं। तब आप निश्चित हो सकते हैं कि कोड की गुणवत्ता खराब है। आप सॉफ्टवेयर बी को मापते हैं और मैट्रिक्स ठीक है, फिर आपके पास कोड गुणवत्ता के बारे में कोई सुराग नहीं है। जब यह वास्तव में सिर्फ "कोड अच्छा => मीट्रिक अच्छा" हो तो "मेट्रिक्स गुड = कोड अच्छा" सोचने में मूर्ख मत बनो।

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


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

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

1
मैं इस बात से सहमत हूं कि समग्र सॉफ्टवेयर गुणवत्ता एक मीट्रिक के साथ मापना कठिन है, लेकिन ऐसे कई मैट्रिक्स हैं जो कम गुणवत्ता की ओर इशारा या रुझान कर सकते हैं।
जॉन रेनोर

ठीक है, एक मीट्रिक गेमिंग एक समस्या हो सकती है। लेकिन मुझे लगता है कि अगर मुझे सही काम करने की सजा दी जाए तो और भी बुरा है। मैंने एक लाइन लाइब्रेरी कॉल के साथ खराब कोड की १०० लाइनों को बदलकर सिर्फ एक दोष तय किया और आप मुझे बता रहे हैं कि मैंने आपके मीट्रिक के अनुसार कोड को बदतर बना दिया है? वह मुझे एक अच्छा काम करने के लिए प्रेरित करने वाला नहीं है।
svick

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

13

हां, आप बता सकते हैं कि कोड में कुछ हद तक मीट्रिक देखकर गुणवत्ता की समस्या है।

विशेष रूप से, कोड आधार पर एक जटिलता विश्लेषण उपकरण चलाते हैं और आपको यह पता चल जाएगा कि कोड अच्छा है या बुरा।

उदाहरण के लिए, आप स्रोत मॉनिटर चला सकते हैं ।

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

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

कथानक कुछ इस तरह दिखना चाहिए:

समय के साथ दोष टाइम्स पर दोष

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

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

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

अंत में, आपके पास कोड का आकलन करना होगा, कोई मीट्रिक मदद नहीं करेगा। प्रत्येक समस्याग्रस्त कोड परियोजना में ये गुण थे:

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

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


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

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

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

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

3

मेट्रिक्स के साथ दुख की बात यह है कि आप अपने मेट्रिक्स के परिणामस्वरूप मूल्यों में सुधार कर सकते हैं, लेकिन इसके द्वारा मापी जाने वाली गुणवत्ता नहीं ...

Visual Studio में, कंपाइलर चेतावनियों को त्रुटियों के रूप में मानने के लिए एक सेटिंग है। अब कुछ लोग चेतावनियों को नहीं समझते हैं, और कोड संकलित करने के लिए, सरल चाल का उपयोग करेंगे (जैसे ´pragma अक्षम चेतावनीag कक्षा)।

यदि आपके पास स्रोत कोड तक पहुंच है, तो आप स्थैतिक कोड विश्लेषण चला सकते हैं। .Net परियोजनाओं के लिए, आप FxCop या ReSharper InspectCode का उपयोग कर सकते हैं। विकासशील टीम द्वारा सही तरीके से उपयोग किए जाने पर, उपकरण गुणवत्ता में सुधार करने में मदद करेंगे। लेकिन निश्चित रूप से, उन्हें समझने के बिना चेतावनी को हटाने के लिए कुछ "सुधार" संभव हैं।

आप स्वचालित परीक्षणों / UnitTests को देख सकते हैं: कोड कवरेज कितना अच्छा है? लेकिन अकेले कवरेज आपको यह नहीं बताएगा कि क्या परीक्षण वास्तव में कोड की जांच करते हैं, या बस इसे एक बार निष्पादित किया गया था।

उच्च गुणवत्ता के लिए प्रयास करना एक दृष्टिकोण है, जिसे कई उपकरणों और उनके मैट्रिक्स द्वारा समर्थित किया जा सकता है, लेकिन डेवलपर्स के दृष्टिकोण के बिना मैट्रिक्स मदद नहीं करते हैं।


3

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

मूल रूप से, विनिर्देश में एक त्रुटि है, स्पिफिकेशन में एक अस्पष्टता, प्रत्यारोपण के लिए निर्णय लेने के लिए छोड़ दिया गया है या यह कार्यान्वयन में एक बग है।

एक और गुणात्मक दृष्टिकोण पूछना है कि क्या सॉफ्टवेयर उपयोगी है? यदि आप पर्याप्त कठिन दिखते हैं तो आप सॉफ्टवेयर के किसी भी टुकड़े में दोष पा सकते हैं। हालांकि, अगर यह पैसा कमाने के लिए पर्याप्त रूप से काम करता है, तो यह इतना बुरा नहीं हो सकता है।


1
+1 महान जवाब - बग्स के स्रोत को संबोधित करने में विफल एक ही स्रोत से आगे के कीड़े के लिए दरवाजा खुला छोड़ रहा है
रॉबी डी

3

नीचे, जानने का कोई तरीका नहीं है।

मूल प्रश्न के लिए (दार्शनिक उत्तर से पहले): उत्पाद को क्या करना चाहिए और क्या यह करता है? दोष गणना / घनत्व द्वारा मापना पर्याप्त नहीं है। मैं यह नहीं बता सकता था कि यह एक पुस्तकालय, या एक आवेदन था, कोड आधार कितना बड़ा है, समस्या डोमेन कितना बड़ा है, न ही दोषों की गंभीरता क्या है। उदाहरण के लिए, 123 इनपुट प्रारूपों में से एक को हैंडल न करना एक तुच्छ दोष या शो स्टॉपर हो सकता है, यह इस बात पर निर्भर करता है कि प्रारूप का महत्व ठीक से नहीं है। और कुछ नहीं से बेहतर एक उच्च मानक है।

इस प्रश्न के लिए मैं मान लेता हूं: कोड और सॉफ्टवेयर के बीच अंतर है। मैं सॉफ्टवेयर को परिभाषित करता हूं कि एक ग्राहक / उपयोगकर्ता किसी समस्या को हल करने के लिए क्या उपयोग करता है, जबकि कोड सॉफ्टवेयर की निर्माण सामग्री है।

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

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

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

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


2

मैं उनकी प्रक्रिया का परीक्षण करके (और विचलन की तलाश में) इसे मापूंगा।

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

मैं उन सबूतों की भी तलाश करूँगा कि कैसे उन्होंने अपनी प्रक्रियाओं को उन स्थितियों के जवाब में संशोधित किया है जहाँ दोष उनकी रिहाई प्रक्रिया से गुज़रे हैं।

यदि वे ऑडिट के इस स्तर को पारित करने में असमर्थ हैं, तो आप उनसे लगातार विश्वसनीय रिलीज देने की उम्मीद नहीं कर सकते।

यदि वे इस ऑडिट को पास करते हैं, और अपनी प्रक्रिया में लगातार सुधार कर रहे हैं, तो समय के साथ उनके आउटपुट की निरंतरता में सुधार होने की संभावना है।

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


यह उस प्रकार का उत्तर है जो मैं चाह रहा था।
खानाबदोश तकनीक

0

यदि आप पूरी तरह से स्वचालित माप की तलाश कर रहे हैं, तो मैं इन लोगों की सलाह देता हूं: सॉफ्टवेयर सुधार समूह

यह मूल रूप से विभिन्न मैट्रिक्स का एक समुच्चय है जिसे स्वचालित रूप से स्रोत कोड (जैसे, यूनिट टेस्ट कवरेज, फ़ंक्शन आकार, वर्ग उलझाव, दोहराव, LOC, आदि) से निकाला जा सकता है। फिर उन मूल्यों को 1-5 स्टार रेटिंग में बदल दिया जाता है।

यहाँ छवि विवरण दर्ज करें

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

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