मैं कोड की एक पंक्ति के जीवनकाल का अनुमान कैसे लगा सकता हूं?


11

मैं खुले स्रोत परियोजनाओं में कोड दीर्घायु का विश्लेषण करने का एक तरीका निकालने की कोशिश कर रहा हूं: अर्थात, कोड की एक विशिष्ट पंक्ति कितनी देर तक सक्रिय और उपयोग में है।

मेरी वर्तमान सोच यह है कि कोड की उम्र की एक पंक्ति तब शुरू होती है जब यह पहली बार प्रतिबद्ध होती है, और समाप्त होती है जब निम्न में से एक होती है:

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

नोट: स्पष्टीकरण के रूप में "संपादन" को "मौत" के रूप में क्यों गिना जा रहा है, संपादित लाइनों को "नई" पीढ़ी या कोड की रेखा के रूप में गिना जाएगा। इसके अलावा, जब तक ऐसा करने का एक आसान तरीका नहीं है, तब तक वंश की दीर्घायु या पूर्वज से वंश का कोई हिसाब नहीं होगा।

कोड की जीवन रेखा की एक और रेखा क्या निर्धारित करेगी?


2
"कब तक कोड की एक विशिष्ट रेखा सक्रिय है और उपयोग में है" आपको क्यों लगता है कि यह एक अच्छा मीट्रिक है?
पीटर बी

जवाबों:


10

एंडी ओजेंट ने 2006 में ओपनबीएसडी को उसी तरह के प्रश्न के साथ देखा: दूध या शराब: क्या आयु के साथ सॉफ्टवेयर सुरक्षा में सुधार होता है?

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

7.5 वर्ष और पंद्रह रिलीज की अवधि में, ओपनबीएसडी में रिपोर्ट की गई 140 कमजोरियों में से 62% मूलभूत थीं : अध्ययन की शुरुआत में कोड में मौजूद थीं ।

इन मूलभूत कमजोरियों की पहली छमाही में रिपोर्ट किए जाने में ढाई साल से अधिक समय लगा। हमने पाया कि अध्ययन किए गए अंतिम संस्करण में 61% स्रोत कोड मूलभूत है: यह 7.5 वर्ष पहले जारी किए गए प्रारंभिक संस्करण से अनलक्ड है। OpenBSD में मूलभूत कमजोरियों की रिपोर्टिंग की दर इस प्रकार भेद्यता रिपोर्टिंग की समग्र दर को काफी प्रभावित करती है।

हमने सांख्यिकीय रूप से महत्वपूर्ण सबूत भी पाया कि अध्ययन अवधि के दौरान मूलभूत भेद्यता रिपोर्ट की दर में कमी आई। हमने अनुमान लगाने के लिए विश्वसनीयता वृद्धि मॉडल का उपयोग किया कि नींव संस्करण में कमजोरियों का 67.6% पाया गया था। प्रति दिन रिपोर्ट की गई कमजोरियों की अनुमानित संख्या के मॉडल का अनुमान अध्ययन की शुरुआत में 0.051 से घटकर 0.024 हो गया।


1
+1 @ ब्रूस एडगर: बहुत बढ़िया, धन्यवाद - इसे अभी देख रहे हैं!
ब्लंडर्स

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

1

मुझे नहीं लगता कि इसके लिए कोई जवाब है। यह अत्यधिक परियोजना पर निर्भर है। कुछ वर्षों में अधिक स्थिर होते हैं, कुछ अन्य वर्षों में अधिक अस्थिर / रिफलेक्टेड / विकसित होते हैं।

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

मैंने कहा, मुझे लगता है कि एलओसी का एक अच्छा हिस्सा हमेशा के लिए रहता है।

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

इसके अलावा, केवल अच्छे प्रोग्रामर ही कोडबेस की सफाई करते हैं और लाइनों को कम करते हैं। अन्य सभी LOCs को ढेर करते हैं। और अब तक, उत्तरार्द्ध अब तक जीत रहे हैं। ;)


0

कोड की एक पंक्ति को हटाना या बाहर करना निश्चित रूप से इसके जीवनकाल के अंत का संकेत है।

संपादन के बारे में, मैं यह प्रश्न पूछूंगा: क्या यह कथन संपादन के बाद एक अलग परिणाम उत्पन्न करता है?

यदि उत्तर हाँ है, तो मैं कहूंगा कि पिछला कथन अब उपलब्ध नहीं है, अन्यथा मैं अभी भी इसे पिछले कथन की निरंतरता के रूप में मानता हूँ।

परिणाम बदलने का उदाहरण:

if ( a && b )

सेवा:

if ( a || b )

जीवनकाल जारी रखने का उदाहरण:

foo.bar( baz );

सेवा:

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