कोड का पुन: उपयोग और प्रलेखन को कैसे बढ़ावा दें? [बन्द है]


16

लगभग 10+ डेवलपर्स की टीम लीड के रूप में, मैं कोड पुन: उपयोग को बढ़ावा देना चाहूंगा। हमने बहुत सारे कोड लिखे हैं- उनमें से कई पिछले कुछ वर्षों में दोहराए गए हैं। अब समस्या यह है कि इनमें से बहुत सारे कोड किसी अन्य कोड के डुप्लिकेट या उनमें से थोड़े बहुत बदलाव हैं।

मैंने घटकों में कोड बनाने के तरीके पर आंदोलन (चर्चा) शुरू कर दिया है ताकि भविष्य की परियोजनाओं के लिए उनका पुन: उपयोग किया जा सके, लेकिन समस्या यह है कि मुझे नए डेवलपर्स या अन्य डेवलपर्स से डर लगता है जो घटकों से अनभिज्ञ हैं, बस आगे बढ़ेंगे और अपनी बात लिखो।

वैसे भी डेवलपर्स को घटकों को पुन: उपयोग करने के लिए याद दिलाना है / प्रलेखन में सुधार करना है या मौजूदा कोड को डुप्लिकेट करने और केवल अपने स्वयं के लिखने के बजाय अंतर्निहित घटक में योगदान करना है?

घटकों को आसानी से खोज-योग्य, आसानी से उपयोग करने योग्य कैसे बनाया जाए ताकि हर कोई इसका उपयोग करे?

मुझे लगता है कि प्रत्येक डेवलपर पुन: प्रयोज्य घटकों के लाभ के बारे में जानता है और उनका उपयोग करना चाहता है, यह सिर्फ इतना है कि हम उन्हें खोज करने योग्य नहीं जानते हैं। साथ ही, डेवलपर्स जब वे कोड लिख रहे हैं, तो उन्हें पता है कि उन्हें पुन: प्रयोज्य कोड लिखना चाहिए लेकिन ऐसा करने के लिए प्रेरणा की कमी।


6
केवल यह पूरा करने के लिए एक मौका होने दृष्टिकोण है कोड की समीक्षा
कुटकी

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

@Euphoric: +1, और अधिक सहमत नहीं हो सके
Andrzej Bobak

2
@ कामुक, यह कुछ ऐसा है जो मैं करूँगा, लेकिन यह गारंटी नहीं देता कि लोग इसका उपयोग करेंगे
Graviton

3
मुझे लगता है कि विज़ुअल स्टूडियो कैसे डुप्लिकेट कोड से बचने में मदद कर सकता है? डुप्लिकेट नहीं है, क्योंकि यह अधिक विशिष्ट शब्द के रूप में है, लेकिन इसका वास्तव में अच्छा उत्तर है जो वास्तव में यहां लागू है।
जनवरी हडेक

जवाबों:


10

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

मैं यूफोरिक की टिप्पणी से भी सहमत हूं। विभिन्न परियोजनाओं के बीच कुछ भी पुन: उपयोग करना अक्सर असंभव होता है (आमतौर पर सभी सीआरयूडी ऑपरेशन समान दिखते हैं, लेकिन आमतौर पर आप उन्हें पुन: उपयोग नहीं कर सकते हैं)।


आपको एक उचित दस्तावेज की आवश्यकता है। इसे खोजने और नेविगेट करने में आसान होना चाहिए - इसके लिए कोई टूल सुझाव?
ग्रैविटॉन

2
संगम? विकी? Javadoc सामग्री के साथ अच्छी ऑटो-जेनरेट की गई साइट? डेवलपर का गाइड दस्तावेज़? प्रत्येक डेवलपर को दस्तावेज की सामग्री के साथ जानने के लिए समय बिताना चाहिए और हस्ताक्षर करना चाहिए कि वह सामग्री से परिचित है।
आंद्रेज बोबाक

आपने कोई भी उपयोग किया है जो आपको लगता है कि उपयोगी है?
ग्रैविटॉन

मैंने संगम का इस्तेमाल किया। इसने मेरे लिए काम किया।
आंद्रेज बोबाक

5

पहले से उल्लेखित कारकों "प्रलेखन" के अलावा, "खोजने और नेविगेट करने में आसान", "अनुशासन" और "कोडरेव्यू"

पुन: प्रयोज्य कोड होना चाहिए

  • प्रयोग करने में आसान (= उदाहरणों की आवश्यकता है)
  • अन्य मॉड्यूल के लिए बहुत अधिक निर्भरता के बिना और
  • यह एक स्थिर एपीआई होना चाहिए, इसलिए मुझे पुस्तकालय का उपयोग करने के लिए अपने एप्लायंस को अपडेट करना होगा।

अंतिम दो वस्तुओं के बिना "कॉपी एंड पास्ट-इनहेरिटेंस" का उपयोग करना बहुत आसान है जो हम नहीं चाहते हैं।


4

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

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


मुझे लगता है कि हर कोई पुन: प्रयोज्य घटकों के लाभ के बारे में जानता है और उनका उपयोग करना चाहता है, यह सिर्फ इतना है कि हम यह नहीं जानते कि इसे कैसे खोजा जा सकता है। साथ ही, डेवलपर्स जब वे कोड लिख रहे हैं, तो उन्हें पता है कि उन्हें पुन: प्रयोज्य कोड लिखना चाहिए लेकिन ऐसा करने के लिए प्रेरणा की कमी।
ग्रेविटॉन

इन परियोजनाओं की लिस्टिंग के लिए हमारे पास एक विकी है, लेकिन मुझे यह स्वीकार करना होगा कि ज्यादातर लोग बस दूसरे से बात करते हैं। यह पता लगाने के लिए कि वास्तव में एक घटक में डालने लायक क्या है, आपको कोड-समीक्षाएं करनी होंगी। और अगर आपको पता चला कि कौन सा कोड बहुत बार डुप्लिकेट है, तो मैं एक परियोजना की घोषणा करता हूं और इसे डेवलपर को देता हूं, जिसने कोड लिखा था।
नियमित जॉन

4

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

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

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


4

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

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

एक चीज जो हमने की थी, मेरी राय में, स्थिति में बहुत सुधार हुआ, एक चीज का परिचय जिसे हम लाइटनिंग वार्ता कहते हैं । जब भी कोई ऐसा कोड लिखता है जिसे वह या वह मानता है कि टीम को पता होना चाहिए, एक छोटी (आमतौर पर 5-15 मिनट) प्रस्तुति की व्यवस्था की जाती है। हम हर हफ्ते एक बार ऐसा करने की कोशिश करते हैं। एप्लिकेशन की नींव के बारे में बात करने और उसके बारे में बात करने के लिए, नई सुविधाओं और जटिल समस्याओं को संभालने के तरीकों से लेकर, हाल ही में सामने आए विभिन्न तरीकों तक की जाँच होती है।

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

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

जोड़ी प्रोग्रामिंग भी ज्ञान परिसंचरण को काफी तेज करती है।


0

मुझे लगता है कि यह वास्तव में एक में दो प्रश्न हैं - मैं दोनों का उत्तर देने की कोशिश करूंगा।

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

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

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

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

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

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


0

IMMO इसकी डॉक्यूमेंटेशन या टूल्स नहीं है, कुंजी कम्युनिकेशन है। 10+ डेवलपर्स इसके बहुत सारे लोग नहीं हैं, कुछ चीजें जो इस संचार को बेहतर बनाती हैं:

  • जोड़ी प्रोग्रामिंग: दो लोगों के साथ और अधिक परिवर्तन होते हैं कि दोनों में से एक को पता है कि समस्या परियोजना के दूसरे हिस्से में पहले से ही हल हो गई है और इसका पुन: उपयोग करें।

  • सामूहिक कोड स्वामित्व: सभी लोग सिस्टम के विभिन्न हिस्सों के साथ काम करते हैं, इस तरह से यह बहुत आसान है कि वे जानते हैं कि यह कुछ पहले से ही परियोजना के दूसरे हिस्से में किया गया है, मेरे लिए यह एक टीम में मौलिक अभ्यास है।

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

  • वार्ता और कार्यशालाएँ बनाएँ: डेवलपर्स वार्ता और कार्यशालाओं के लिए समय आरक्षित करें, डेवलपर्स अपनी पुस्तकालयों के बारे में बात कर सकते हैं या शायद आप रिफ्लेक्टर कार्यशालाएं कर सकते हैं और कुछ डुप्लिकेट कोड ले सकते हैं और पुन: प्रयोज्य घटक बनाने वाले दोहराव को हटा सकते हैं।

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


-1

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


-3

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

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

इस तरह आप वास्तविक उदाहरण देकर दिशानिर्देशों और सर्वोत्तम प्रथाओं के उपयोग को मजबूर कर सकते हैं जो सीधे प्रोग्रामर द्वारा उपयोग किए जा सकते हैं।

स्निपेट प्रबंधन के लिए कई उपकरण हैं, मैं इसे सुझाता हूं: http://www.snip2code.com

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

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