क्या कोड में प्रतिदिन एक अच्छा अभ्यास करना / जाँच करना है?


63

मैं मार्टिन फ़ॉवेलर के कंटीन्यूअस इंटीग्रेशन पर पढ़ रहा हूं और वह "हर दिन हर व्यक्ति को मुख्य बातें" के रूप में सूचीबद्ध करता है।

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

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

प्रश्न: हर रोज एक अच्छा अभ्यास कर रहा है कि मुझे इसे बदलने के लिए अपने वर्कफ़्लो को बदलना चाहिए, या यह उचित नहीं है?

संपादित करें: मुझे लगता है कि मुझे यह स्पष्ट करना चाहिए था कि इसका मतलब सीवीएस (उर्फ "पुश") में "कमिट" था, क्योंकि संभावना है कि फाउलर का मतलब 2006 में होगा जब उन्होंने यह लिखा था।

^ आदेश अधिक मनमाना है और कार्य पर निर्भर करता है, मेरी बात समय अवधि और गतिविधियों को स्पष्ट करने के लिए थी, सटीक अनुक्रम नहीं।


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

4
क्या मार्टिन फाउलर एक ऐसा वीसीएस मान रहे हैं जो वितरित नहीं है?
user16764

4
उस लेख पर तारीख नोट करें: 1 मई, 2006। गिट और मर्क्यूरियल अप्रैल 2005 तक शुरू नहीं हुए थे , और मेरी धारणा यह है कि वे वास्तव में लगभग 2008 में कर्षण प्राप्त करना शुरू कर चुके हैं। मैं फाउलर की साइट पर कोई भी लेख नहीं पा सकता हूं जो संदर्भित करें 2009 से पहले या तो उनमें से एक। तो 2006 से इस लेख स्पष्ट रूप से SVN की तरह एक केंद्रीकृत स्रोत नियंत्रण प्रणाली मानता है। सलाह डीवीसीएस का उपयोग करने वाली टीमों पर लागू नहीं है।
क्युरेलसा

2
@Kyralessa: लेख में कहा गया है कि "तोड़फोड़ आधुनिक [संस्करण नियंत्रण प्रणाली]" है।
जुएल

4
पहले कोड और फिर परीक्षण?

जवाबों:


43

मैं इस नियम से सहमत नहीं हूं और मैसन व्हीलर ने जो कहा उससे मैं सहमत हूं। मैं कुछ विचार जोड़ना चाहूंगा।

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

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

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

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

बस मेरे 2 सेंट।

संपादित करें

समय से पहले आने का एक और कारण मेरे दिमाग में यह आया कि एक (बहुत) छोटी गाड़ी के संस्करण का परीक्षण नहीं किया जा सकता है। यदि आप ट्रंक पर कर रहे हैं और आपकी टेस्ट टीम हर दिन परीक्षण कर रही है, तो उनके पास कुछ घंटों (या एक दिन के लिए) का कोई परीक्षण योग्य संस्करण नहीं हो सकता है। यहां तक ​​कि अगर आप बग को ठीक करने की कोशिश नहीं करते हैं और केवल अपने परिवर्तनों को वापस करते हैं, तो एक पुनर्निर्माण में कुछ घंटों का समय लग सकता है। अपनी टीम में काम करने वाले पांच परीक्षकों के साथ, आपने निष्क्रियता के कारण टीम के समय के 5 x 2 = 10 घंटे बर्बाद कर दिए हैं। यह मेरे साथ एक बार हुआ था इसलिए मैं वास्तव में जितनी जल्दी हो सके प्रतिबद्ध के नाम पर समय से पहले से बचने की कोशिश करता हूं ।


23
A कमिट ’कोई not प्रकाशित’ नहीं है। 'कमिट' का अर्थ है 'स्नैपशॉट'; 'प्रकाशित' को scm-lingo में 'पुश' कहा जाता है। बेशक, SVN दोनों अवधारणाओं को एक में मिला देता है, जिससे कई समझदार वर्कफ़्लो असंभव हो जाते हैं, लेकिन यह उपकरण की एक सीमा है, सामान्य रूप से स्रोत नियंत्रण वर्कफ़्लो की नहीं।
tdammers

3
Revision control and data backup are two different thingsहां, मैं निश्चित रूप से इस तरह महसूस करता हूं।
स्लेज

1
@tdammers: मेरा मतलब अनौपचारिक तरीके से प्रकाशित करना था: जब तक कोड मेरे कंप्यूटर पर है, यह आम कोड में मेरे निजी परिवर्तन हैं। जैसे ही मैं इसे करता हूं, इसे प्रकाशित किया जाता है, बाकी टीम और आधिकारिक परियोजना के इतिहास के हिस्से के लिए जाना जाता है।
जियोर्जियो

1
उस स्थिति में, 'प्रतिबद्ध' शायद गलत शब्द है। कई SCM के स्थानीय कमिट की अनुमति है, और बाकी टीम के साथ अपना कोड साझा करना एक अलग कार्रवाई है, जिसे आमतौर पर 'पुश' कहा जाता है। फिर, एसवीएन दो अवधारणाओं को एक साथ जोड़ देता है, लेकिन यह उपकरण की एक सीमा है, और अगर यह आपके वर्कफ़्लो के रास्ते में हो जाता है, तो एक अलग SCM पर स्विच करने पर विचार करें।
tdammers

@tdammers: स्थानीय प्रतिबद्ध और प्रकाशित के बीच एक स्पष्ट अंतर रखने के लिए एक कदम आगे होगा। एसवीएन में मैं उसके लिए एक अलग शाखा का उपयोग कर सकता हूं। लेकिन फिर, मुझे आश्चर्य है कि मैं एक संशोधन का ट्रैक क्यों रखना चाहूंगा जो मेरे लिए बहुत मायने नहीं रखता है? मुझे यकीन नहीं है कि मैं एक नया संशोधन (यहां तक ​​कि एक निजी भी) चाहता हूं, क्योंकि यह 5 बजे की घड़ी है और मैं घर जा रहा हूं। मैं इसके बजाय एक बैकअप रखना पसंद करता हूं।
जियोर्जियो

107

मैं दिन में कई बार कोड करता हूं । जब भी मैं किसी ऐसे बिंदु पर पहुँचता हूँ जहाँ कोड संकलन के लिए पर्याप्त है और अन्य चीजों को नहीं तोड़ता है, तो यह अंदर चला जाता है।

आपको अपना काम तोड़ते हुए देखना चाहिए ताकि आप दिन में कुछ बार सुरक्षित रूप से चेक-इन कर सकें।

इसके लिए तर्क दो हैं:

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

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

14
@MasonWheeler - 3 दिनों के बाद जो काम नहीं किया गया है, एक बहुत अच्छा मौका है कि एक ने उस कोड को छुआ है जो दूसरों के पास एक ही समय में है। यदि आपके पास ऐसा करने वाले प्रोग्रामरों का एक समूह है, तो सबसे अच्छा प्रोजेक्ट मैनेजर इवेंट को होने से रोक नहीं सकता है।
ऊल जूल

3
@Oded: हो सकता है। मुझे लगता है कि मेरी प्रतिक्रिया मेरे कोडबस पर मेरे अनुभव से रंगीन है कि हमारे डेवलपर्स (लगभग एक दर्जन कोडर टीम पर) सभी गैर-अतिव्यापी जिम्मेदारियां रखते हैं। यह निश्चित नहीं है कि यह छोटी परियोजनाओं पर कितना भिन्न होगा।
मेसन व्हीलर

3
@ArtB - अगर कोई ऐसा हो जो अपने आप में ऐसा हो जो केवल हर 3 दिनों में जाँच करता हो? या सप्ताह में एक बार? आप सही काम करने के लिए दूसरों पर भरोसा कर रहे हैं।
Oled

3
जब मैंने प्रश्न पढ़ा, तो मेरी प्रतिक्रिया थी "क्या यह पूछना है कि क्या हर हफ्ते स्नान करना अच्छा है"?
एंड्रयू ग्रिम

39

किसी भी कार्यप्रणाली या अभ्यास का धीरे-धीरे पालन करना, इसके पीछे के कारणों को समझे बिना कभी भी अच्छा विचार नहीं है। यहीं से कार्गो-पंथ प्रोग्रामिंग आती है।

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

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


1
फिर अगर यह जटिल सुविधा एकीकरण / विकास है, तो यह अभी भी एक बड़ा नुकसान है कि इसे नहीं करना है, शायद ट्रंक को नहीं, लेकिन कम से कम इस सुविधा के लिए एक शाखा में, जो कि शाखाएं हैं!
विंसेंट बी।

2
आपका क्या मतलब है 'लायक जाँच'? यदि यह किसी और के कोड को नहीं तोड़ता है, तो आप इसे जांच क्यों नहीं करेंगे?
कर्क ब्रॉडहर्स्ट

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

3
+1। मैंने एक बार एक टीम में काम किया था जहाँ हमें हर दिन vcs में कोड की जाँच करनी थी, भले ही वह कोड स्पाइक या बेकार जाँच हो। यह अक्षम और बेकार साबित हुआ, विशेष रूप से क्योंकि इसमें vcs को साफ करने के लिए आवधिक रखरखाव की आवश्यकता थी। यह संभावित रूप से कुछ को फिर से करने के लिए थोड़ा समय खोने के कारण व्यामोह के संयोजन के कारण था, और क्योंकि प्रबंधक ने एक किताब में पढ़ा था कि आपको हर दिन प्रतिबद्ध होना चाहिए। एक चरम उदाहरण शायद, लेकिन गंभीरता से, यदि आपने यह जानने का निर्णय नहीं लिया है कि क्या यह कुछ "जाँच" करने के लायक है, तो आप शायद नौकरी के अनुकूल नहीं हैं।
S.Robins

14

ओड ने कोड को कम से कम करने के लिए दो महत्वपूर्ण कारण दिए। मैं कुछ और जोड़ूंगा:

  1. अपने कोड ऑफ कोड पर काम करते समय, अन्य को उस कोड पर कुछ कार्यों की आवश्यकता हो सकती है। उन्हें इसे प्राप्त करने के लिए 6 दिनों तक इंतजार नहीं करना चाहिए। इस मामले में मेरे सहकर्मी आमतौर पर मेरे कोड ऑफ पीस में एक प्रोटोटाइप बनाते हैं, इसे कमिट करते हैं, मैं बॉडी को जोड़ता हूं और फिर से कमिट करता हूं। और यह आमतौर पर कुछ घंटों में किया जाता है।

  2. 'आम' कोड हर किसी के लिए जितनी जल्दी हो सके हर बदलाव को देखने के लिए है। यदि आप जिस कोड पर काम कर रहे हैं, वह दूसरों के काम से पूरी तरह से अलग है और आपके पास उनका इंतजार नहीं होगा, तो आपको काम करने के लिए एक शाखा बनाने की सिफारिश की जाती है, और फिर, अगर सब कुछ सफल होता है, तो इसे मर्ज करें मेनलाइन।


1
(IMO) केवल सही और सटीक उत्तर (बिंदु 2) के साथ इस उत्तर को इतना कम क्यों दर्जा दिया गया है! बेशक यह एक शाखा की बात है! @ मेसन व्हीलर: तो आप एक ही समय में एक कच्चे में कई दिनों तक कोडिंग का आनंद लेते हैं? फिर एक संस्करण नियंत्रण प्रणाली का उपयोग क्यों?!
विंसेंट बी।

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

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

8

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

  • क्या वे निर्माण तोड़ते हैं?
  • क्या आप किसी अन्य टीम के सदस्य के प्रयासों की नकल कर रहे हैं?
  • क्या आप कुछ गलत कर रहे हैं?
  • या लोग आपसे चीजों का इंतजार कर रहे हैं?

छोटे बदलाव प्रबंधन में बहुत आसान हैं।

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

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


5

मुझे लगता है कि यहां अधिकांश उत्तर मार्टिन फाउलर्स के बयान में मुख्य बिंदुओं में से एक को याद करते हैं। यह कंटीन्यूअस इंटीग्रेशन से संबंधित है । कोड को मेनलाइन में (पुश / प्रकाशित / विलय) में चेक नहीं किया गया है।

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

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

अब, काम करने के इस तरीके के बारे में क्या अच्छा है?

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

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


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

@ जियोर्जियो, मैं बिल्कुल उस पर आपके साथ सहमत हूं। कोई भी नियम पूर्ण नियमों के रूप में नहीं लिया जाना चाहिए, चाहे इसके पीछे कोई भी हो।
१३:३३

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

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

3

हर दिन जाँच के लिए तर्क:

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

हर दिन जाँच के विरुद्ध तर्क:

  • करने की जरूरत नहीं है या नहीं करना चाहते हैं
  • अभी तक मेरे कोड को 'साफ़' नहीं किया गया है, यह एक गड़बड़ है
  • समय नहीं है

मुझे विश्वास नहीं है कि आलस्य या अव्यवस्था के अलावा दैनिक रूप से कम जांच करने का कोई अच्छा कारण है। विकास के माहौल में चल रहे कोड को देखने से बुरा कुछ भी नहीं है क्योंकि यह कोड विकास शाखा में मेल नहीं खाता है क्योंकि किसी ने 'अभी तक समाप्त नहीं किया है' और इस तरह से जांच नहीं की गई है।

मुझे इस पर गलत लगता है तो कृपया मुझे दैनिक चेक-इन के खिलाफ कोई भी वैध तर्क देने की अनुमति दें।


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

1
मैं आपकी बात समझता हूं कि किसी को आलसी नहीं होना चाहिए और हर दिन अपने कोड को साफ करना चाहिए ताकि इसे चेक किया जा सके। दूसरी तरफ, जब कुछ जटिल कोड पर काम किया जाता है, तो इसे हासिल करना मुश्किल होता है क्योंकि क्लीन अप में कई घंटे लग सकते हैं। , और आप अपने कोड को साफ करने के लिए हर दिन कई घंटे नहीं बिता सकते हैं।
जियोर्जियो

@Giorgio तो आप अपने कोड को साफ करने में कई दिन बिताते हैं? मैंने दैनिक जांच के लिए कुछ अच्छे कारण दिए हैं - आपका कारण यह है कि आपको अपना कोड साफ़ करना होगा? बस क्लीनर कोड सीधे लिखें।
कर्क ब्रॉडहर्स्ट

यह हमेशा संभव नहीं है, उदाहरण के लिए अगर मैं कुछ जटिल कोड (> 4000 LOC) को विकसित कर रहा हूं, जिसे सही होने के लिए बहुत अधिक प्रयोग की आवश्यकता है। यह अच्छी तरह से संभव है कि दिन के अंत में कोड थोड़ा गड़बड़ है और मैं इसे तब तक ठीक नहीं करना चाहता जब तक कि मुझे एक सुसंगत स्थिति नहीं मिलती, जो कि कुछ दिनों बाद है। दुर्भाग्य से मैं इतना स्मार्ट नहीं हूं कि मेरे दिमाग में संपूर्ण कोड फॉर्म समाप्त हो जाएं और मैं हमेशा इसे कुछ घंटों (यानी एक दिन के अंत में) में लिख सकता हूं। मुझे ऐसा अनुभव हाल ही में हुआ था और ठेठ विकास चक्र (एक सुसंगत स्थिति से अगले तक) 2, 3 दिन था।
जियोर्जियो

@ जियोर्जियो आपके पास एक विकास शाखा नहीं है जिसे आप जांच रहे हैं? कोड की जांच होनी चाहिए ताकि अन्य लोग इसकी समीक्षा कर सकें और उसका परीक्षण भी कर सकें।
कर्क ब्रॉडहर्स्ट

2

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

हालांकि, आज के वितरित संस्करण नियंत्रण के साथ काम करने की लक्जरी यह है कि आप दोनों मेनलाइन को स्थिर रख सकते हैं, और साथ ही साथ git/hg/whatever commitहर बार जब आप महसूस करते हैं कि आप चीजों की स्थिति को संरक्षित करना चाहते हैं। मैं हर कुछ घंटों में एक बार ऐसा करता हूं और निश्चित रूप से हर दिन के अंत में करता हूं।

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

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


2

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

मैंने ऐसे सॉफ़्टवेयर हाउस भी देखे हैं जिनमें 'डेवलपर लाइन' और 'मेनलाइन' है। जब भी वे फिट होते हैं, तब डेवलपर लाइन में देवों की जाँच करने के लिए स्वतंत्र होते हैं और केवल टीम लीडर की मेनलाइन तक पहुंच होती है, इसलिए वे उत्पादन तैयार होने पर देव से कोड की प्रतिलिपि बनाने के लिए जिम्मेदार होते हैं।

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