स्रोत कोड मैट्रिक्स कोड स्थिरता को मापने के लिए?


17

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

उदाहरण के लिए, कोई यह देख सकता है कि परियोजना के पहले छह महीनों के दौरान, औसत प्रति दिन कोड की 200 लाइनें थी, जबकि पिछले महीने के दौरान यह प्रति दिन कोड की 50 लाइनें थी, और अंतिम सप्ताह के दौरान (उत्पाद की डीवीडी से ठीक पहले) कोड भेज दिए गए थे), कोड की कोई भी लाइनें बिल्कुल नहीं बदली गई थीं (कोड फ्रीज)। यह केवल एक उदाहरण है, और किसी विशेष टीम द्वारा अपनाई गई विकास प्रक्रिया के अनुसार विभिन्न पैटर्न उभर सकते हैं।

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



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

3
@ यानिस रिज़ोस: मैं एलओसी द्वारा उत्पादकता या कोड जटिलता को मापने का सुझाव देने के माध्यम से हूं क्योंकि मुझे पता है कि यह एक अच्छा उपाय नहीं है। दूसरी ओर, यदि शिपिंग से दो दिन पहले कोड की 300 लाइनों को बदल दिया गया था, तो एक प्रबंधक के रूप में मेरे दिमाग में एक बड़ा "RED ALERT" दीपक होगा (जब तक कि यह योजना नहीं बनाई गई थी और जोखिमों के बहुत सावधान मूल्यांकन का परिणाम है )। सामान्य तौर पर, मुझे लगता है कि लंबे समय तक बदले बिना उपयोग किए गए (और परीक्षण किए गए) कोड उस कोड की तुलना में "अधिक स्थिर" होता है जिसमें हर दिन 100 लाइनें बदल जाती हैं।
जियोर्जियो

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

@ यानिस रिज़ोस: यह वास्तव में एक बहुत ही रोचक रीडिंग है। FishEye के रूप में, हम इसे अपने कार्य स्थान (समीक्षाओं के लिए) पर उपयोग करते हैं, इसलिए मैं तुरंत मैनुअल में देखूंगा और देखूंगा कि हम किस प्रकार के आँकड़े पैदा कर सकते हैं।
जियोर्जियो

जवाबों:


17

एक उपाय जो माइकल फेदर ने वर्णित किया है, वह है, " कक्षाओं का सक्रिय सेट "।

वह उन "बंद" के खिलाफ जोड़े गए वर्गों की संख्या को मापता है। निम्न के रूप में वर्ग बंद का वर्णन:

उस तिथि को एक वर्ग बंद कर दिया जाता है, जिसमें उस तिथि से वर्तमान तक कोई और संशोधन नहीं होता है।

वह इस तरह के चार्ट बनाने के लिए इन उपायों का उपयोग करता है: सक्रिय वर्ग चार्ट

छोटी संख्या दो रेखाओं के बीच के अंतर को बेहतर बनाती है।

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


4

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

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

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

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

यदि आप git या svn का उपयोग कर रहे हैं और आपका gource संस्करण> = 0.39 है, तो यह प्रोजेक्ट फ़ोल्डर में चल रहे gource जितना ही सरल है।


gource भी एक बेहतरीन टूल लगता है! (+1)
जियोर्जियो

1
मैं इस जवाब पर अड़ गया, फिर अगले छह घंटे Gource के साथ खेलने में बिताए। मुझे यकीन नहीं है कि अगर यह एक +1 या -1 का हकदार है, लेकिन लानत है, तो यह एक अच्छा उपकरण है।
रोनू

@ रोनू: आप कस्टम समय सीमा में भंडार की स्थिति की कल्पना करने के लिए gource का उपयोग कर सकते हैं। इसका मुद्दा यह है कि यह समय के साथ आपके कोड आधार पर गतिविधि की कल्पना करता है। व्याख्या करना कितना आसान है यह बहुत सारे कारकों पर निर्भर करता है, जैसे मैंने ऊपर दिए गए अपने उत्तर में बताया है। हां, यह एक अद्भुत उपकरण है यदि आप "बड़ी तस्वीर" चाहते हैं, तो मुझे लगता है कि यह एक +1 का हकदार है;)
कार्ल

हां, जब मैंने कहा था "छह घंटे," मेरा मतलब यह नहीं था कि मैंने उस समय के लिए एक गॉर्ज सिम चलाया ... बस मैंने बहुत सारे विकल्पों के साथ खेला, इसे ffmpeg पर पाइप किया, संभवतः एक महाकाव्य साउंडट्रैक जोड़ा, आदि। खरगोश छेद काफी था। :)
रॉनू

लेममे अनुमान। साउंडट्रैक लूप्ड हार्लेम शफल था;)
कार्ल

0

कोड स्थिरता के लिए एक संकेतक के रूप में संशोधित लाइनों की आवृत्ति का उपयोग कम से कम संदिग्ध है।

सबसे पहले, संशोधित लाइनों के समय पर वितरण, परियोजना के सॉफ्टवेयर प्रबंधन मॉडल पर अत्यधिक निर्भर करता है। विभिन्न प्रबंधन मॉडल में बहुत अंतर हैं।

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

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


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

BTW, कोड अस्थिर नहीं हो सकता क्योंकि डेवलपर्स खराब हैं, लेकिन क्योंकि आवश्यकताएं स्पष्ट नहीं हैं और परियोजना अभी भी एक प्रोटोटाइप चरण में है।
जियोर्जियो

@ जियोर्जियो: बेशक आप सही हैं। लेकिन यह वही है जो मैंने लिखा था: संशोधित लाइनों की गिनती बहुत अधिक कारकों पर निर्भर करती है। उनमें से कुछ कोड स्थिरता से संबंधित हैं, कुछ नहीं। यह गणना करने की कोशिश करना है कि कितने लोग सेक्स करते हैं, विद्युत शक्ति को मापते हैं, धारणा द्वारा - कम शक्ति - कम रोशनी - अधिक सेक्स। यद्यपि यह सिद्ध है कि जन्म दर बड़े काले बहिष्कार के बाद बढ़ रही है। ;)
जॉनफाउंड 16

-1

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

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

परीक्षण के माध्यम से मजबूतता को मापा जाता है। यूनिट परीक्षण, धुआं परीक्षण, स्वचालित प्रतिगमन परीक्षण; परीक्षण, परीक्षण, परीक्षण!

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

कृपया उचित परीक्षण हार्नेस का पुनरीक्षण करें और कोड मीट्रिक रहस्यवाद से बचें।

शुभकामनाएँ।


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

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

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

स्थिरता की कई परिभाषाएँ हैं और उनमें से एक वह है जिसके लिए आप बहस कर रहे हैं। यह मेरे द्वारा किए गए एक अलग अर्थ की व्याख्या है। मैं यह कहने के लिए स्थिर हो गया कि यह "परिवर्तन के प्रतिरोधी" के बजाय "चरम परिवर्तनों के अधीन" नहीं है
डेव हिलेर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.