अपने तीसरे पक्ष के पुस्तकालयों को कैसे रखें?


28

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

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

तुमने इसे कैसे संभाला? कुछ संभावित दृष्टिकोण:

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

1
+1: मुझे आश्चर्य है कि अगर "बग हंट" पसंद है, तो आप एक प्रोजेक्ट में "अपडेट स्प्रिंट" का पुनरावृत्ति कर सकते हैं। उत्तर के बारे में उत्सुक :)
मथिउ

जवाबों:


25

मैं हैरान हूँ - और वास्तव में हैरान - जवाब की संख्या पर यहाँ कह रही है "जब तक आपके पास अपडेट न हो"। मैंने ऐसा किया है, और छोटी अवधि में यह आसान होने के बावजूद, यह लंबे समय में नरक की तरह जलता है। अधिक लगातार, छोटे अपडेट बहुत अधिक होते हैं, कभी-कभी बड़े लोगों की तुलना में प्रबंधन करना आसान होता है, और आपको नई सुविधाओं, बग फिक्स, और जल्द ही लाभ मिलता है।

मैं इस विचार को नहीं खरीदता कि लाइब्रेरी परिवर्तन कोड परिवर्तनों की तुलना में परीक्षण करना अधिक कठिन है। यह सिर्फ एक ही है - आप कोडबेस में बदलाव कर रहे हैं, और आपको इसे जारी करने से पहले इसे सत्यापित करने की आवश्यकता है, और इससे पहले कि आप इसे जारी करें। लेकिन आपके पास पहले से ही यह करने की प्रक्रिया होनी चाहिए, क्योंकि आप कोड परिवर्तन कर रहे हैं!

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

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

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

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


3
+1। मैंने एक ऐसी परियोजना पर काम किया, जहाँ देवों ने "अगर इसे नहीं तोड़ा है, तो इसे ठीक न करें" नीति लागू की। तब हमें एक तीसरी पार्टी लाइब्रेरी के साथ एक मुद्दा मिला (अपेक्षाकृत मामूली लेकिन यह एक नई सुविधा के लिए आवश्यक था), जो कि केवल बहुत बाद के संस्करण में तय की गई थी, जो बदले में बहुत बाद के जेवीएम पर निर्भर थी। बाद के जेवीएम के साथ, हमने अन्य 3 पार्टी पुस्तकालयों के साथ मुद्दों को पाया, जिसे अब बदले में उन्नत किया जाना था। हमें अपना हार्डवेयर भी अपग्रेड करना पड़ा, क्योंकि ओरेकल के पास अब सोलारिस के लिए 32-बिट जेवीएम नहीं है। यह एक गड़बड़ थी और इतनी आसानी से केवल सामान को चालू रखने से रोका जा सकता था।
तीस

+1 के लिए "जबकि यह अल्पावधि में आसान है, यह लंबे समय में नरक की तरह जलता है"। मैंने दोनों दृष्टिकोणों का अनुभव किया है और जबकि कई छोटे अपडेट एक उपद्रव की तरह लग सकते हैं, उन्नयन का प्रदर्शन नहीं कर रहे हैं और फिर संस्करणों से 10 पुस्तकालयों को अपग्रेड करने के लिए जो 2 साल पुराने हैं, अक्सर किसी भी उचित समय में संभव नहीं है। आप एक ऐसी प्रणाली के साथ समाप्त होते हैं जो पुरानी और अनमनी पुस्तकालयों पर निर्भर करती है, आप कुछ अन्य पुस्तकालयों का उपयोग नहीं कर सकते क्योंकि उन्हें उस पुस्तकालय के एक नए संस्करण की आवश्यकता होती है जिसे आप अपग्रेड नहीं कर सकते हैं और कुछ बिंदु पर आप कुछ मुद्दों को ठीक करने की क्षमता खो देते हैं सब।
मिशैल कोस्मुलस्की

@firtydank मैं उत्सुक हूं कि आप लोगों ने इस तथ्य को हल करने के लिए क्या किया, क्या आपने कोई नई नीतियां लागू की हैं? संगठन में कार्यात्मक परिवर्तन क्या था?
बुद्धिपिछो

10

मैं मूल्यांकन करता हूं।

  • सबसे पहले मैं बग्स की तलाश करता हूं जो हमने उस पुस्तकालय के खिलाफ उठाए हैं और देखें कि क्या वे तय किए गए हैं।
  • दूसरी बात यह है कि हम उस परिवाद में किसी अन्य बग सुधार की तलाश करते हैं जिससे हम लाभान्वित हो सकते हैं (शायद कुछ ऐसा जो एक संभावित कोने का मामला है)।
  • तीसरा, मैं लिब / एपीआई में सुधार की तलाश करता हूं और फिर उस और बेन्फिट ट्रेडऑफ का उपयोग करने के लिए हमारे कोड को बदलने के प्रभाव की जांच करता हूं। मैं वास्तव में अपनी नई सुविधाओं का उपयोग किए बिना वास्तव में पिछले उन्नयन के कामों में बहुत अधिक है, मूर्खतापूर्ण वास्तव में!

मैं तो मौजूदा देयता के साथ रहने के खिलाफ है कि सभी का वजन।

हमेशा परीक्षण करें - उम्मीद है कि आपकी इकाई / एकीकरण परीक्षण यह सुनिश्चित करेंगे कि कोई बड़ी प्रतिगमन न हो।


7

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

यह आमतौर पर एक नया संस्करण जारी करते समय किया जाता है।

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


3

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


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

और ऊपर से मतदान :)
टिम पोस्ट

2

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

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


2

आपको पूछना होगा कि आप वास्तव में अपडेट से क्या चाहते हैं? अधिकांश सुरक्षा सुधार वास्तव में तुच्छ पैच हैं, फिक्सिंग के रूप में:

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

यदि आप पिछले पांच वर्षों में अधिकांश सीवीई को देखते हैं, तो उन्हें ठीक करने वाले पैच आमतौर पर काफी तुच्छ होते हैं, यदि आप खुले पुस्तकालयों का उपयोग कर रहे हैं, जो मुझे आशा है कि आप हैं।

फिर आपके पास वास्तविक बग फिक्स हैं, जो आप शायद चाहते हैं, लेकिन शायद आपने इसे पहले से ही तय कर लिया है। अगर यह टूटा नहीं है, तो इसे ठीक न करें।

अंत में, आपके पास नई सुविधाएँ हैं .. और शायद पदावनत सुविधाएँ। आपको उन रिलीज नोट्स की जांच करने और ध्यान से अलग करने की आवश्यकता है। क्या आप उनका उपयोग कर सकते हैं, भले ही वे एक एपीआई को तोड़ दें जो बहुत सारे अन्य सामान पर निर्भर करता है? यदि हाँ, यह सर्जरी का समय है .. यदि नहीं, तो चेरी को आप क्या चाहते हैं और आगे बढ़ें।

कुछ मुझसे असहमत हो सकते हैं, लेकिन मैं स्रोत कोड के बिना पुस्तकालय का उपयोग करने से इनकार करता हूं।


निश्चित रूप से मैं ओपन सोर्स लाइब्रेरियों को पसंद करता हूं, लेकिन मैं कुछ कमर्शियल लाइब्रेरियों का भी उपयोग करता हूं, जिनकी कीमत बिना सोर्स के 100 डॉलर या स्रोत के साथ $ 10k है, इसलिए ...
जूनास पुलकका

2

यह पुस्तकालयों जैसी चीज़ों के आधार पर भिन्न होता है, उनका उपयोग किस लिए किया जाता है, वे आपके कोड में कितने व्यापक हैं, नवीनीकरण करने के लिए लागत (समय और धन के संदर्भ में), और इसी तरह।

आदर्श रूप से आपके पास हमेशा नवीनतम सभी होते हैं, लेकिन यदि नया संस्करण पिछड़े-संगत नहीं है, तो क्या होगा? आपको भविष्य के रिलीज़ के लिए उस अपडेट को प्राप्त करना पड़ सकता है जब तक आप बदलाव को ध्यान से नहीं संभाल सकते। व्यवहार में कुछ सूक्ष्म परिवर्तन हो सकता है (जैसे कि "अब आपको कॉल करने की विधि X को कॉल करने की आवश्यकता है विधि Y, या आपको एक धीमी मेमोरी रिसाव") जो परीक्षण में सत्यापित करना मुश्किल है।

दूसरी ओर, नए संस्करण में कुछ गंभीर सुरक्षा सुधार हो सकते हैं, इसलिए आपको इसे भी ध्यान में रखना होगा।

लघु संस्करण: इसे केस-बाय-केस आधार पर लें।


1

यह आपकी रिलीज़ शेड्यूल पर निर्भर करेगा।

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

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

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

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


1

तोड़फोड़ करने वाले बाहरी

उस विशेषता में जो महान है वह यह है कि आप अपने इच्छित संशोधन को निर्दिष्ट कर सकते हैं।

कृपया ध्यान दें कि यदि आपके पास कई बाह्य उपकरण हैं, तो अपडेट धीमा हो जाएगा।


वास्तव में मैं उनका उपयोग कर रहा हूं, और वे बहुत उपयोगी हैं और बहुत धीमी गति से X-) लेकिन वे इस समस्या को हल नहीं करते हैं कि मुझे नए संस्करण में कब अपडेट करना चाहिए।
जूनास पुलका

वे बहुत धीमी हाँ कर सकते हैं। मैं आमतौर पर बाहरी पुस्तकालयों को अपडेट करता हूं जब: (एक बड़ी रिलीज या बग फिक्स जो मुझे प्रभावित करता है) उपलब्ध है और मैं पुनरावृत्ति के पहले भाग में हूं।

1

मैं वर्तमान में कुछ इस तरह स्थापित कर रहा हूँ:

  • मेरे आवेदन के प्रत्येक विस्तार के लिए 1 व्यापारिक रेपो
  • एक व्यापारी रेपो जो कई 3 पार्टी पुस्तकालयों के विशिष्ट संस्करणों को इकट्ठा करता है
  • ग्राफिक संसाधनों / कार्यों के लिए एक SVN रेपो (लेकिन कुछ और के लिए बदल सकता है)
  • मेरे आवेदन के लिए एक मर्क्यूरियल रेपो, जो कि 3 पीरी रेपो के विशिष्ट संस्करण और कुछ मूल एक्सटेंशन का उपयोग करने के लिए मर्क्यूरियल सबप्रॉप फ़ीचर का उपयोग करता है।

अब जब मुझे एक ऐसे एक्सटेंशन पर काम करने की ज़रूरत है जो "बेसिक" नहीं है (एप्लिकेशन रेपो में एक सबप्रॉप के रूप में शामिल है), मैं बस एक्सटेंशन फ़ोल्डर में रेपो को क्लोन करता हूं और सीएमके को पूरे एप्लिकेशन के लिए प्रोजेक्ट और समाधान उत्पन्न करने देता हूं।

इस तरह, मैं कर सकता हूँ:

  • 3 पार्टियों को क्लोन में बदलें, जांचें कि यह ऐप के साथ काम करता है, इसे 3 पीरी रेपो में पुश करें, फिर एप्लिकेशन रेपो के सबरेपो संस्करण को नए 3 पार्टी रेपो संस्करण में अपडेट करें
  • स्वतंत्र रूप से एक्सटेंशन पर काम करें, सभी एक साथ या बस कुछ विशिष्ट चुनें
  • परियोजनाओं को एक साथ जोड़ने के बारे में चिंता करने की ज़रूरत नहीं है, यह केवल Cmake द्वारा किया जाता है ताकि परियोजनाएँ सबप्रोजेक्ट पूरे एप्लिकेशन रेपो के साथ स्कैन की जा सकें।

इस संगठन के साथ अभी तक बहुत अनुभव नहीं है, लेकिन मुझे लगता है कि यह बहुत उपयोगी है।


1

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

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


1

मैं अपने तीसरे पक्ष के पुस्तकालयों को अद्यतित रखने के लिए NuGet का उपयोग करता हूं।

जब एक मित्र, सहकर्मी, या ब्लॉग मुझे सूचित करता है कि मेरी 3 पार्टी में से एक DLL पुराना है, तो NuGet इसे अपडेट करना बहुत आसान बनाता है।

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