legacy - बड़े कोडबेस से परिचित होने का सबसे अच्छा तरीका क्या है?




legacy-code codebase (13)

'समस्या डोमेन' को समझकर शुरू करें (क्या यह एक पेरोल सिस्टम है? सूची? वास्तविक समय नियंत्रण या जो भी हो)। यदि आप उपयोगकर्ता द्वारा उपयोग किए जाने वाले शब्दकोष को नहीं समझते हैं, तो आप कोड को कभी समझ नहीं पाएंगे।

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

यदि कोई ऐसा क्षेत्र है जो बहुत कुछ आता है, तो परिवर्तन इतिहास या बग डेटाबेस पर नज़र डालें, पहले उस बिट को देखें। इसका मतलब यह नहीं है कि यह बुरी तरह लिखा गया है, लेकिन यह सब कुछ उपयोग करता है।

अंत में, कुछ नोट्स रखें (मैं विकी पसंद करता हूं)।

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

पहले से ही एक बड़े कोडबेस के साथ मौजूदा टीम में शामिल होना मुश्किल हो सकता है। सबसे अच्छा तरीका क्या है;

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

मैं वर्तमान में लगभग 20k लाइन सी ++ ऐप और लाइब्रेरी पर काम कर रहा हूं (संपादित करें: चीजों की भव्य योजना में छोटा!)। उद्योग में मुझे लगता है कि आपको एक अनुभवी प्रोग्रामर द्वारा परिचय मिलेगा। हालांकि यदि यह मामला नहीं है, तो आप जितनी जल्दी हो सके मूल्य जोड़ने शुरू करने के लिए क्या कर सकते हैं?

-
उत्तरों का सारांश:

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

यह पोस्ट the-best-way-to-familiarize-yourself-with-an-inherited-codebase आंशिक डुप्लिकेट है


(आगे लापरवाह विपणन)

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


एक अन्य प्रोग्रामर के साथ काम करें जो नई सुविधा विकसित करने या बग को ठीक करने के लिए सिस्टम से अधिक परिचित है। यह वह तरीका है जिसे मैंने सबसे अच्छा काम देखा है।


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


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


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


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

जब आपके पास कुछ ऐसा करने की आवश्यकता होती है, तो खुद को एक संकीर्ण ध्यान दें और इसे पूरा करें।


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

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


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


मैं मानता हूं कि यह पूरी तरह से निर्भर करता है कि आप किस प्रकार के शिक्षार्थी हैं। ऐसा कहकर, मैं दो कंपनियों में रहा हूं जिनके साथ शुरू करने के लिए बहुत बड़े कोड-बेस थे। आमतौर पर, मैं इस तरह काम करता हूं:

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

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


यदि संभव हो तो कुछ छोटे कार्य के साथ शुरू करें, अपनी समस्या के आसपास कोड डीबग करें। डीबग मोड में कोड के माध्यम से कदम उठाना सीखने का सबसे आसान तरीका है कि कुछ कैसे काम करता है।


यह इस बात पर निर्भर है कि किस तरह के शिक्षार्थी और आप किस प्रकार के प्रोग्रामर हैं, लेकिन:

  • पहले ब्रॉड - आपको दायरे और आकार के बारे में एक विचार चाहिए। यदि वे अच्छे हैं तो इसमें स्किमिंग डॉक्स / उमल शामिल हो सकते हैं। यदि यह एक दीर्घकालिक परियोजना है और आपको सबकुछ की पूर्ण समझ की आवश्यकता होगी, तो मैं वास्तव में दस्तावेज़ों को सही ढंग से पढ़ सकता हूं। फिर, अगर वे अच्छे हैं।
  • संकीर्ण - कुछ प्रबंधनीय चुनें और इसे समझने की कोशिश करें। कोड के लिए "स्वाद" प्राप्त करें।
  • एक फीचर चुनें - संभवतः एक अलग व्यक्ति जिसे आपने देखा है कि आप आत्मविश्वास महसूस कर रहे हैं, और कुछ छोटे बदलाव करना शुरू कर देते हैं।
  • Iterate - आकलन करें कि चीजें कितनी अच्छी तरह से चली गई हैं और देखें कि क्या आप अधिक गहराई से शुरुआती चरण को दोहराने से लाभ उठा सकते हैं।

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

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

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

सौभाग्य!