मैं अपनी टीम के लिए रिफ्लैक्टरिंग को प्राथमिकता कैसे बना सकता हूं?


57

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

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

मैं ऐसे रीफैक्टरिंग के मूल्य को कैसे प्रदर्शित कर सकता हूं जो इसे हमारी कार्य सूचियों में जोड़ा जाता है? क्या इसके लायक सिर्फ रिफ्लेक्टर है जैसा कि मैंने जाना, अनुमति के बजाय क्षमा मांगना?


संस्थान कोड-समीक्षाएं और समस्या खुद का ख्याल रखेगा (लगभग)
ड्यूकऑफमिंग

4
एक अलग कार्य के रूप में refactoring का इलाज न करें - यह नहीं है।
वेटल

2
इन-कोड चेंगलॉग मुझे रोना चाहते हैं ... मुझे आपके नुकसान के लिए खेद है।
मार्क कैनलास

@ मर्क कैनलस मैं उसी तरह से सोचता था जब तक कि मुझे 20 साल पुराने कोड बेस का सामना नहीं करना पड़ता था जब तक कि स्रोत नियंत्रण में सैकड़ों बदलाव होते हैं। सौभाग्य क्यों (या यहां तक ​​कि अगर) एक विशेष कोड ब्लॉक केवल स्रोत नियंत्रण इतिहास का उपयोग कर परिवर्तन हो रहा था
माइकल जे।

@ मिचेल क्या यह इतना मुश्किल बना दिया? सामान्य तौर पर, कुछ दोष / एनोटेट परिचालनों से आपको संबंधित कमिटमेंट का अधिकार मिलना चाहिए, चाहे कितने भी बदलाव किए गए हों। 20 वर्षों में बदलावों के "सैकड़ों" छोटे हैं, BTW।)
मार्नेन लाइबो-कोसर

जवाबों:


51

"अनुमति से माफी मांगना बेहतर है" सच है।

इसकी चिंता क्यों? बस सबसे भयानक भागों को रिफलेक्टर करें।

आप पहले से ही जानते हैं कि सबसे महंगी त्रुटियां क्या हैं?

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

मुसीबत टिकटों की संख्या, डिबगिंग के घंटे और अन्य बहुत विशिष्ट, बहुत मापने योग्य लागतों की पहचान करें

फिर उच्च लागत समस्याओं की उस सूची पर कुछ तय करें ।

जब आपको माफी मांगनी होती है, तो आप लागत में कमी की ओर इशारा कर सकते हैं।


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

इसका मतलब है एक चीज उठाओ । एक इकाई परीक्षण लिखें। उस एक बात को ठीक करो। आपने दो सुधार किए हैं। (1) ने एक परीक्षा लिखी और (2) ने कोड तय किया।

दोहराएं।


4
यदि आप ऐसा करते हैं, तो शुरू करने से पहले मैट्रिक्स प्राप्त करें, फिर माफी मांगते समय, आपके पास सबूत हैं कि आपको अपनी नौकरी रखने की आवश्यकता होगी।
मटनज

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

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

8
अधिकांश समय उत्तर यह प्रतीत होता है कि "ऐसे लोगों को छोड़ें और पाएं जो सक्षम हों, जो समझते हैं कि एक वास्तविक पेशेवर कैसे बने, हैक नहीं।" :)
वेन मोलिना

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

32

लड़के स्काउट नियम का पालन करें: आपने पाया की तुलना में कैंपसाइट (कोड) को थोड़ा बेहतर छोड़ दें। मैंने कभी भी किसी को छोटे कोड में सुधार करने के लिए लिखे जाने के बारे में नहीं सुना है "जब वे वहां थे।"


7
दृढ़ता से इस बात पर निर्भर करता है कि आप समय सीमा के कितने करीब हैं। लाइब्रेरी बदलना पिछले सभी परीक्षण को अमान्य कर सकता है।

3
अच्छी बात है, @ थोरबजर्न। ऐसा कुछ है कि मैं शायद "छोटे" सुधार के रूप में वर्गीकृत नहीं करूंगा क्योंकि इसमें प्रभाव की एक बड़ी गुंजाइश है।
कार्ल ब्वेलफेल्ट

यदि आप सिर्फ एक फ़ंक्शन से गुजरते हैं जो थोड़ा सुधार किया जा सकता है। आपको अभी पता नहीं है कि इसे एक आम पुस्तकालय में रखा गया है?

@ Thorbjørn मैं कहूँगा कि आपको इस बात की अच्छी जानकारी होनी चाहिए कि फ़ंक्शन का उपयोग कहाँ किया जा रहा है। यदि दी गई स्रोत फ़ाइल को किसी आंतरिक चीज़ के लिए संकलित किया जा रहा है, अर्थात आपके पास इसके सभी कॉलर्स तक पूरी पहुँच है, तो मुझे इसे ठीक करने और उन जगहों को अपडेट करने में कोई समस्या नहीं दिखती है, जहाँ इसे आवश्यकतानुसार बुलाया जाता है। यदि स्रोत फ़ाइल को किसी लायब्रेरी के भाग के रूप में संकलित किया जा रहा है जहाँ API को बदला नहीं जा सकता है, तो आप कम से कम कार्यान्वयन विवरण को ठीक कर सकते हैं।
मैक्समू

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

23

मैं शायद देखने का निंदक बिंदु हूँ।

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

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

एक अलग कंपनी में शामिल होने पर विचार करें जहां वे इंजीनियरिंग प्रथाओं को अधिक गंभीरता से लेते हैं।


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

8
यह लगभग हमेशा सबसे अच्छी सलाह है IMO। यदि कंपनी यह नहीं समझती है कि गुणवत्ता कोड होना कुछ ऐसी चीज है जिसे प्रोत्साहित किया जाना चाहिए और समय की बर्बादी के रूप में नहीं देखा जाना चाहिए, तो यह एक खो गया प्रयास है - वे वास्तविक प्रोग्रामिंग को समझने के लिए पर्याप्त बुद्धिमान नहीं हैं।
वेन मोलिना

17

मैंने देखा कि यहाँ के कई पोस्टरों से ऐसा प्रतीत होता है कि प्रबंधन में समस्या है - जबकि प्रश्न में इसका उल्लेख नहीं है।

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

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

  1. केवल कभी स्वस्थ कोड जोड़ें।
  2. जैसे ही आप इसे देखते हैं हमेशा नॉट-हेल्दी कोड को ठीक करें।
  3. यदि समय सीमा के कारण आप 1 या 2 नहीं कर सकते हैं, तो हमेशा "समय सीमा के तुरंत बाद ठीक करें" मुद्दों की एक सूची रखें, और समय सीमा के बाद उस सूची के माध्यम से काम नहीं करने के लिए किसी भी बहाने को स्वीकार न करें।


डेवलपर्स से अगली टिप्पणी "लेकिन हमें यह करने के लिए समय कैसे मिलता है - हमारे पास अब समय नहीं है?"। एकमात्र सही उत्तर (फिर से IMHO) "आपके पास ऐसा करने के लिए समय नहीं है"। यदि आप कोडबेस को स्वस्थ नहीं रखते हैं, तो आपको टर्नअराउंड समय अधिक लंबा और लंबा लगने लगेगा, कार्यक्रम अधिक अप्रत्याशित हो सकते हैं, कीड़े नास्टियर हो रहे हैं, और मूल्य कम हो रहा है।

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

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

कहानी का नैतिक: अक्सर चीजें लगभग उतनी टूटी हुई नहीं होतीं जितनी कि वे लगती हैं, और 'शुरू होने वाली' आमतौर पर इसका मतलब है कि आप मुद्दों के ज्ञात सेट को कम से कम बालों वाले अज्ञात सेटों के साथ व्यापार करेंगे। एक समय में एक हिस्सा रिफलेक्टर!


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

: यह लेख बहुत उपयुक्त है blog.objectmentor.com/articles/2009/01/09/...
गैरेट हॉल

यह भी देखें कि आपको जोएल स्पोल्स्की से कभी नहीं करना चाहिए
Jan Hudec

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

खैर, मेरे अनुभव से यह हमेशा एक प्रबंधन समस्या है। प्रबंधन लोगों को प्रबंधित करने के लिए है, इसलिए वे अपना काम ठीक से करते हैं। यदि प्रोग्रामर अपना काम ठीक से नहीं करते हैं (और क्वालिटी कोड नहीं लिखने का मतलब बिल्कुल वही है), तो हमारे पास प्रबंधन में एक समस्या है!
कैसरलुडी

12

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


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

5
@Wayne M: उस स्थिति में, तुरंत एक नई नौकरी की तलाश शुरू करें। यदि वे साक्षात्कार में आपसे झूठ बोलते हैं, तो वे बाद में आपके साथ कैसा व्यवहार करेंगे?
डेविड थॉर्नले

1
सहमत, लेकिन दुख की बात है अक्सर आसान काम से कहा।
वेन मोलिना

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

6

ईमानदारी से दूसरी कंपनी ढूंढें। विकास प्रक्रिया में इस तरह के सुधार के लिए विशाल सांस्कृतिक छलांग की आवश्यकता होती है, क्योंकि सभी को एक ही पृष्ठ पर पहुंचने से पहले महत्वपूर्ण समय लगेगा और तब तक आप उतना ध्यान नहीं रखेंगे।

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

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


5

अगर मुझे इस तरह के संदर्भ में चीजों को बेहतर बनाने के लिए एक अभ्यास शुरू करना है, तो यह कोड समीक्षा होगी। कोड समीक्षाएँ हैं

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

आपको कोड की समीक्षा व्यवस्थित रूप से करने की आवश्यकता नहीं है, केवल तब जब पहली बार में बड़े / जटिल कोड भाग करें।

बेशक, अगर आपको लगता है कि कोड की समीक्षा करने से पहले आपको आधिकारिक समर्थन की आवश्यकता है, तो आपको पहले अपने बॉस को यह विश्वास दिलाना पड़ सकता है कि यदि वे हैं तो कोड आधार ढहने की संभावना है।


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

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

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

4

यहाँ मैं ऐसी स्थितियों में कर रहा हूँ (एक डेवलपर के रूप में मेरे करियर के 15 वर्षों में मैं लगभग हर दिन इस तरह के कोड में आया हूँ)

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

प्रबंधन फिर से फैक्टरिंग कोड के लिए अलग-अलग समय निर्धारित नहीं करता है (उनके पास कभी पर्याप्त संसाधन नहीं हैं!), इसलिए इसे धीरे-धीरे और लगातार करना एक सही दृष्टिकोण है।


मुझे कोई फर्क नहीं पड़ता, भले ही कोड री-फैक्टरिंग के दौरान एक से दो बग रेंगते हों, ऐसे दोष पकड़े जाते हैं और क्लीनर / लीनर कोड में बहुत तेजी से और आसानी से तय होते हैं!
उत्सुक

3

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

"एक स्वच्छ कार्यस्थल एक सुरक्षित और उत्पादक कार्य है", और मेस में हर योगदान एक घातीय फैशन में गड़बड़ करता है, न कि रैखिक।

यदि स्थिति से निपटा नहीं जाता है, तो अंततः आप बिना किसी रिटर्न के एक बिंदु को पार कर जाएंगे, जहां यह आर्थिक रूप से प्रभावी हो जाता है, इससे पहले कि यह घटित हो इससे पहले कि लाभ पलट जाए, आपको समस्या से निपटने के लिए और अधिक ईंधन दे जैसा कि आप जाते हैं।


3

ऐसा लगता है कि आपकी समस्याएं अधिक सामान्य हैं।
रिफैक्टिंग मुद्दा एक लक्षण और समस्या के हिस्से से संभावित राहत दोनों है।

सॉफ्टवेयर लीड और टीम टीम के समय को आवंटित करते हैं

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

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

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

प्रारंभिक परियोजना विकल्प रिफैक्टरिंग के लिए एक दुष्चक्र बनाते हैं

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

http://csse.usc.edu/csse/TECHRPTS/1989/usccse89-500/usccse89-500.pdf

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

"एक प्रबंधक (थ्योरी X), एक कोच (थ्योरी वाई), या एक सूत्रधार (थ्योरी जेड) के रूप में एक प्रबंधक की भूमिका निभाने के बजाय, थ्योरी डब्ल्यू अपने विभिन्न निर्वाचन क्षेत्रों के बीच एक वार्ताकार के रूप में एक प्रबंधक की प्राथमिक भूमिका, और परियोजना समाधान का एक पैकेट तैयार करता है। सभी पक्षों के लिए जीत की स्थिति के साथ, इसके अलावा, प्रबंधक एक लक्ष्य-सेटर भी है, लक्ष्यों के प्रति प्रगति की निगरानी, ​​और दिन-प्रतिदिन जीत-हार या हार-हार परियोजना संघर्षों में एक कार्यकर्ता, उनका सामना करने, और उन्हें जीत-जीत की स्थितियों में बदल रहा है। ”

क्विक एंड डर्टी अक्सर जस्ट डर्टी होती है

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

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

मेरा समाधान मूल विकास टीम (या कम से कम मूल लीड) को तब तक जारी नहीं करना होगा जब तक कि कोड को कम से कम कोड मानकों को पूरा करने के लिए फिर से चालू नहीं किया जाता है।

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

Refactoring परक्राम्य नहीं है

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


2

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

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

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


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

1

मुझे लगता है कि समय का पता लगाने के लिए कैसे निर्भर करता है, इस पर निर्भर करता है कि आप क्यों कोड को रिफैक्ट करना चाहते हैं।

यदि यह काम करता है, तो विशेष रिफ्लेक्टर की कोई आवश्यकता नहीं है और आप इसे कोड के उस हिस्से को छूने पर कर सकते हैं। इसलिए आपको उसके लिए विशेष समय की आवश्यकता नहीं है।

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

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


1

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

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

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

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


1

आपकी मुख्य समस्या यह है कि कोड को पर्याप्त दृश्यता नहीं मिल रही है।

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

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

जब कोड की गुणवत्ता सभी को दिखाई देती है (विशेष रूप से टीम लिडर और बॉस) और संस्करण नियंत्रण और यूनिट परीक्षण आपकी पीठ के पास होते हैं ... तो लोग रिफ्लेक्टर के लिए प्रोत्साहित महसूस करते हैं।


1

इस कोड को कई छोटे बदलावों पर धीरे-धीरे मिला। इसे भी उसी तरह से तय करना होगा।

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

एक बैठक करें और लगातार कोडिंग मानकों का निर्धारण करें।

साथ चलते हुए मूल नियमों का उपयोग करें:

जब भी नए कोड को क्लास में पेश किया जाता है तो क्लास के कामों को साबित करने के लिए ऑटोमेटेड टेस्ट लिखना पड़ता है (न सिर्फ नए कोड को)।

जब भी बग को ठीक किया जाता है तो क्लास के कामों को साबित करने के लिए स्वचालित परीक्षणों को लिखना पड़ता है (न कि केवल निर्धारित कोड को)।

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

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

महत्वपूर्ण बात यह है कि इन आवासों को मानक कोडिंग कार्यों में बनाया जाना है, ताकि उनमें से कोई भी 'वास्तविक' कार्य से बहुत अधिक समय न ले पाए, लेकिन वे सभी वास्तविक लाभ प्रदान करते हैं। पुराने कोड को फिर से भरने के लिए एक परियोजना बनाने की कोशिश न करें, यह एक भयावह, उबाऊ, मूर्खतापूर्ण दर्द है जो बहुत समय तक गैर तकनीकी लोगों को बर्बाद करने जैसा लगेगा!


0

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

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

बकवास कोड को ठीक करने के लिए बहुत अधिक महंगा नहीं है। कोई स्वचालित प्रतिगमन परीक्षण नहीं होने के कारण, रिफैक्टेड कोड के परीक्षण की लागत बहुत अधिक है।

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

मैं आगे जाने से बचना चाहूँगा और आपके पीछे ऐसा करना होगा (यदि यह टूटा नहीं था, और आपने इसे तोड़ा है, तो यह कैसा दिखता है) - ठीक कोड जिसे वैसे भी बदलने की आवश्यकता है, लेकिन अगर यह नहीं टूटा है, तो डॉन ' t इसे ठीक करें।


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

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

1
मेरी उपरोक्त टिप्पणी देखें, इसीलिए।
वेन मोलिना

2
" अलग और काफी वाजिब, IMO।
पीटरअलेनवेब

3
@Wayne M: अच्छी तरह से कहा! "अगर यह नहीं टूटा है, तो इसे ठीक न करें" और "रिफैक्टिंग" शब्द केवल एक साथ फिट नहीं है। पुनर्रचना का बहुत सार है कि सॉफ्टवेयर के विकास के बस है नहीं एक काले और सफेद दुनिया में जहां "तोड़ दिया" और "तय" निरपेक्षता हैं।
कार्सन63000

0

अजीब तरह से कोई भी इसका उल्लेख नहीं करता है:

चीजों को प्राथमिकता देने के लिए, उन्हें आसान बनाएं: एक अच्छा रिफैक्टरिंग टूल प्राप्त करें।

वहाँ उत्कृष्ट refactoring उपकरण हैं (कम से कम .NET afaik के लिए)। ओह, और यूनिट टेस्ट पहले से लिखना न भूलें (जैसा कि पहले ही दूसरों ने बताया है)।

सौभाग्य!

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