क्या डेवलपर्स को वास्तविक कार्यक्रम से पहले एक आंतरिक पुस्तकालय संकलित करने की उम्मीद की जानी चाहिए?


10

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

क्या वरिष्ठ डेवलपर के पास एक वैध तर्क है? या डेवलपर्स को इनकैप्सुलेशन के मूल दर्शन और यहां तक ​​कि पुस्तकालय को पहले स्थान पर रखने के लिए पुस्तकालयों स्रोत कोड रन काउंटर को पढ़ने की आवश्यकता है?

जवाबों:


15

इस वरिष्ठ डेवलपर का तर्क मेरे लिए कोई मायने नहीं रखता है।

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

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

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


मैं दूसरा, आप आसानी से उपयोग किए जा रहे पुस्तकालय संस्करण के स्रोत को लाने में सक्षम होना चाहिए। पृथ्वी पर आपको पुस्तकालय के "अंतिम रक्तस्रावी किनारे संस्करण" की आवश्यकता क्यों है? यह सिर्फ परियोजना में संभावित एन्ट्रापी जोड़ता है ..
jlemos

1
मैं केवल आंशिक रूप से सहमत हूं। IMHO यह देयता के लिए विकास नीति पर निर्भर करता है। यदि परिवाद किसी दूसरी टीम के सक्रिय विकास के अंतर्गत है, तो आप 100% सही हैं। यदि वर्तमान टीम में से किसी के द्वारा भी lib को बदला जा सकता है और यदि नीति यह है कि lib को किसी भी तरह से पीछे की ओर रखा जाना चाहिए, तो हमेशा नवीनतम संस्करण का उपयोग करने से एकीकरण समस्याओं को और अधिक जल्दी पहचानने में मदद मिलती है, जो कि एक अच्छी बात है।
डॉक्टर ब्राउन

डॉक्टर ब्राउन - मैं सहमत हूं। मेरा जवाब इस तथ्य पर आधारित था कि प्रश्न को इस तरह से अभिव्यक्त किया गया था कि गेट और संकलन की आवश्यकता का एकमात्र कारण था ताकि डेवलपर्स स्रोत कोड पढ़ सकें।
17 की 26

4

सुझाव है

यदि आवश्यक कार्यक्षमता उपलब्ध है, तो यह निर्धारित करने के लिए लाइब्रेरी के स्रोत कोड को पढ़ने वाले क्लाइंट-साइड डेवलपर्स द्वारा हम समय बचा सकते हैं

आप एक वैकल्पिक सुझाव दे सकते हैं

हम किसी व्यक्ति को लाइब्रेरी में दस्तावेज देकर यह बता सकते हैं कि कार्यक्षमता क्या है।


यह कोशिश की गई और तर्क यह था कि पुस्तकालय के डेवलपर्स नई सुविधाओं को जोड़ने में बहुत व्यस्त थे।
rjzii

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

3

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

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


1

मैं एक बड़ी सॉफ्टवेयर कंपनी के लिए काम करता था जो आंतरिक व्यापार प्रणालियों के साथ अपने स्वयं के सॉफ़्टवेयर को लगातार "डॉगफूडिंग" कर रही थी।

उन्होंने इसे परीक्षण के एक और स्तर के रूप में देखा।

कि मैं एक कंपनी के लिए सहमत हूं, एक अच्छी बात है।

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


यह उत्पादों के हिस्से के रूप में तैनात है; हालाँकि, मैं इसे दो कोणों से संबोधित करने की कोशिश कर रहा हूँ: डेवलपर्स अपनी मशीनों और निरंतर एकीकरण सर्वर पर काम कर रहे हैं।
rjzii

1

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

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


1

चूँकि इतने सारे लोगों ने उत्तर दिया कि इसका कोई मतलब नहीं है कि हर कोई एक आंतरिक पुस्तकालय का निर्माण करे, मैं इसके विपरीत दृष्टिकोण प्रस्तुत करूँगा जो कारणों को सही ठहरा सकता है:

  1. आप लाइब्रेरी का बहुत उपयोग करते हैं और कोई दस्तावेज नहीं है। इसलिए सभी के पास संदर्भ के लिए स्रोत होना चाहिए। यदि यह एक पुस्तकालय है जो बहुत बार उपयोग किया जाता है, तो संदर्भ का काम करना उपयोगी हो सकता है

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

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

मैं यह नहीं कह रहा हूं कि उनका निर्णय उचित है, बस यह इंगित करते हुए कि क) प्रश्न कहानी का एक पक्ष प्रस्तुत करता है और ख) प्रशंसनीय उद्देश्य हो सकता है।


1

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

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

... समय की बचत होती है क्योंकि वे पुस्तकालयों स्रोत कोड को यह निर्धारित करने के लिए पढ़ सकते हैं कि क्या आवश्यक कार्यक्षमता उपलब्ध है

काफी कम तर्क। जब सबसे हालिया संस्करण लाइब्रेरी सबसे हाल के संस्करण परियोजना के साथ संकलित करने में विफल रहता है, तो उसके लिए कई विभिन्न कारण हो सकते हैं - बस लिबर सोर्स कोड में ड्रिलिंग करना समय की बर्बादी हो सकती है।

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

रीज़निंग मिसिंग के ऊपर एक और बात अपरिहार्य है (और मेरे अनुभव में काफी दर्दनाक है) उत्पादकता में कमी जो तब आती है जब किसी को विकास और क्यूए गतिविधियों के बीच स्विच करके प्रवाह को तोड़ना पड़ता है ।


जब टीम में परीक्षक होते हैं, तो ऐसी चीजें वास्तव में सरल होती हैं और इन्हें बहुत आसानी से हैंडल किया जा सकता है। मूल रूप से आपके "वरिष्ठ" डेवलपर ने आपको परीक्षण की आवश्यकता का मसौदा तैयार किया है।

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

वहाँ से आगे बढ़ने के चरण विशिष्ट क्यूए गतिविधियाँ हैं: आवश्यकता विवरणों को स्पष्ट करें, एक औपचारिक परीक्षण परिदृश्य डिज़ाइन करें, परीक्षण विफलताओं को कैसे संभालना है, इस पर बातचीत करें।

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

0

श्री देव जो सुझाव दे रहे हैं वह मेरे लिए सबसे अच्छा है। स्रोतों को ब्राउज़ करने में सक्षम होना अच्छा है, लेकिन ऐसा करने के लिए बेहतर तरीके हैं।

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

यदि आपको बहुत नवीनतम कोड की आवश्यकता है, तो आप केवल संस्करण स्नैपशॉट तैनात कर सकते हैं।


मावेन को एक रिपॉजिटरी के रूप में इस्तेमाल किया जा रहा है और परियोजना के अधिकांश या तो निर्भरता प्रबंधन के लिए या आईवी का उपयोग करते हैं।
rjzii

@ आरओबीजेड आप आर्टिफैक्ट्री या नेक्सस जैसे केंद्रीय विरूपण साक्ष्य रेपो का उपयोग नहीं करते हैं?
smp7d

हम आर्चीवा का उपयोग कर रहे हैं।
rjzii

@RobZ ठीक है, तो आप src जार को तैनात करने और IDE में लाइब्रेरी से जुड़ने के लिए संभवतः अपने पॉम सेट कर सकते हैं यदि यह स्वचालित रूप से ऐसा नहीं करता है। देखें maven.apache.org/plugins/maven-source-plugin
smp7d

0

यह केवल आपकी बिल्ड स्क्रिप्ट में होना चाहिए:

  1. जांचें कि नया संस्करण उपलब्ध है या नहीं। 2 छोड़ें अन्यथा।
  2. डाउनलोड करें और इसे संकलित करें और जो भी उपकरण आपके पास हैं, उन्हें स्थानीय स्तर पर स्रोत कोड से एक एपीआई संदर्भ उत्पन्न करना होगा। परिवर्तन लॉग दिखाएं।
  3. अपना ऐप बनाएं

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


निरंतर एकीकरण सर्वर के दृष्टिकोण से, पुस्तकालय स्वयं छोटा नहीं है और निर्माण के लिए कुछ मिनट लगते हैं।
rjzii

@ रोब: तो? जब तक पुस्तकालय में बदलाव नहीं होता है, तब तक आपको इसके पुनर्निर्माण की आवश्यकता नहीं है, क्या आप?
192 में बैक

अभी यह सक्रिय विकास के अधीन है।
rjzii

@RobZ: हाँ, शायद ऐसा है, लेकिन अगर लाइब्रेरी टीम हर 10 मिनट में एक संस्करण को टैग कर रही है तो वे इसे गलत कर रहे हैं। निरंतर एकीकरण एक अच्छी बात है, लेकिन एक रिलीज में किसी प्रकार की प्रयोज्य परीक्षण शामिल होना चाहिए। पुस्तकालय के मामले में, यह एक कोड समीक्षा है। यह स्वचालित नहीं हो सकता। हालाँकि, आपको अंतिम समीक्षा और टैग किए गए संस्करण को प्राप्त करने की प्रक्रिया स्वचालित हो सकती है, और यदि समीक्षा ठीक से की जाती है और टैगिंग जिम्मेदारी से की जाती है, तो मुझे एक मुद्दा नहीं दिखता है, लेकिन वास्तव में एक वृद्धि है।
back2dos
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.