क्या हमें पुराने कोड में सुधार करने की जिम्मेदारी है?


64

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

तो, कुछ बिंदु पर आपको बस इसे काफी अच्छा कहना चाहिए और आगे बढ़ना चाहिए, या क्या आपको पुराने कोड को बेहतर बनाने के लिए परियोजनाओं को आगे बढ़ाने की कोशिश करनी चाहिए जब आपको लगता है कि यह बेहतर हो सकता है?


क्या आप अपने समय में या कंपनी के समय में ऐसा कर रहे हैं?
JBRWilkinson

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

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

1
प्रलेखन में संभावित सुधार के बारे में कुछ टिप्पणियां जोड़ें और उस पर छोड़ दें?
जेम्स पी।

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

जवाबों:


66

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

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


4
जो मैं सोच रहा था वह व्यावहारिक प्रोग्रामर और सॉफ्टवेयर एन्ट्रापी के प्रभाव से "सॉफ्टवेयर सड़ांध" और टूटी हुई खिड़की के सिद्धांत है। pragprog.com/the-pragmatic-programmer/extracts/software-entropy
jmq

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

11
@jmquigley, सॉफ्टवेयर केवल तभी घूमता है जब उसका स्रोत कोड बदल दिया जाता है, और टूटी हुई खिड़कियों का केवल तभी प्रभाव होता है जब उन्हें देखा जाता है। एक पुराना कोडबेस, अगर इसे छूने की आवश्यकता नहीं है, तो उसी तरह से काम करेगा जब तक कि इसका वातावरण इसकी अनुमति देता है।
पेटर तोक

2
इसे "सुधारने" की प्रक्रिया में एक कार्यशील कार्यक्रम में त्रुटि का परिचय न देने की कोशिश करें ;-)
robrambusch

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

32

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

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

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

TLDR: आवश्यकता के रूप में प्रतिक्षेपक, कोई दायित्व नहीं है।


क्या आप और अधिक विशिष्ट हो सकते हैं कि 'रिफ़ेक्टरिंग एक प्रतिगमन का कारण बनता है' से आपका क्या मतलब है? अपने व्यवहार को बदलने के बिना अपने सॉफ्टवेयर के डिजाइन में सुधार करने के लिए refactoring का उद्देश्य है? क्या आप एक उदाहरण दे सकते हैं?
मैनफ्रेड

3
@ जॉन: हां, यह रिफैक्टिंग का उद्देश्य है: कोड में सुधार करें लेकिन व्यवहार बनाए रखें।
बर्नार्ड

@ किसी भी गैर-तुच्छ परावर्तन जोखिमों ने अनजाने में बदलते व्यवहार को जोखिम में डाल दिया है, खासकर जब जगह में कोई प्रतिगमन परीक्षण नहीं होते हैं।
गैरेट हॉल

14

आपके पास जो कुछ भी है वह एक लागत है। आपके पास कार्यक्रम के लिए सीमित समय है। प्रोग्रामिंग में आप जो कुछ भी करते हैं, उसके खिलाफ देखा जाना चाहिए, "ऐसा करने का क्या लाभ है?" और "कुछ और करने से क्या फायदा?"

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

असली सवाल यह है कि आप अपने समय के साथ क्या कर सकते हैं? और फिर आपने व्यापार बंद कर दिया है।

क्या यह सॉफ्टवेयर को ज्यादा बेचेगा?

क्या यह समर्थन करने के लिए कम सिरदर्द पैदा करेगा?

आप क्या सीखेंगे?

क्या यह अधिक सौंदर्यवादी रूप से मनभावन हो जाएगा?

क्या यह आपकी प्रतिष्ठा में सुधार करेगा?

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

या यदि आप एक सरल उत्तर चाहते हैं, तो जब तक आपने कोड तय नहीं किया है, तब तक टीवी देखना बंद कर दें। :-)


4
सॉफ्टवेयर में नहीं एक वास्तविक उदाहरण से उधार लेने के लिए, कुछ परिवहन कंपनियां कर्मचारियों को अपने रिग्स को साफ करने और चमकाने के लिए भुगतान करेंगी, कई कारणों से, अक्सर क्योंकि यह ड्राइवरों / ऑपरेटरों को 'उनकी' इकाई में गर्व का निर्माण करने में मदद करता है, इसलिए वे बेहतर देखभाल करते हैं इसके बारे में, और इसके लिए करीब ध्यान देना; समस्याओं को जल्दी और आसानी से टालना। उसी टोकन पर, यदि मील बनाना है, तो ट्रक में चढ़ें और इसे चलाएं और कुछ और हजार मील (तट पर तट पर जाना) के बाद इसे साफ करने की चिंता करें।
जस्टिन ०

@ अन्याय - ठीक! आपका उदाहरण एक और कारण और अवसर लागत दोनों को दर्शाता है।
मैथअटैक

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

6

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

  • क्या कोड वह नहीं करता है जो उसे करना चाहिए था?
  • जब आप सॉफ़्टवेयर को बनाए रख रहे हैं तो क्या कोड आपको समस्याएं पैदा कर रहा है?
  • क्या कोड पूरी तरह से स्व-निहित है?
  • क्या आपके पास भविष्य में किसी भी समय कोड को अपडेट करने या बदलने की योजना है?
  • क्या कोई ध्वनि व्यवसाय मामला है जिसे आप संबंधित कोड को अपडेट करने के लिए बना सकते हैं?

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

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

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


5

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

हालांकि मुझे विश्वास नहीं है कि हमारे पास वापस जाने और कोड को बेहतर बनाने की ज़िम्मेदारी है, जो मूलभूत रूप से टूटा नहीं है, असुरक्षित है, या एक पदावनत / ईओएल सूची पर सुविधाओं पर निर्भर करता है, यहां कुछ चीजें हैं जो मैंने इस स्थिति में अतीत में की हैं। :

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

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

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


4
एक नौसिखिया को बुरा कोड देना परियोजना प्रबंधन का सबसे खराब प्रतिमान है, वे इसे देखते हैं और सोचते हैं कि यह सही है और इसे दोहराएं, बुरा कोड इस तरह की बुरी सलाह के कारण कैंसर की तरह फैलता है।

1
@JarrodRoberson यह इंगित करने के लिए धन्यवाद कि मुझे और अधिक स्पष्ट करना चाहिए था; मैंने अपने उत्तर को यह नोट करने के लिए संपादित किया है कि मैं यह विशेष रूप से सीखने के अनुभव के हिस्से के रूप में करता हूं, और वे एक संरक्षक के साथ काम कर रहे हैं। यह एक फेंक-की-की-गहरी स्थिति नहीं है।
jcmeloni

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

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

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

2

जरुरी नहीं। हालाँकि, यदि आप कोड रखरखाव कर रहे हैं और किसी ऐसी चीज़ पर ठोकर खाना चाहते हैं जो बेहतर हो सकती है, तो आप इसे बदल सकते हैं, बशर्ते आपके पास यह सुनिश्चित करने के लिए उपयुक्त इकाई परीक्षण हों कि आपने प्रतिगमन नहीं बनाया है।

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


4
मैं जोड़ूंगा "और अगर इसे बदलते समय नियोजित कार्यक्रम में बहुत समय नहीं जोड़ेगा"
HLGEM

2

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

एक बड़ा चेतावनी है, यदि कोड में सुधार करके, आप बग से बचने से बचने जा रहे हैं, (बड़ी Y2K गेंदों को यहाँ पर सोच कर ..) मैं निश्चित रूप से इसे किसी और के साथ लाऊंगा, शायद आपकी व्यवसाय इकाई प्रबंधक, और कोड में सुधार के परिणामों पर चर्चा करें।


2

मेरे लिए, इस प्रश्न को फिर से परिभाषित किया जा सकता है और सामान्यीकृत किया जा सकता है: "किसी को अतिरिक्त संसाधन (समय, पैसा, मानसिक, आदि) क्यों खर्च करना चाहिए अगर कोड का वह ठोस टुकड़ा अब ठीक काम करता है? क्या यह संसाधन की बर्बादी नहीं है? ? "

जब भी मुझे कोई विरासत कोड मिलता है, मैं कई चीजों के बारे में सोचता हूं जो महत्वपूर्ण लगती हैं।

  1. मैं क्या बदलाव करने जा रहा हूं?
  2. क्या मुझे इस कोड का समर्थन करने की आवश्यकता होगी? यह कितनी जल्दी (निकट / दूर भविष्य) हो सकता है?
  3. क्या यह कोड काम करने के लिए पर्याप्त आरामदायक है? (अभी)
  4. क्या मुझे यकीन है कि सभी परिवर्तन जो मैं कर रहा हूं सुरक्षित हैं? विभिन्न परीक्षण आमतौर पर इस प्रश्न का उत्तर देने में मदद करते हैं।
  5. यदि मैं कोड संशोधन के दौरान गलती (s) करूँगा तो मुझे क्या परिणाम मिल सकते हैं? क्या मेरे परिवर्तनों को जल्दी से वापस करना संभव है? क्या यह समय की बर्बादी होगी?
  6. ...

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

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


2

क्या Microsoft को विंडोज़ अपडेट करने की आवश्यकता है? क्या सभी * निक्स डिस्ट्रो को विकसित होते रहना है? या अधिक व्यावहारिक उदाहरण सभी को अभी भी 1970 की कारों को चलाने की आवश्यकता है?


1

आप सामान्य रूप से कोड को दूसरी बार बेहतर लिख सकते हैं, आपने शुरू में इसे लिखकर डोमेन के बारे में अधिक सीखा।

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

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


1

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

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

बेशक कभी-कभी आप कोड को साफ नहीं कर सकते हैं जैसा आप चाहते हैं। जोएल स्पोल्स्की ने एक लेख लिखा था कि आप अपने कोड को रिफलेक्टर करने के लिए कुछ सप्ताह क्यों समर्पित करना चाहते हैं। इसे यहाँ पढ़ें और हाँ यह थोड़ा पुराना है, लेकिन मुझे लगता है कि जानकारी अभी भी प्रासंगिक है।

मुझे आशा है कि वह मदद करेंगे


1

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


1

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

आपकी कंपनी को नए कोड लिखने या कोड के किसी अन्य टुकड़े को फिर से लिखने के बजाय, इस कोड को लिखने में समय बिताने के लिए आपको भुगतान क्यों करना चाहिए?

आपको अवसर प्रस्तुत करने के रूप में सुधार करना चाहिए, लेकिन अवसर का अर्थ है कि आप या तो पहले से ही कोड पर काम कर रहे हैं, या आपने परिवर्तन करने के लिए एक व्यावसायिक कारण पर विचार किया है।

उत्पादन में बदलाव लाने से चीजों को तोड़ने का एक गैर-शून्य मौका मिलता है (इकाई और कार्यात्मक परीक्षण केवल इस अवसर को कम करते हैं, वे इसे खत्म नहीं करते हैं), और केवल तब किया जाना चाहिए जब अपेक्षित लाभ जोखिम को कम कर देता है।

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


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

@MarjanVenema: जब विकास रुका, तो सभी शाखाएँ समान होनी चाहिए। यदि आपको बाद में ऐसा कुछ दिखाई देता है जिसे सुधारा जा सकता है, लेकिन इसमें सुधार नहीं किया जा सकता है, तो इसे विकास शाखा में सुधार लें, और इसे फिर से शुरू करने के लिए विकास की प्रतीक्षा करें और एक नया धक्का दिया जाए।
जोर्मेनो

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

@ मार्जनवीनेमा: शायद मुझे इसे तुरंत उत्पादन के लिए धकेलने के लिए कहना चाहिए था। यदि आप सकारात्मक हैं कि परिवर्तन कभी भी ठेस नहीं पहुंचाएगा, तो परिवर्तन न करें। यदि OTOH, तो आप अनिश्चित हैं, लेकिन परिवर्तन आसानी से हो गया है और आप पहले से ही वहां हैं ... परिवर्तन करें। ट्रैकिंग और परीक्षण के लिए, इसका मतलब "समीक्षा के रूप में आवश्यक" द्वारा कवर किया जाना था।
1

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

1

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

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

जैसा कि अंकल बॉब मार्टिन कहते हैं, "कैंपग्राउंड क्लीनर को हमेशा छोड़ दें, जितना आपने पाया है।"


1

यह आपकी कंपनी में प्रबंधन से पूछने का प्रश्न है।

क्या आपके पास वापस जाने और पुराने कोड में बदलाव करने के लिए आवश्यक समय और संसाधन हैं?

क्या आपके पास एक क्यूए टीम टेस्ट करने के लिए समय और संसाधन हैं जो आपने यह सुनिश्चित करने के लिए बदल दिया है कि यह टूटा नहीं है?

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


0

निर्भर करता है।

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

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

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