CI सर्वर पर यूनिट परीक्षण चलाने की बात क्या है?


98

आप CI सर्वर पर यूनिट परीक्षण क्यों चलाएंगे?

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


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

2
@BoristheSpider - वास्तव में बहुत अच्छा वर्कफ़्लो। masterहमेशा समझदार होना चाहिए, और आंतरिक रूप से आंतरिक क्यूए और परीक्षण के लिए मंचन वातावरण में प्रत्येक मर्ज पर स्वचालित रूप से तैनात किया जाना चाहिए।
प्रति लंडबर्ग

130
"निश्चित रूप से, जब तक कुछ मास्टर करने के लिए प्रतिबद्ध हो जाता है, तब तक एक डेवलपर ने पहले ही सभी यूनिट परीक्षण चलाए हैं और कोई भी त्रुटियां तय की हैं जो उनके नए कोड के साथ हुई हो सकती हैं।" आप किस काल्पनिक दुनिया में रहते हैं?
jpmc26

5
कुछ उद्योगों में, महत्वपूर्ण भाग सिर्फ कोड पर परीक्षण चलाने के लिए नहीं है, यह बायनेरिज़ पर परीक्षण चलाने के लिए है । CI आउटपुट पर परीक्षण चलाने का मतलब है कि आप यह गारंटी दे सकते हैं कि डिलीवर किया गया उत्पाद काम करता है, क्योंकि आपके ग्राहक को प्राप्त होने वाला सटीक बाइनरी वह है जो सभी परीक्षणों को पास करता है। यह तुच्छ लगता है, लेकिन कभी-कभी इसका प्रभाव हो सकता है (मैंने जो देखा है वह जटिल है; जटिल परियोजनाओं पर, या जब अजीब तरह से सेट किया जाता है, तो यह उस साफ निर्माण में समस्या पैदा कर सकता है जो स्वच्छ संस्करण में नहीं थे)।
अनएक्समैंडर

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

जवाबों:


223

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

या नहीं। ऐसा होने के कई कारण हो सकते हैं:

  • डेवलपर के पास ऐसा करने के लिए अनुशासन नहीं है
  • वे भूल गए हैं
  • उन्होंने सब कुछ नहीं किया और एक अधूरा प्रतिबद्ध सेट दिया (धन्यवाद मैथ्यू एम।
  • उन्होंने केवल कुछ परीक्षण किए, लेकिन पूरे सुइट में नहीं (धन्यवाद nhgrif )
  • उन्होंने विलय करने से पहले अपनी शाखा पर परीक्षण किया (धन्यवाद nhgrif * 2)

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

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

CI के लिए अन्य अच्छे कारण परीक्षण चलाने के लिए बनाता है:

  • मुख्य विकास प्लेटफार्मों के अलावा अन्य विभिन्न प्लेटफार्मों पर परीक्षण, जो एक डेवलपर के लिए करना मुश्किल हो सकता है। (धन्यवाद TZHX )
  • स्वीकृति / एकीकरण / एंड टू एंड / वास्तव में लंबे समय तक चलने वाले परीक्षण सीआई सर्वर पर चलाए जा सकते हैं जो आमतौर पर एक डेवलपर बॉक्स पर नहीं चलाया जाएगा। (धन्यवाद Ixrec )
  • एक डेवलपर धक्का / कमिट करने से पहले एक छोटा बदलाव कर सकता है (यह एक सुरक्षित बदलाव है और इसलिए परीक्षण नहीं चल रहा है)। (धन्यवाद Ixrec * 2)
  • CI सर्वर कॉन्फ़िगरेशन में आमतौर पर सभी डेवलपर टूल और कॉन्फ़िगरेशन शामिल नहीं होते हैं और इस प्रकार उत्पादन प्रणाली के करीब होता है
  • CI सिस्टम हर बार स्क्रैच से प्रोजेक्ट का निर्माण करता है, मतलब बिल्ड रिपीटेबल होते हैं
  • एक पुस्तकालय परिवर्तन समस्याओं का कारण बन सकता है - एक CI सर्वर को सभी आश्रित कोडबिस के निर्माण के लिए कॉन्फ़िगर किया जा सकता है , न कि केवल एक पुस्तकालय के लिए

36
अन्य सामान्य कारण: 1) CI सर्वर उच्च-स्तरीय एकीकरण / स्वीकृति परीक्षण चला सकता है जो डेवलपर्स को हमेशा उन्हें चलाने में बहुत लंबा समय लेता है। 2) डेवलपर ने उन्हें चलाया और फिर धक्का देने से पहले एक छोटा सा बदलाव किया कि उन्हें यकीन है कि कुछ भी नहीं टूटेगा, लेकिन हम निश्चित होना चाहते हैं।
Ixrec

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

2
@MichaelT अच्छी पकड़। यह वास्तव में इन दिनों हमारे सीआई के 90% विफलताओं का कारण है, सुनिश्चित नहीं है कि मैं इसे कैसे भूल गया ...
Ixrec

34
इसके अलावा, उन्हें CI वातावरण पर चलाने का मतलब है कि आप अपने प्रोजेक्ट को स्क्रैच से सेट कर सकते हैं , यह सुनिश्चित करता है कि आपका निर्माण दोहराए जाने योग्य है
मर्गिसिसा

5
इसके अलावा, दो बदलाव किए जा सकते हैं जो अलग-अलग ठीक से जांचे जाते हैं, लेकिन एक साथ टूट जाते हैं (जैसे एक अप्रयुक्त एपीआई को हटाने, और दूसरे का उपयोग करना शुरू करना)।
साइमन रिक्टर

74

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

मुझे एक आवेदन का निर्माण, परीक्षण और सत्यापन करना होगा:

  • Microsoft Windows XP और Vista विजुअल स्टूडियो 2008 संकलक के साथ।
  • दृश्य स्टूडियो 2010 संकलक के साथ माइक्रोसॉफ्ट विंडोज 7।
    • ओह, और एमएसआई उनमें से प्रत्येक के लिए बनाता है।
  • 4.1 और 4.4 के साथ आरएचईएल 5 और 6 क्रमशः (इसी तरह CentOS)
    • जल्द ही soon। Woop-de-woop।
  • पिछले तीन हालिया संस्करणों के लिए जीसीसी के साथ फेडोरा वर्कस्टेशन।
  • पिछले तीन हालिया संस्करणों के लिए डेबियन (और उबंटू जैसे डेरिवेटिव)।
  • पिछले तीन संस्करणों में मैक OSX।
    • और पैकेज (आरपीएम, डीजीएम, आदि)

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

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

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


3
यूनिट परीक्षण परीक्षण कोड कॉन्फ़िगरेशन नहीं। यह गंभीरता से आप एक नया परीक्षण जोड़ने के लिए और इसे दीवार पर फेंकने के लिए भी इसे स्थानीय रूप से पहले चलाने के बिना निष्क्रिय हो जाएगा ...
Robbie Dee

33
@ रॉबीडी मुझे डर है कि मैं आपकी बात नहीं देख सकता? मैं उन्हें स्थानीय स्तर पर परीक्षण करते हैं, या बस आँख बंद करके उन्हें अपने परीक्षण के बिना स्रोत नियंत्रण करने के लिए चीजों को करने से बिना नए परीक्षण बनाने का सुझाव नहीं है, और मैं होता अपने ही मशीन पर परीक्षण चलाने - लेकिन "विन्यास" संगत व्यवहार के लिए जांच की आवश्यकता होती है , और यह बेहतर है कि अपेक्षाकृत जल्दी से जब विकासकर्ता का दिमाग अभी भी उस क्षेत्र में एक मुद्दा खोजने की तुलना में है, जब मुख्य रूप से मैक का उपयोग करने वाली टीम चार हजार मील दूर जाती है और अपनी प्रतियों को अपडेट करती है।
TZHX

7
@RobbieDee मैं कहूंगा कि अगर वे ऐसा कर सकते हैं तो TZHX स्थानीय रूप से सभी परीक्षण चलाएगा , लेकिन वे नहीं कर सकते । चूंकि TZHX नहीं कर सकता है, वे स्थानीय रूप से कुछ परीक्षण चलाते हैं (जो कि उनके देव प्रणाली पर चल सकते हैं और बदले हुए कोड के लिए पर्याप्त या सबसे अधिक प्रासंगिक हैं), और सीआई सिस्टम पर पूरी बैटरी चलने दें। काफी हद तक उचित है।
मुरु २

11
@ रॉबीडी: वह इकाई परीक्षण में विश्वास करता है। इसलिए वह उन्हें अपनी मैकबुक एयर पर परीक्षण करता है और पास करता है और चेक करता है। Red Hat, Solaris और Windows चलाने वाले CI सर्वर उन परीक्षणों को फिर से चलाता है। क्या यह जानना अच्छा नहीं है कि आपने जो परीक्षण किया वह उत्पादन प्लेटफार्मों पर भी काम करता है?
स्लीपबेटमैन

2
@ रॉबीडी: मैंने अक्सर यूनिट टेस्ट लिखे हैं जो एक निश्चित प्लेटफॉर्म पर एक निश्चित संकलक के लिए विशिष्ट थे। उदाहरण के लिए एक ग्राफिक्स सबसिस्टम पर विचार करें जो AMD (इंटेल प्रतियोगी) विशिष्ट CPU निर्देशों का उपयोग करता है जो केवल g ++ (GNU C ++ कंपाइलर) संस्करण 4.5 या नए पर उपलब्ध हैं, लेकिन मैं एटम CPU और ICC (Intel C ++) पर काम करता हूं संकलक)। उस मशीन पर एएमडी / जी ++ 4.5-परीक्षण हर बार चलाने के लिए बकवास होगा, फिर भी इसे रिलीज से पहले परीक्षण किया जाना है; साथ ही मेरे स्वयं के सीपीयू-इंडिपेंडेंट कोड का उचित इंटरऑपरेबिलिटी के लिए परीक्षण किया जाना चाहिए। ज़रूर, वीएम और एमुलेटर हैं, ...
phresnel

23

उत्कृष्ट बकाया जवाब के अलावा:

  • आप भंडार से कोड का परीक्षण करते हैं । यह आपकी मशीन पर आपकी फ़ाइलों के साथ काम कर सकता है ... जिसे आप कमिट करना भूल गए। यह एक नई तालिका पर निर्भर हो सकता है जिसमें निर्माण स्क्रिप्ट नहीं है (उदाहरण के लिए शराबी), कुछ कॉन्फ़िगरेशन डेटा या गुण फ़ाइलें।
  • आप कोड एकीकरण समस्याओं से बचें। एक डेवलपर अंतिम संस्करण को डाउनलोड करता है, इकाई और एकीकरण परीक्षण बनाता है, कोड जोड़ता है, अपनी मशीन में सभी परीक्षण पास करता है, कमिट करता है और धक्का देता है। एक अन्य डेवलपर ने भी यही किया है। दोनों परिवर्तन अपने दम पर सही हैं लेकिन जब विलय बग का कारण बनता है। यह रिपोजिटरी विलय हो सकता है या सिर्फ यह कि इसे एक संघर्ष के रूप में नहीं जाना जाता है। Eg Dev 1 उस फ़ाइल को हटा देता है जिसका उपयोग बिल्कुल नहीं किया गया था। इस फाइल के खिलाफ देव 2 कोड और देव 1 बदलाव के बिना परीक्षण करता है।
  • आप रिपॉजिटरी से स्वचालित रूप से तैनात करने के लिए एक स्क्रिप्ट विकसित करते हैं। एक सार्वभौमिक इमारत होने और स्क्रिप्ट को तैनात करने से बहुत सारे मुद्दों का समाधान होता है। हो सकता है कि कुछ डेवलपर ने एक ऐसा लीबी या संकलन विकल्प जोड़ा हो, जो हर किसी के द्वारा साझा न किया गया हो। यह न केवल आपको समय बचाता है, बल्कि इससे भी महत्वपूर्ण बात यह है कि यह तैनाती को सुरक्षित और पूर्वानुमान योग्य बनाता है। इसके अलावा, आप 2.3.1 संस्करण में अपने भंडार में वापस जा सकते हैं और इस संस्करण को एक स्क्रिप्ट के साथ तैनात कर सकते हैं जो इस संस्करण के साथ काम करता है। इसमें दृश्य, संग्रहीत कार्यविधियाँ, दृश्य और ट्रिगर जैसी डेटाबेस ऑब्जेक्ट शामिल हैं जिन्हें संस्करणित किया जाना चाहिए। (या आप एक व्यावहारिक संस्करण में वापस जाने में सक्षम नहीं होंगे)।
  • अन्य परीक्षण : जैसे एकीकरण, प्रदर्शन और अंत से अंत परीक्षण। यह धीमा हो सकता है और इसमें सेलेनियम जैसे परीक्षण उपकरण शामिल हो सकते हैं। आपको नकली वस्तुओं या HSQL के बजाय एक वास्तविक डेटाबेस के साथ डेटा का एक पूरा सेट की आवश्यकता हो सकती है।

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


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

22

आपको लगता है कि आप ऐसा नहीं करेंगे - लेकिन डेवलपर्स मानव हैं और वे कभी-कभी भूल जाते हैं।

इसके अलावा, डेवलपर्स अक्सर नवीनतम कोड खींचने में विफल रहते हैं। उनके नवीनतम परीक्षण ठीक चल सकते हैं, फिर चेक-इन के बिंदु पर, कोई अन्य व्यक्ति एक ब्रेकिंग परिवर्तन करता है।

आपके परीक्षण स्थानीय (अनियंत्रित) संसाधन पर भी निर्भर हो सकते हैं। ऐसा कुछ जो आपके स्थानीय इकाई परीक्षण नहीं उठाएगा।

यदि आपको लगता है कि उपरोक्त सभी काल्पनिक है, तो CI (TFS पर कम से कम) से ऊपर एक स्तर है जिसे गेटेड कहा जाता है, जो बनाता है कि परीक्षण विफल हो गए हैं और कोड बेस के लिए प्रतिबद्ध नहीं हैं।


7
मैंने और अधिक उफ़ देखा है कि मैं उस सीआई विफलताओं को कम करना भूल गया जिसे मैं स्वीकार करना चाहता हूं।
डैन नीली

@ अच्छी तरह से निष्पक्ष होने के लिए, यह आपके बट को बिल्ड मैनेजर द्वारा लात मार रहा है क्योंकि आप उसे / उसके बारे में कुछ बताना भूल गए हैं ... :-)
रोबी डी

3
यही कारण है कि मैं सीआई से प्यार करता हूं। के बारे में खोजना और अपने खुद के ooopses को ठीक करने से बेहतर है कि कोई और आपके लिए उन्हें ढूंढे।
डैन नीली

14

तब तक कुछ करने के लिए गुरु प्रतिबद्ध हो जाता है

मैं आमतौर पर हर एक कमिट पर चलने के लिए अपना CI सेट करता हूं। शाखाओं का परीक्षण नहीं होने तक शाखा में विलय नहीं किया जाता है। यदि आप मास्टर पर चल रहे परीक्षणों पर भरोसा कर रहे हैं, तो यह बिल्ड के टूटने के लिए एक विंडो खोलता है।

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

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

मेरे वर्तमान कार्य में हमारे उत्पादन परिनियोजन सीआई पर सभी परीक्षणों को पारित करने पर आधारित है। जब तक वे पास नहीं होते, तब तक परिनियोजन स्क्रिप्ट परिनियोजन को रोक देगी। इससे गलती से उन्हें चलाना भूल जाना असंभव हो जाता है।

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


1
आपको वास्तव में धीमी इकाई परीक्षण नहीं करना चाहिए - यह FIRST सिद्धांतों का उल्लंघन करता है।
रॉबी डी

4
@ रॉबीडी: मुझे लगता है कि आमतौर पर सीआई सर्वर सभी परीक्षण चलाता है, न कि केवल यूनिट परीक्षण।
रेमकोगर्लिच

4
@ रॉबीडी: सिद्धांत रूप में सभी इकाई परीक्षण तेज हैं। व्यवहार में .... भले ही, CI सभी परीक्षणों - लिंटर, स्थैतिक विश्लेषण, इकाई परीक्षणों, एकीकरण परीक्षणों को चला सकता है और करना चाहिए ।
डेन्थ

2
@RobbieDee स्पष्ट रूप से विन्यास की बारीकियां टीम से टीम में भिन्न होगी। यहां तक ​​कि जब बिल्ड में कई मिनट लगते हैं, तो अक्सर उन बिल्ड में से कई को समानांतर में चलाना संभव होता है। एकल अखंड कोडबेस को देखते हुए यह एक बड़ी खामी हो सकती है, लेकिन IME यह एक बाधा नहीं है।
डेन्थ

1
@ रॉबिडी मुझे लगता है कि यह आपकी वास्तुकला पर अधिक निर्भर करता है। मैंने इसे ~ 80 की इंजीनियरिंग टीम के लिए हाथ से काम करते देखा है, लेकिन यह उत्पाद क्षेत्रों के लिए अच्छी तरह से परिभाषित उप-टीमों के साथ है।
डेनिथ

4

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

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


3

यह मानते हुए (डेवलपर्स अन्य उत्तरों के विपरीत) कि डेवलपर्स काफी अनुशासित हैं और कमिट करने से पहले यूनिट टेस्ट चलाते हैं, इसके कई कारण हो सकते हैं:

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

3

ऐसे मामलों की कल्पना करना संभव है जब परिवर्तन ए परीक्षण को नहीं तोड़ता है, और परिवर्तन बी परीक्षण को नहीं तोड़ता है, लेकिन ए और बी एक साथ करते हैं। यदि A और B विभिन्न डेवलपर्स द्वारा बनाए गए हैं, तो केवल CI सर्वर नए बग का पता लगाएगा। A और B समान वाक्य के दो भाग भी हो सकते हैं।

दो लोकोमोटिव ए और बी द्वारा संचालित एक ट्रेन की कल्पना करें कि शायद एक पर्याप्त से अधिक है और यह लागू करने के लिए ठीक है। हालाँकि अगर दोनों को हटाने के लिए "फिक्स" लागू किया जाता है, तो ट्रेन नहीं चलेगी।

इसके अलावा, सभी डेवलपर्स सभी यूनिट परीक्षण नहीं चलाते हैं, जबकि अधिकांश अच्छे डेवलपर्स करते हैं।


2

आइए एक समकक्ष प्रश्न पूछें:

आप एक CI सर्वर पर कोड क्यों बनाएंगे?

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


CI करने के कई कारण हैं, लेकिन CI का मुख्य बिंदु यह जानना है कि समय के साथ कोड की स्थिति क्या है। मुख्य लाभ (कई में से) यह प्रदान करता है, यह है कि हम यह पता लगा सकते हैं कि बिल्ड कब टूटता है, यह पता करें कि इसे किसने तोड़ा, और फिर इसे ठीक करें।

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

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