मैं विशिष्ट गुणवत्ता मानकों को पूरा करने के लिए एक बड़ी विरासत कोडबेस कैसे अपडेट कर सकता हूं?


10

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

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

इससे पहले:

  • बड़ा: 1MLOC से अधिक
  • विरासत: कोई स्वचालित परीक्षण नहीं
  • खराब गुणवत्ता: उच्च जटिलता, उच्च युग्मन, उच्च पलायन दोष

उपरांत

  • स्वचालित परीक्षण
  • आसान अद्यतन / रखरखाव
  • उच्च गुणवत्ता: कम जटिलता, डिकोड्ड कोड, कुछ बच गए दोष

एक वास्तविक विरासत को अद्यतन करने के लिए वास्तविक दुनिया में किस तरह के वृद्धिशील कदम साबित हुए हैं, जो गुणवत्ता के मानकों को पूरा करने के लिए सफलतापूर्वक, कुल पुनर्लेखन के माध्यम से जाने के बिना?

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




7
संपूर्ण वित्तीय उद्योग? इसका अधिकांश भाग 40 वर्ष पुराने FORTRAN कोड पर चलता है। नेटस्केप के विपरीत वे इसे चक नहीं सकते हैं और इसे खरोंच से फिर से लिख सकते हैं, इसलिए यह धीरे-धीरे इस पूरे समय में सुधार कर रहा है।
मैटवेवी

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

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

जवाबों:


8

उद्योग में http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 जैसी पुस्तकें इस बात की पर्याप्त साक्षी होनी चाहिए कि उद्योग में कितने बड़े, विरासत वाले खराब गुणवत्ता वाले कोड आधार आम हैं।

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

यह आपके द्वारा बोले गए अध्ययनों की कमी को समझा सकता है। यदि आप पर्याप्त किताबें पढ़ते हैं, उदाहरण के लिए, पीटर वैन डेर लिंडेन के डीप सी सीक्रेट्स, तो आप मिलियन डॉलर बग के बारे में पढ़ेंगे जहां उनके पास किस प्रोजेक्ट के बारे में याद आ रही है।

नोट: मैं इसे एक टिप्पणी करना चाहता था, लेकिन यह बहुत लंबा था। मैं समझता हूं कि यह पूरी तरह से सवाल का जवाब नहीं देता है।

EDIT: C ++ 11 और GCC की दीर्घकालिक व्यवहार्यता पर सवाल उठाया गया है - यदि डेवलपर्स GCC को रिफलेक्टर करते हैं और इसे LLVM / क्लैंग के रूप में अधिक उपयोगी बनाते हैं, तो यह एक अच्छा उदाहरण प्रदान कर सकता है। चर्चा नोट करती है कि प्रलेखन कुछ स्थानों पर खराब है जो नए डेवलपर्स के लिए प्रवेश बाधा को अधिक बढ़ाता है।


4

3 फरवरी, 2013 को, लिब्रे ऑफिस डेवलपर्स में से एक, माइकल मिक्स, एक दो दिनों में एक बातचीत का शीर्षक दे रहा है, "लिबरऑफिस: एक विशाल कोड-बेस की सफाई और फिर से फैक्टरिंग, या फिर इसे फिर से लिखना क्यों बदतर होगा। । " ऐसा लगता है कि आप क्या पूछ रहे हैं: एक खराब समझ वाले, विशाल कोड-बेस के बारे में जर्मन में टिप्पणी की गई, जिसकी कोई इकाई परीक्षण नहीं है, एक पेचीदा बिल्ड इन्फ्रास्ट्रक्चर और पच्चीस के साथ। अन-पेड तकनीकी ऋण के वर्षों "और इसे आधुनिक बनाना।

प्रस्तुति को ऑनलाइन स्ट्रीम किया जा सकता है , और (मुझे लगता है) रिकॉर्डिंग कुछ भविष्य की तारीख में उपलब्ध होगी।


1
मुझे पता है कि यह अब से कुछ दिनों के लिए निर्धारित है, हालांकि एक बार प्रसारित होने के बाद क्या आप उस प्रक्रिया का सारांश जोड़ पाएंगे जो आपके कोड बेस को आधुनिक बनाने के लिए आपके उत्तर को लेती है, यदि वे लिंक कभी मृत हो जाते हैं?
राहेल

@ राचल - अगर मैं प्रसारण को पकड़ने में सक्षम हूं, तो मैं निश्चित रूप से ऐसा करूंगा। धन्यवाद।
जोश केली

4

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

पहली बार एक एप्लिकेशन था, जो इसे मानते हैं या नहीं, एक मौलिक वास्तुकला था, जिसने इसे केवल डॉट मैट्रिक्स प्रिंटर के साथ काम किया। जब मेरी कंपनी को रिबन की आपूर्ति करने के लिए कोई विक्रेता नहीं मिला, तो उन्होंने मुझे लेजर प्रिंटर के साथ काम करने के लिए सौंपा।

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

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

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

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

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

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


1

मल्टी-मिलियन लाइन कोड बेस पर काम करने के व्यक्तिगत अनुभव से मुझे कुछ रणनीतियाँ मिली हैं जो काम करने लगती हैं।

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

यदि आप पाते हैं कि बहुत सारी चीजें हैं जो कई घटकों से संबंधित हैं जो "सिस्टम" मुद्दों का एक संकेत है और कोड को इंगित कर सकता है जो बहुत कसकर युग्मित है या एक एपीआई जिसे ताज़ा करने की आवश्यकता है।

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

  • यूनिट परीक्षण कार्य कर सकता है लेकिन अक्सर आप सीमित युग्मित कोड के कारण यूनिट परीक्षण के लिए सीमित हो सकते हैं। हालाँकि ऐसा करें जहाँ आप कर सकते हैं।
  • बाहरी परीक्षण एक अन्य एवेन्यू है। मुझे लगता है कि आप शायद पहले से ही यह है और अगर नहीं तो मैं इसे बनाने में कुछ समय बिताऊंगा। इसके अतिरिक्त, जो कुछ मेरे लिए काम करता है वह है सिस्टम में बेतरतीब ढंग से दोष / घटनाओं को इंजेक्ट करने की क्षमता को जोड़ना। इसके अलावा एक ही समय में कई चीजों को इंजेक्ट करने की कोशिश करें ताकि इसे नए तरीकों से विफल किया जा सके।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.