"कोड सुधार" की प्राथमिकता और गंभीरता कैसे निर्धारित करें?


15

हमारे बग ट्रैकिंग सिस्टम में "प्राथमिकता" और "गंभीरता" क्षेत्र हैं। हम गंभीरता को "कैसे यह उपयोगकर्ता को प्रभावित करता है" और प्राथमिकता के रूप में "यह उत्पाद को कैसे प्रभावित करता है" के रूप में परिभाषित करता है।

मेरा प्रश्न गंभीरता और प्राथमिकता में "कोड सुधार" कार्य को वर्गीकृत करने का तरीका है। माना कि सुधार किसी भी व्यवहार को नहीं बदलता है, लेकिन इसे "बेहतर कोड" बनाता है। हम समग्र रूप से दीर्घकालिक रखरखाव सुधार का अनुमान लगाते हैं, लेकिन इसे निर्धारित करना कठिन है।

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

हालांकि मेरा मानना ​​है कि कोड में लगातार सुधार करना और उसे सुधारना क्रूर है, क्योंकि:

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

या क्या आपको लगता है कि ऐसे कार्यों को कभी नहीं बनाया जाना चाहिए और इस तरह के सुधार केवल "मांग पर", "बग से जुड़े" होने पर ही किए जाते हैं? यहां तक ​​कि अगर यह बग के साथ जुड़ा हुआ है, तो यह एक कोड समीक्षा पर चर्चा बिंदु नहीं होगा, जैसे "आपने संरचना में यह व्यापक बदलाव क्यों किया?"।

जवाबों:


16

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

मैं एक निरंतर के रूप में कोड सुधार को देखता हूं, कुछ ऐसा जो प्रत्येक डेवलपर को कीबोर्ड पर टाइप करने के रूप में स्वाभाविक रूप से करना चाहिए। मैं इसे किसी भी कार्य के लिए अपने अनुमानों में बताता हूं। यदि मेरे कार्य में मुझे एक वर्ग या कुछ स्रोत कोड को छूना शामिल है जिसे लंबे समय से नहीं देखा गया है, तो मैं मानूंगा कि कुछ चौकीदार काम संभवतः क्रम में हैं और तदनुसार मेरा अनुमान बढ़ाएं।

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


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

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

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

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

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

2

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

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


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

2

क्या गायब है मौजूदा कोड के बारे में आपकी मान्यताओं की पुष्टि कर रहा है: यदि हम कोड में सुधार करते हैं तो कम समय और महत्वपूर्ण बचत प्राप्त की जा सकती है। क्या यह कॉस्मेटिक है या गंभीर मुद्दे हैं?

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

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


1

दिलचस्प सवाल।

मुझे लगता है कि आपको अनुमान लगाना होगा कि कोड की कितनी पंक्तियाँ और कितने मॉड्यूल हैं जो एक बदलाव को प्रभावित कर सकते हैं।

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

फिर इन मिलान स्तरों की प्राथमिकता और गंभीरता के लिए थ्रेसहोल्ड हैं।

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


1

यहां दो मान्यताओं के साथ शुरू करते हैं।

  1. हर नई कहानी के लिए, आप अपनी क्षमता के अनुसार अपना कोड लिखते हैं, संभवतः आपकी टीम के परिवेश ज्ञान के साथ।
  2. जब भी आपके पास एक कहानी होती है जो मौजूदा कोड की कार्यक्षमता को बदलती है, तो आप नई कहानी को लागू करने की प्रक्रिया में कोड को बेहतर बनाने के लिए सिस्टम के अपने नए ज्ञान और बेहतर कौशल का उपयोग करते हैं।

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


1

मैं चुस्त आंदोलन से मतदान चुरा लूंगा:

बग दर्ज करें, गंभीरता और प्राथमिकता के लिए मोटा अनुमान लगाएं,

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

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