14

हमारे पास एकीकरण परीक्षण के बड़े स्वचालित सूट की "समस्या" है। जबकि हमारे निर्माण के समय उचित हैं (< 1 घंटा), परीक्षण आमतौर पर पूरा होने के लिए 6 घंटे लगते हैं।नाइटली बिल्ड बनाम निरंतर एकीकरण: लंबे समय से चलने वाले स्वचालित टेस्ट

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

मैंने this one जैसे चर्चा के थ्रेड की समीक्षा की है, जो भेदों पर विस्तृत है।

यह मैं कुछ सवाल की ओर जाता है:

  1. यूनिट बनाम समाकलन परीक्षण स्वचालन की सिफारिश सीआई हुक्म करता है या नहीं? मैंने अतीत में केवल यूनिट सुना है, लेकिन मुझे त्वरित खोज में इस तरह के किसी भी बयान (या तर्क) नहीं मिल रहा है।

  2. संयुक्त निर्माण + स्वचालित परीक्षण समय/अनुपात के लिए एक टीम के लिए प्रभावी सीआई रखने के लिए एक अच्छा "सर्वोत्तम अभ्यास" क्या है? मेरा आंत मुझे बताता है कि यह < 2 घंटे सबसे खराब मामले के रूप में होना चाहिए, और शायद < 1 घंटे वास्तव में प्रभावी होना चाहिए। सिद्धांत रूप में, हम समानांतर में चलाने के लिए परीक्षणों को तोड़ सकते हैं और शायद उन्हें 2 घंटे से कम समय में चलते हैं, लेकिन यह अभी भी 3 घंटे का रन होगा।

  3. लंबे समय से चलने वाली नाइटली बिल्ड + सीआई को एकीकरण टेस्ट से आगे का सबसे अच्छा तरीका क्या है? मैं केवल कुछ कंकाल यूनिट टेस्ट के साथ सीआई निर्माण के बारे में सोच रहा हूं, जिसमें रात के निर्माण के साथ संयोजन होता है जो एकीकरण परीक्षणों के साथ जारी रहता है।

किसी भी टूलींग सिफारिशों का भी स्वागत है (विंडोज़ केवल सी #/सी ++ codebase)

+0

अद्यतन - आइटम 1-3 को संबोधित किया गया, लेकिन कोई टूलिंग अनुशंसाएं प्राप्त नहीं हुईं। CruiseControl.NET स्पष्ट पिक है - किसी अन्य को सी #/सी ++ विंडोज-केवल कोडबेस के लिए विचार करने लायक है? – holtavolt

+0

बस इस पर ठोकर खाई। हम विंडोज सी # के लिए [जेनकींस] (http://jenkins-ci.org/) को आजमा रहे हैं और एक दिन से काफी दूर हो गए हैं। टीमसिटी और बांस – KCD

उत्तर

13

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

स्रोत: http://martinfowler.com/articles/continuousIntegration.html#KeepTheBuildFast

क्यों यह 6 घंटे लगते हैं करता है? आपके पास कितने परीक्षण हैं? एकीकृत लोगों की तुलना में यूनिट-टेस्ट का अनुपात क्या है? आपके पास संभावित रूप से कई अधिक एकीकृत परीक्षण हैं या आपका यूनिट-टेस्ट वास्तव में इकाई नहीं है। क्या आपके यूनिट परीक्षण डीबी को छू रहे हैं? यह समस्या हो सकती है।

6 घंटे लंबा लंबा समय है। उपरोक्त आलेख में कुछ सुझाव हैं।

+0

फाउलर आलेख के लिंक के लिए धन्यवाद। हां - हमारा testbed लगभग पूरी तरह से एकीकृत परीक्षण है, जो स्पष्ट रूप से समस्या का हिस्सा है (और कुछ जो मैं टीम और प्रबंधन को मनाने के लिए करना चाहता हूं बदलने में निवेश करने लायक है) – holtavolt

+3

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

+0

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

4

यहाँ कुछ चीजें हैं।

आम तौर पर आपके पास कई बिल्ड होंगे, जो & यूनिट परीक्षणों को संकलित करता है, जो ऐसा करता है और स्थानीय स्वीकृति परीक्षण चलाता है, और एक जो एकीकरण परीक्षण चलाता है।

आप निश्चित रूप से को एक भी निर्माण की आवश्यकता नहीं है जो सबकुछ करता है।

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

6 घंटे भी बहुत लंबा समय है। क्या आप सुनिश्चित हैं कि आपके परीक्षण सही सामान का परीक्षण कर रहे हैं? क्या आपके पास बहुत अधिक विस्तृत स्कोप परीक्षण हैं? क्या आप इस तथ्य के लिए हर जगह "नींद()" का उपयोग कर रहे हैं कि आपने अपने टेस्ट कोड में एसिंक्रोनि को अच्छी तरह से मॉडल नहीं किया है?

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

+0

को भी देखें - यूनिट परीक्षण त्वरित होने चाहिए! - आपको एक मिनट से कम में कई हजार यूनिट परीक्षण चलाने में सक्षम होना चाहिए। – time4tea

+0

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

+1

अच्छा, यकीन है - लेकिन आपके पास कितने हैं? वे क्या सामान कवर करते हैं? वहां कितना नकल है? क्या वहां सब जगह है()? वे इतने लंबे समय क्यों लेते हैं? तुम्हारी क्या मतलब है बग? क्या टेस्टर्स बस एक बग की रिपोर्ट करते हैं यदि आपको यूएटी में कुछ मिलता है जो काम नहीं करता है? यह एक बग नहीं है, केवल एक अधूरा विशेषता है, इसलिए निचले स्तर का परीक्षण लिखें .... – time4tea

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