2008-09-28 12 views
15

कुछ साल पहले मुझे कोड पुन: उपयोग में एक अध्ययन के बारे में बताया गया था। स्पष्ट रूप से यह पाया गया कि औसतन, प्रोग्रामर के पास 7 मिनट की खिड़की होती है जब पुन: उपयोग करने के लिए कोड की खोज होती है। अगर उन्हें उस विंडो में उनकी जरूरतों के अनुरूप कोड नहीं मिलता है तो वे स्वयं लिखेंगे।कोड पुन: उपयोग को अधिकतम करने के लिए आप किस तकनीक का उपयोग करते हैं?

यह आपके कोड को ध्यान से प्रबंधित करने के लिए सावधानीपूर्वक प्रबंधित करने की आवश्यकता के संदर्भ में प्रस्तुत किया गया था ताकि आप यह सुनिश्चित कर सकें कि आपको खिड़की के भीतर क्या चाहिए।

आप (व्यक्तियों और संगठन) अपने स्रोत का पुन: उपयोग करने के लिए कैसे अपना स्रोत प्रबंधित करते हैं? क्या आप विशेष रूप से पुन: उपयोग पुस्तकालय बनाए रखते हैं? और यदि हां, तो आप अपनी हिट दर को अधिकतम करने के लिए इसे कैसे अनुक्रमित करते हैं?

उत्तर

10

एक जटिल प्रश्न:

  • कोड के कुछ भागों पुस्तकालयों या एपीआई के रूप में सामान्यीकृत किया जा सकता। हमारे पास एक आम पुस्तकालय है जो सामान्य समस्याओं के समाधान के साथ अद्यतित है। आमतौर पर: सत्यापन, कैशिंग, डेटा एक्सेस क्लासेस, लॉगिंग, आदि ...

  • कुछ हिस्सों में एप्लिकेशन विशिष्ट हैं। उन्हें आसानी से सामान्यीकृत नहीं किया जा सकता है। हम उन्हें हाउटोस में परिवर्तित करते हैं और आंतरिक प्रस्तुतियां देते हैं। कोड को आसानी से ब्राउज़ करने योग्य एससीएम (हमारे मामले में एसवीएन) के उपयोग से भी पुनर्नवीनीकरण किया जाता है।

  • हमारे पास ऐसे उपकरण भी हैं जो कोड उत्पन्न करते हैं कि एक हाथ को पुनर्नवीनीकरण नहीं किया जा सकता है, दूसरी तरफ यह हमेशा समान होता है (संग्रहीत प्रक्रिया को कॉल करना)।

  • जोड़ी प्रोग्रामिंग मौजूदा समाधानों के ज्ञान को फैलाने का भी एक उपयोगी तरीका है। हम जब संभव हो या उचित उपयोग करते हैं।

  • अंतिम तकनीक शिक्षण है। प्रत्येक कोडर के पास एक शिक्षक है जिसका संदर्भ है। चूंकि शिक्षक कम हैं, उनके बीच बहुत सी साझाकरण है और इस ज्ञान को शीर्ष तरीके से फैलाया जा सकता है।

4

अविश्वसनीय रूप से रिएक्टर और सर्वोत्तम के लिए आशा करते हैं।

अद्यतन (4 साल बाद और उम्मीद है कि समझदार)

  • S.Lott की टिप्पणी की तरह कहते हैं: नामकरण पर ध्यान दें। टीम में सभी 'committers' शब्द को फैलाओ। अच्छे नाम चीजों को खोजने योग्य बनाते हैं और इस प्रकार नकल को कम कर देते हैं।
  • कुछ करने का एक तरीका है और इसे स्वीकार्य और खोजने योग्य रखें।
  • औसत (एलसीडी) प्रोग्रामर के लिए कोड लिखें .. चालाक न हों जहां सरल पर्याप्त होगा। (इसमें डिज़ाइन-पैटर्न जूता-सुबह की मजबूती और संबंधित विकार शामिल हैं)
  • सम्मेलनों, शैलियों, दिशानिर्देशों, मानकों, आदि के सामान्य सेट को अपनाना। टीम के भीतर खरीददारी और इस तरह अनुपालन सुनिश्चित करें। (इसका मतलब है कि हर कोई टैब (या रिक्त स्थान) का उपयोग करता है!)। इससे कोई फर्क नहीं पड़ता कि आप क्या चुनते हैं - लक्ष्य यह है कि कोड को लगातार
  • एक द्वारपाल (टीम द्वारा सम्मानित) होना चाहिए, जो लाल झंडे के लिए सभी चेक-इन को नजरअंदाज करता है।
  • कोड परीक्षण-पहले/बाहर-इन लिखें। यह आमतौर पर सुनिश्चित करता है कि आपका कोड एकाधिक ग्राहकों द्वारा प्रयोग योग्य है।(संदर्भ-स्वतंत्रता पर GOOS की बुलेट देखें)
+0

रिफैक्टर सामग्री के लिए अच्छे नाम। यह कहां से आया था या यह क्या करने के लिए उपयोग किया जाता था, या वर्तमान में इसका उपयोग कहां किया जाता है, लेकिन वास्तव में यह क्या है। –

1

TDD का उपयोग करने का प्रयास करें यदि आप पहले से ही मेरा प्रारंभिक repsonse नहीं हैं।

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

एक और लाभ, टीडीडी के पास चक्र के हिस्से के रूप में नकल (रिफैक्टरिंग) को हटाने के लिए एक कदम है।

इसके अलावा, परीक्षण आपके कोड प्रलेखन का हिस्सा बनते हैं, इस प्रकार डुप्लीकेट व्यवहार की पहचान करना आसान बनाते हैं।

2
  • एक ढांचा है जो सक्रिय रूप से समर्थित है।

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

  • दस्तावेज़, दस्तावेज़, दस्तावेज़। अनियंत्रित कोड पुन: उपयोग के लिए बेकार है क्योंकि यह अपने आंतरिक कार्यों को समझने के लिए बहुत लंबा रास्ता लेता है।

  • अच्छे इंटरफेस हैं। आसान प्रकार, आसान संरचनाएं या कक्षाएं। जितना अधिक जटिल कुछ है, उतना कम इसका इस्तेमाल किसी अन्य प्रोजेक्ट में किया जाएगा।

  • पुन: प्रयोज्य कोड को अनुकूलित और डीबग करें। एन-वें समय के लिए अन्य लोगों के कोड में बग का अनुभव करने वाले डेवलपर्स पहले से ही मौजूदा कोड को कोड कोड करना शुरू कर देंगे।

1

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

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

1

संपूर्ण एप्लिकेशन को प्रोफ़ाइल करें और कोड के भारी अनुभाग से रीफैक्टरिंग शुरू करें।

जो स्मृति लीक, बार-बार कॉल, लंबा कॉल, unfreed स्मृति, विमुखता वाला संसाधनों आदि की पहचान के लिए क्षमता है एक रूपरेखा उपकरण का उपयोग करें (समय के 80% सबसे अधिक इस्तेमाल किया कोड के 20% पर खर्च) ,.

नियम के अनुसार, नया कोड हमेशा सर्वोत्तम अभ्यास का उपयोग करता है।

0

आप कैसे (व्यक्तियों और संगठन) को पुन: उपयोग करना आसान बनाने के लिए अपने स्रोत का प्रबंधन करते हैं? क्या आप विशेष रूप से पुन: उपयोग पुस्तकालय बनाए रखते हैं? और यदि हां, तो आप अपनी हिट दर को अधिकतम करने के लिए इसे कैसे अनुक्रमित करते हैं?

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

  1. पुनर्प्रयोग गाड़ी कोड।
  2. ऐसे कोड का पुन: उपयोग करना जो अलग-अलग ज़रूरतों की इतनी विस्तृत श्रृंखला को संतुलित करता है कि यह आपकी खुद की जरूरतों को मुश्किल से संतुष्ट करता है और आपको अंततः एक अजीब और अक्षम समाधान प्राप्त करने के लिए बहुत सारे हुप्स से कूदने की आवश्यकता होती है।
  3. कोड को पुन: उपयोग करने के लिए जो लगातार डिजाइन में परिवर्तन की आवश्यकता होती है और एक प्रकार के बहिष्कार के माध्यम से जाती है जिसके लिए आपको हर 6 महीने का उपयोग करके कोड को फिर से लिखना आवश्यक होगा, अगर आप केवल आधा घंटे में समाधान को लागू कर सकते हैं तो डॉन ' भविष्य में डिज़ाइन परिवर्तनों की आवश्यकता नहीं है क्योंकि यह केवल आपकी सटीक आवश्यकताओं की पूर्ति कर रहा है।
  4. विदेशी दिखने कोड से भरा एक codebase मुहावरेदार और परिचित तरीकों से भाषा और मानक पुस्तकालय के और अधिक का उपयोग करता है, भले ही वह थोड़ा अधिक कोड की आवश्यकता है एक से अधिक अवांछनीय है।
  5. डेवलपर्स एक-दूसरे के पैर की उंगलियों पर कदम उठाते हैं क्योंकि वे दोनों एक ही डिजाइन में असंगत परिवर्तन करना चाहते हैं, जबकि लड़ाई और बहस और बदलाव करना जिससे एक-दूसरे के कार्यान्वयन में बग अवांछनीय हो।
  6. निर्भरता बहुत सारी फेंकने डिजाइन कि खुद साबित नहीं किया अपरिपक्व (नहीं पूरी तरह से परीक्षण कवरेज, समय वास्तव में डिजाइन soundproof और यकीन है कि यह प्रभावी ढंग से आगे डिजाइन में परिवर्तन की आवश्यकता के बिना संतुष्ट उपयोगकर्ता के अंत की जरूरत बनाने के लिए नहीं था) अवांछनीय है ।
  7. कुछ सरल लिखने के लिए सबसे जटिल निर्माण स्क्रिप्ट के साथ पुस्तकालयों और कक्षाओं/कार्यों के बोतलबंद को शामिल/आयात/लिंक करना अवांछनीय है।
  8. सबसे अधिक, इस तरह से कोड का पुन: उपयोग करना जो कि इसे पुन: उपयोग करने से कम और लंबे समय तक दोनों में अधिक समय तक अवांछित है, अवांछित है।

उम्मीद है कि हम कम से कम इन बिंदुओं पर सहमत हो सकते हैं। अत्यधिक उत्साही सहयोगियों से कोड पुन: उपयोग करने के साथ मुझे मिली समस्या यह थी कि यह अक्सर ऊपर की एक या अधिक समस्याओं का कारण बनता है। यह सीधे कोड पुन: उपयोग के लिए उत्साह है कि मौलिक समस्या थी नहीं था, लेकिन परिपक्व हैं कि प्राथमिकताओं परीक्षण कवरेज कोड पुन: उपयोग करने के बजाय, ध्वनिरोधन डिजाइन की ओर विषम थे, यकीन है कि चीजों को बनाने के लिए पर्याप्त से पहले हम उन्हें पागल की तरह पुन: उपयोग, और इतना आगे।

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

आप कैसे (व्यक्तियों और संगठन) को पुन: उपयोग करना आसान बनाने के लिए अपने स्रोत का प्रबंधन करते हैं? क्या आप विशेष रूप से पुन: उपयोग पुस्तकालय बनाए रखते हैं? और यदि हां, तो आप अपनी हिट दर को अधिकतम करने के लिए इसे कैसे अनुक्रमित करते हैं?

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

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

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

संबंधित मुद्दे

 संबंधित मुद्दे