paint-brush
अपरिचित कोडबेस पर कैसे काम करेंद्वारा@nfrankel
406 रीडिंग
406 रीडिंग

अपरिचित कोडबेस पर कैसे काम करें

द्वारा Nicolas Fränkel4m2023/05/17
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

ओपन सोर्स प्रोजेक्ट के बारे में जानने के लिए गिटहब हैकथॉन एक अच्छी जगह हो सकती है। कोड आधार से परिचित होना एक अच्छा पहला कदम है। ऐसा करने के लिए, समस्या के लिए कोड का आरेख बनाएं। मेरी वरीयता यूएमएल है, लेकिन बहुत सारे विकल्प उपलब्ध हैं।
featured image - अपरिचित कोडबेस पर कैसे काम करें
Nicolas Fränkel HackerNoon profile picture

हमारे पेशे में, अपरिचित कोडबेस पर काम करना आम बात है। ऐसा हर बार होता है जब कोई एक नई परियोजना में शामिल होता है या यहां तक कि बड़े लोगों में पहले से अछूते हिस्से पर काम करने की आवश्यकता होती है।


यह घटना एक बग को ठीक करने वाले डेवलपर तक सीमित नहीं है; यह एक समाधान वास्तुकार हो सकता है जिसे अपने खाली समय में एक GitHub मुद्दे पर काम करने वाली एक नई सुविधा या OpenSource योगदानकर्ता को डिज़ाइन करना हो। इसलिए, मैं यह वर्णन करना चाहता हूं कि मैं स्थिति को कैसे देखता हूं ताकि यह दूसरों को लाभ पहुंचा सके।

एक उदाहरण मुद्दा

अपने बिंदु को स्पष्ट करने के लिए, मैं ओपन सोर्स प्रोजेक्ट पर एक नई सुविधा का अनुरोध करने वाले एक सामान्य गिटहब मुद्दे का उपयोग करूंगा।


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


उस समय, मुझे यह दिलचस्प मुद्दा मिला:


GetQuiet ऑपरेशन के लिए समर्थन जोड़ें http://ehcache.org/apidocs/net/sf/ehcache/Cache.html#getQuiet(java.lang.Object) ?


विचार यह है कि इसे छुए बिना प्रवेश प्राप्त करने में सक्षम होना चाहिए, जिसका अर्थ है कि यह अंतिम एक्सेस किए गए टाइम स्टैम्प को अपडेट नहीं करेगा।


इसके पीछे का उपयोग मामला उस कुंजी के बेदखली को बदले बिना कुंजी के अस्तित्व की निगरानी करने में सक्षम होना है।


- वितरित नक्शा: गेटक्विट ऑपरेशन के लिए समर्थन जोड़ें


एक OpenSource योगदानकर्ता के रूप में, मैं कार्य के लिए कैसे संपर्क करूँगा?

डायग्रामिंग प्रमुख है

प्रलेखन एक नई परियोजना शुरू करने के लिए पहला कदम है। एक नियमित परियोजना पर, प्रलेखन शायद गायब, अधूरा, या आंशिक रूप से (यदि पूरी तरह से नहीं) भ्रामक होगा; हैकाथॉन में, इसे विस्तार से पढ़ने के लिए समय बहुत कम हो सकता है।


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


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


  • यह हाथ में मुद्दे के लिए प्रासंगिक कोड के क्षेत्रों पर केंद्रित है।


  • यह दराज को कोड को पढ़ने और समझने के लिए मजबूर करता है, जो कि सच्चाई का एकमात्र स्रोत है।


  • यह कोड के हमारे मानसिक मॉडल का निर्माण करता है।


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


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


आरेख के लिए, मुझे पुराने जमाने का कहें, लेकिन मैं अभी भी दो कारणों से यूएमएल अनुक्रम आरेखों का पक्ष लेता हूं:


  • मेरा उनके साथ कुछ अनुभव है।


  • सिमेंटिक्स एड-हॉक नहीं हैं, लेकिन उन लोगों के बीच साझा किए जाते हैं, जो एक हद तक यूएमएल को जानते हैं।


आगे की हलचल के बिना, यहाँ यह है:

आरेख तैयार करने के बाद, हम बहुत जल्दी पता लगा सकते हैं कि समस्या कहाँ है:


 public abstract class AbstractCacheRecordStore<R extends CacheRecord, CRM extends SampleableCacheRecordMap<Data, R>> implements ICacheRecordStore, EvictionListener<Data, R> { protected long onRecordAccess(Data key, R record, ExpiryPolicy expiryPolicy, long now) { record.setAccessTime(now); // 1 record.incrementAccessHit(); return updateAccessDuration(key, record, expiryPolicy, now); } //... }
  1. DefaultRecordStore Record पढ़ता है, जो अंतिम एक्सेस समय के अपडेट को ट्रिगर करता है।


समस्या को ठीक करना इस पोस्ट के दायरे से बाहर है। इसमें सर्वोत्तम समाधान विकसित करने के लिए समग्र डिजाइन से अधिक परिचित लोगों से बात करना शामिल है। हैकाथॉन में एक अच्छा तरीका यह है कि सबसे पहले कम से कम दो विकल्पों की पेशकश की जाए और उनके संबंधित ट्रेड-ऑफ का दस्तावेजीकरण किया जाए।


टूलींग के लिए, बहुत सारे विकल्प उपलब्ध हैं। मेरी वरीयताएँ प्लांटयूएमएल में जाती हैं:


  • यह एक वेब ऐप और एक डॉकटर कंटेनर प्रदान करता है
  • यह एसवीजी या पीएनजी छवियां उत्पन्न करता है
  • यह स्किनेबल है
  • यह ओपन सोर्स और फ्री है
  • यह नियमित रूप से बनाए रखा जाता है

निष्कर्ष

किसी की सटीक तकनीकी भूमिका की परवाह किए बिना मौजूदा कोडबेस को समझना एक महत्वपूर्ण कौशल है। प्रलेखन के अतिरिक्त लाभ के साथ एक आरेख बनाना इस लक्ष्य की ओर एक लंबा रास्ता तय करता है।


मुझे यूएमएल आरेख पसंद हैं क्योंकि मैं उनसे परिचित हूं, और वे साझा शब्दार्थ प्रदान करते हैं।


इसलिए, यदि आप एक कोडबेस को बेहतर ढंग से समझना चाहते हैं, तो आपको इसके कोड को पढ़ने के अलावा और भी बहुत कुछ चाहिए; आपको आरेख बनाने की आवश्यकता है।


मूल रूप से 14 मई, 2023 को ए जावा गीक में प्रकाशित हुआ