मैं हमारे मौजूदा उत्पाद पर हमारे एकीकरण की बढ़ती संख्या को बढ़ाने के लिए तकनीकों और रणनीतियों की जांच कर रहा हूं, ताकि वे (मानवीय) हमारे विकास और सीआई प्रक्रिया का हिस्सा बन सकें ।
लगभग 200+ एकीकरण परीक्षणों में हम पहले से ही पूर्ण परीक्षण रन (एक डेस्कटॉप देव मशीन पर) को पूरा करने के लिए 1hr चिह्न मार रहे हैं, और यह रूटीन पुश प्रक्रियाओं के हिस्से के रूप में पूरे सूट को चलाने के लिए एक डेवलपर की क्षमता को नकारात्मक रूप से प्रभावित कर रहा है। जो उन्हें अच्छी तरह से बनाने के बारे में अनुशासित होने की प्रेरणा को प्रभावित कर रहा है। हम इंटीग्रेशन टेस्ट को आगे पीछे करने के लिए केवल प्रमुख दर्शनीय स्थल का उपयोग करते हैं, और हम एक ऐसे वातावरण का उपयोग करते हैं जो उत्पादन को दर्पण करता है, जिसे प्रत्येक टेस्ट रन को खरोंच से बनाया जाता है।
इसे चलाने में लगने वाले समय के कारण, यह एक भयानक फीडबैक लूप के लिए बना रहा है और टेस्ट रन खत्म करने के लिए मशीनों पर इंतजार कर रहे कई व्यर्थ चक्र, कोई फर्क नहीं पड़ता कि परीक्षण रन कितने केंद्रित हैं। प्रवाह और प्रगति, विवेक और स्थिरता पर अधिक महंगे नकारात्मक प्रभाव को कभी नहीं।
हम इस उत्पाद को धीमा करने के लिए शुरू होने से पहले 10 गुना गुना अधिक एकीकरण परीक्षण की उम्मीद करते हैं (वास्तव में कोई विचार नहीं है, लेकिन ऐसा महसूस नहीं होता है कि हम अभी भी सुविधाओं के संदर्भ में शुरू कर रहे हैं)। हमें कुछ सैकड़ों या कुछ हजारों एकीकरण परीक्षणों में होने की उम्मीद है, मैं कुछ बिंदु पर लगता हूं।
स्पष्ट होने के लिए, इकाई परीक्षण बनाम एकीकरण परीक्षण पर एक चर्चा बनने से रोकने की कोशिश करने के लिए, (जिसका कभी कारोबार नहीं किया जाना चाहिए)। हम टीडीडी और इस उत्पाद में एकीकरण परीक्षण के साथ दोनों इकाई परीक्षण कर रहे हैं। वास्तव में, हम सेवाओं के आर्किटेक्चर में विभिन्न परतों पर एकीकरण परीक्षण करते हैं, जो हमारे पास है, जहां यह हमारे लिए समझ में आता है, जैसा कि हमें यह सत्यापित करने की आवश्यकता है कि हम अपने आर्किटेक्चर में पैटर्न को दूसरे क्षेत्रों में बदलते समय ब्रेकिंग परिवर्तन कैसे पेश करते हैं। प्रणाली।
हमारे टेक स्टैक के बारे में थोड़ा। हम वर्तमान में अपने परीक्षणों को अंत से चलाने के लिए सीपीयू (सीपीयू और मेमोरी इंटेंसिव) एमुलेशन वातावरण पर परीक्षण कर रहे हैं। जो कि Azure REST वेब सेवाओं से बना है, जो एक noSql backend (ATS) का निर्माण करती है। हम Azure डेस्कटॉप एमुलेटर + IISExpress में चलकर अपने उत्पादन वातावरण का अनुकरण कर रहे हैं। हम प्रति मशीन में एक एमुलेटर और एक स्थानीय बैकेंड रिपॉजिटरी तक सीमित हैं।
हमारे पास एक क्लाउड-आधारित CI भी है, जो समान उत्सर्जित वातावरण में एक ही परीक्षण चलाता है, और हमारे वर्तमान CI प्रदाता के साथ क्लाउड में परीक्षण रन दोगुना (2hrs +) हो रहा है। हम हार्डवेयर प्रदर्शन के मामले में क्लाउड CI प्रदाताओं SLA की सीमा तक पहुंच गए हैं, और परीक्षण समय पर उनके भत्ते को पार कर गए हैं। उनके लिए निष्पक्ष होने के लिए, उनके चश्मे खराब नहीं हैं, लेकिन आधे स्पष्ट रूप से एक इनडोर ग्रुनी डेस्कटॉप मशीन के रूप में अच्छे हैं।
हम परीक्षण के प्रत्येक तार्किक समूह के लिए हमारे डेटा स्टोर के पुनर्निर्माण की एक परीक्षण रणनीति का उपयोग कर रहे हैं, और परीक्षण डेटा के साथ प्री लोडिंग कर रहे हैं। बड़े पैमाने पर डेटा अखंडता का बीमा करते समय, यह प्रत्येक परीक्षण पर 5-15% प्रभाव जोड़ता है। इसलिए हमें लगता है कि उत्पाद विकास में इस बिंदु पर परीक्षण रणनीति को अनुकूलित करने के लिए बहुत कम प्रयास किया जाना है।
इसका लंबा और छोटा समय यह है: जब तक हम प्रत्येक परीक्षण के थ्रूपुट को अनुकूलित कर सकते हैं (भले ही प्रत्येक के रूप में 30% -50% से अधिक), हम अभी भी निकट भविष्य में कई सौ परीक्षणों के साथ प्रभावी ढंग से अभ्यस्त नहीं करेंगे। 1 आर अब भी मानव सहनीय से अधिक दूर है, हमें इसे टिकाऊ बनाने के लिए समग्र प्रक्रिया में परिमाण-ईश सुधार के आदेश की आवश्यकता है।
इसलिए, मैं जांच कर रहा हूं कि परीक्षण के समय को कम करने के लिए हम किन तकनीकों और रणनीतियों को नियोजित कर सकते हैं।
- कम परीक्षण लिखना एक विकल्प नहीं है। कृपया इस धागे में से एक पर बहस न करें।
- तेजी से हार्डवेयर का उपयोग करना निश्चित रूप से एक विकल्प है, हालांकि बहुत महंगा है।
- पैरलल में अलग हार्डवेयर पर परीक्षणों / परिदृश्यों के समूह चलाना भी निश्चित रूप से एक पसंदीदा विकल्प है।
- विकास के तहत सुविधाओं और परिदृश्यों के आसपास परीक्षणों का समूह बनाना प्रशंसनीय है, लेकिन अंततः पूर्ण कवरेज या विश्वास साबित करने में विश्वसनीय नहीं है कि सिस्टम परिवर्तन से प्रभावित नहीं है।
- डेस्कटॉप एमुलेटर में चलने के बजाय क्लाउड-स्केल स्टेजिंग वातावरण में चलना तकनीकी रूप से संभव है, हालांकि हम टेस्ट रन के लिए परिनियोजन समय जोड़ना शुरू करते हैं (सामान को तैनात करने के लिए टेस्ट रन की शुरुआत में प्रत्येक 20 मिनट)।
- सिस्टम के घटकों को स्वतंत्र लॉजिअल टुकड़ों में विभाजित करना एक हद तक प्रशंसनीय है, लेकिन हम उस पर सीमित लाभ की उम्मीद करते हैं, क्योंकि घटकों के बीच का अंतर समय के साथ बढ़ने की उम्मीद है। (यानी एक परिवर्तन एक अयोग्य है दूसरों को प्रभावित करने की संभावना है अनपेक्षित तरीके - जैसा कि अक्सर होता है जब एक प्रणाली को आकस्मिक रूप से विकसित किया जाता है)
मैं यह देखना चाहता था कि इस स्पेस में अन्य क्या रणनीति (और टूल्स) इस्तेमाल कर रहे हैं।
(मेरा मानना है कि कुछ अन्य प्रौद्योगिकी सेटों का उपयोग करके इस तरह की कठिनाई को देख सकते हैं।)
[अद्यतन: १२/१६/२०१६: हमने सीआई समानांतर परीक्षण में अधिक निवेश किया, परिणाम की चर्चा के लिए: http://www.mindkin.co.nz/blog/2015/12/16/16-jobs]