क्या आपको मौजूदा कोड को रिफलेक्टर करना चाहिए जो नए फीचर्स पर केंद्रित प्रोजेक्ट में टूटा नहीं है?


11

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

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


2
क्या आपके पास परीक्षण करना चाहते हैं, जिससे आप चाहते हैं कि आप रिफैक्टरिंग करें।

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

जवाबों:


17

पूर्ण रूप से।

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

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

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

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


1
+1 विशेष रूप से ग्राहकों के लिए रिफैक्टिंग के मूल्य के बारे में पैराग्राफ के लिए।
मार्जन वेनेमा सेप

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

5
@ थोमस ओवेन्स: +1 मैं सहमत हूं, लेकिन मैं रिफैक्टिंग पर सावधानी से भी ध्यान दूंगा। रिफैक्टरिंग के लिए कैस्केड शुरू करना बहुत आसान है, जो वास्तविक काम को आवश्यक बना सकता है और इसके द्वारा समय सीमा तय कर सकता है।
जोएल एथरटन

@Joel यह एक अच्छी बात है। आपको समय सीमा को सीमित करने के लिए समय सीमा को सीमित करने की आवश्यकता है।
थॉमस ओवेन्स

3

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

0-क्या इस कोड के बारे में कोई ग्राहक शिकायत है?

1-क्या यह एप्लिकेशन की कार्यक्षमता के लिए आवश्यक है

2-क्या वर्तमान कोड हानिकारक है?

3-क्या परिवर्तन की लागत इसके लायक है?

4-क्या आप लागत वहन कर सकते हैं?

5-क्या यह आपके कौशल का संगठन के लिए सबसे अच्छा उपयोग है

6-क्या आपके परिवर्तनों से आपके उपयोगकर्ता को नए परिवर्तन को फिर से स्थापित करना पड़ेगा - क्या आप ग्राहक को उचित ठहरा सकते हैं?

7-क्या आप खराब फिक्स के जोखिम को सहन कर सकते हैं?

8-क्या परिवर्तन आपकी परियोजना के बाहर अन्य कोड को प्रभावित करता है?

9-क्या यह एक विकसित उत्पाद या एक स्थिर उत्पाद है? यदि यह विकसित हो रहा है तो क्या आप अगली रिलीज़ के साथ बदलावों को शामिल कर सकते हैं?


आपने मेरा मन पढ़ लिया है! मैं उस प्रसिद्ध नियम के बारे में सोच रहा था कि "यदि इसे तोड़ा नहीं जाता है तो इसे ठीक न करें", रिफैक्टरिंग को सही ठहराने के लिए!
कार्लोस जैमे सी। डी। लियोन

3

रिफ्लेक्टर जल्द, रिफ्लेक्टर अक्सर।

यदि आप इसे (समय, धन आदि) बर्दाश्त कर सकते हैं, तो आपको इसे करना चाहिए।

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

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

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


2

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

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

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

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


0

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

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