आवश्यकताओं की प्रतीक्षा करते हुए मैला कोड की कम प्रभाव परावर्तन और कोड सफाई


17

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

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

फिलहाल मैं खुद से हूं लेकिन मेरे पास बहुत समय है, निर्णय की स्वतंत्रता और भविष्य की दिशा और मेरी मदद करने के लिए एक टीम बनाने की क्षमता है।

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

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

क्या आप मुझे ऐसा करने के किसी सकारात्मक या नकारात्मक प्रभाव के बारे में सोच सकते हैं जिसे आप जोड़ना चाहते हैं?


1
निस्तारण, निस्तारण के लायक क्या है, बाकी को फिर से लिखें ...
एसएफ।

"यह बहुत कम है कि मैं एक तकनीकी अक्षमता परियोजना विफलता का अनुभव करता हूं, जो एक परियोजना प्रबंधन विफलता के विपरीत है [...]" यह कितना सच है, +1।
ग्रेगरी हिगले

जवाबों:


22

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

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

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

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


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

10

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


2
फिर आसान लोगों के साथ शुरू करें और अपने तरीके से काम करें?
tadmers

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

2
यदि कोड परीक्षण के लिए डिज़ाइन नहीं किया गया था, तो इसके चारों ओर परीक्षण प्राप्त करने के लिए सभी अधिक कारण हैं - लेकिन सुरक्षित रूप से। माइकल फेदर की पुस्तक "लिगेसी कोड के साथ प्रभावी रूप से कार्य करना" पढ़ें; इसमें अनटेस्ट कोड को टेस्ट करने योग्य बनाने की रेसिपी है।
जो व्हाइट

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

1
यह कुछ अनुभव और अच्छा निर्णय लेता है। सब कुछ यूनिट-टेस्टेबल नहीं हो सकता (या होना चाहिए)।
tdammers

1

सम्मिश्रण उत्तर - मेरा विचार परीक्षण और सफाई को मिश्रित करना होगा - शायद ५०/५०? यदि आप एक टीडीडी प्रकार का दृष्टिकोण करने वाले क्षेत्र में काम करते हैं - परीक्षण की स्थापना करें तो आपको यह जानना होगा कि इकाई और एकीकरण परीक्षण वांछित है और फिर ठीक करना शुरू करें। समय अनुमति के अनुसार आगे बढ़ें।

इसका मतलब है कि आप उतनी प्रगति नहीं करेंगे, लेकिन इसका मतलब है कि आपके पास कुछ क्षेत्रों में कम से कम, और आपके पास एक अच्छा शुरुआती आधार होगा।

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

यह देखते हुए कि आप अधिक आवश्यकताओं की प्रतीक्षा करते हुए ऐसा कर रहे हैं, मुझे लगता है कि अव्यवस्था का निदान करने के लिए आप कुछ भी कर सकते हैं यह आपके दीर्घकालिक संस्कार में बहुत वृद्धि करेगा।

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