पुरानी परियोजनाओं की सफाई के लिए अच्छे दृष्टिकोण क्या हैं?


11

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


पीछे से कौन से निर्णय लेते हैं, क्या आप आज से असहमत हैं?

जवाबों:


21

आपके पास तीन बुनियादी विकल्प हैं:

  1. यदि ऐप बहुत छोटा है और वास्तविक गड़बड़ है , तो फिर से शुरू करना आपके लिए सबसे अच्छा दांव हो सकता है।

  2. परावर्तक

  3. अतिरिक्त सुविधाओं में गड़बड़ और हैक के साथ रहते हैं।

आमतौर पर, विकल्प (2) आपकी सबसे अच्छी शर्त है।

आप वास्तव में कितना रीफैक्टरिंग करते हैं, यह उस संसाधन पर निर्भर करेगा, जो आप वर्सेस वैल्यू में डालते हैं। पूछे जाने वाले प्रश्नों में शामिल होंगे:

  1. क्या समय / बजट उपलब्ध है?
  2. आप भविष्य में कितना संशोधन करते हैं?
  3. कोड को और कौन देखेगा? (यानी? गड़बड़ कोड आपकी प्रतिष्ठा को नुकसान पहुंचाएगा?)
  4. क्या किसी और को कोड बनाए रखने की उम्मीद है?
  5. आपकी मदद करने के लिए कौन से रिफैक्टरिंग उपकरण उपलब्ध हैं?
  6. आपका अनुभव क्या है?
  7. रिफैक्टरिंग से आपको क्या अनुभव होगा?
  8. किस प्रकार के रिफैक्टरिंग से आपको सबसे अधिक लाभ मिलेगा?
  9. क्या स्वचालित परीक्षण पहले से मौजूद हैं? लिखने की जरूरत है?
  10. कितना मैनुअल परीक्षण की आवश्यकता होगी?
  11. यदि आप कोड को छोड़ देते हैं तो आप कैसा महसूस करेंगे?

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

  1. एक समय में एक काम करो।
  2. छोटे कदम उठाएं।
  3. अपने स्रोत नियंत्रण का अच्छा उपयोग करें (अक्सर जांच में शामिल करें + टिप्पणियां शामिल करें)।
  4. स्वचालित रीफैक्टरिंग उपकरणों का उपयोग करें।
  5. जानिए IDE

6
मैं बहुत लंबे समय के लिए टूटी हुई स्थिति से बचने के लिए भी जोड़ना चाहूंगा। मैंने कई खुले स्रोत परियोजनाओं को एक महत्वाकांक्षी पुनर्लेखन / रीडिजाइन के दौरान जल्दी से मरते देखा है। एक गैर-कार्यात्मक परियोजना जल्दी से प्रेरणा को मार देती है।
लेन्नीप्रोग्रामर्स

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

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

1
@TMN: आदर्श रूप से, हाँ। हालाँकि, आपको हमेशा एक स्वचालित परीक्षण की आवश्यकता नहीं होती है । (1) यदि कोड को स्वचालित परीक्षणों के बिना विकसित किया गया है, तो रेट्रो-फिट इकाई परीक्षणों के लिए यह आसान / संभव नहीं हो सकता है जब तक कि आपने पहले से ही कुछ रिफैक्टिंग नहीं किया है (2) तुच्छ, स्थानीय परिवर्तन करने से पहले परीक्षण लिखना महंगा हो सकता है। (3) स्वचालित रिफैक्टरिंग उपकरण + आईडीई सुविधाएँ, रीफ़ैक्टरिंग के परिणामस्वरूप कोड को रोकने में मदद कर सकती हैं।
Kramii

2
मैं आपके स्रोत नियंत्रण में जोड़ दूँगा, एक अलग BRANCH पर सभी रीफैक्टरिंग डालूँगा। यह एक समझदार स्टेपवाइज के साथ-साथ बड़े-ब्लॉक की तुलना करने में मदद करता है। यह अमूल्य हो सकता है अगर चीजें कस्टर्ड में बदल जाती हैं (जो उन्हें मिलेगी)।
जल्दी से

5

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


1
यह निश्चित रूप से प्रसिद्ध बॉयस्काउट नियम है: हमेशा एक बेहतर स्थिति में कोड को छोड़ दें, जितना आपने पाया।
जोर्ग डब्ल्यू मित्तग

2

इस बार चीजों को ठीक करते समय इसे दस्तावेज करना सुनिश्चित करें। अगली बार जब आप कोड देखेंगे तो चीजों को याद करना बहुत आसान हो जाएगा।


1

यह निर्भर करता है, क्या इसे बनाए रखने में अधिक समय खर्च होने वाला है क्योंकि यह एक गड़बड़ है, या इसे फिर से लिखना है इसलिए यह गड़बड़ नहीं है और आसानी से बनाए रखा है। मैं व्यक्तिगत रूप से इस समय से गुजर रहा हूं, मैं एक इंट्रानेट साइट को ASP.Net MVC3 में परिवर्तित कर रहा हूं क्योंकि पुराना कोड बकवास का ढेर था (जो मैंने लिखा था) क्योंकि यह डिस्पोजेबल होना चाहिए था (हां, मुझे बेहतर पता होना चाहिए )। बकवास का पुराना ढेर अभी भी यहाँ है, और यह सुविधाओं को जोड़ने और बग को ठीक करने वाला सिरदर्द है। एमवीसी सुंदर है और इस पर काम करना वास्तव में आनंददायक है, इसलिए इसे फिर से लिखना पड़ रहा है।

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