आपके निरंतर एकीकरण पाइपलाइन में आश्वस्त होने के लिए आपके पास पर्याप्त स्वचालित परीक्षण कब है?


10

परीक्षण के साथ निरंतर एकीकरण यह सुनिश्चित करने के लिए उपयोगी है कि आपके पास सभी समय में "shippable" कोड है।

हालांकि, परीक्षण के एक व्यापक सूट को रखना वास्तव में मुश्किल है और अक्सर, ऐसा लगता है कि निर्माण बगिया के लिए वैसे भी होने जा रहा है।

अपने सीआई पाइपलाइन परीक्षण में आपको कितना परीक्षण करने में आत्मविश्वास महसूस करना चाहिए? क्या आप यह तय करने के लिए किसी प्रकार की मीट्रिक का उपयोग करते हैं कि पर्याप्त परीक्षण कब है?

जवाबों:


16

सामान्य रूप में

आपके निरंतर एकीकरण पाइपलाइन में आश्वस्त होने के लिए आपके पास पर्याप्त स्वचालित परीक्षण कब है?

उत्तर शायद स्पष्ट हो जाता है यदि आप इस बारे में सोचते हैं कि आप किस बारे में आश्वस्त होना चाहते हैं। अंततः, यह 1-1 मैप करता है; प्रत्येक परीक्षण आपको एक चीज़ के बारे में आश्वस्त करता है जो वह परीक्षण करता है:

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

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

मैं आश्वस्त होना चाहता हूं कि मेरा ऐप एक्स कर सकता है

तो आप एक एंड-टू-एंड टेस्ट लिखते हैं जो एक्स और चेक करने की कोशिश करता है कि क्या यह सही ढंग से करता है।

अधिक ठोस

यह सब बहुत आत्म-संदर्भित है, लेकिन ऐसा इसलिए है क्योंकि यह नीचे आता है। वहाँ बस यह अधिक नहीं है।

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

तो आप अपने लिए एक यूनिट टेस्ट लिख सकते हैं CheeseMeltCalculator, जहाँ आप इसे 100 ग्राम गौडा और 200 ग्राम एमेंबल चीज़ देते हैं, और फिर आप जाँचते हैं कि तापमान और समय सही है। इसका मतलब है कि अब आप आश्वस्त हो सकते हैं कि CheeseMeltCalculator100 ग्राम गौडा और 200 ग्राम पनीर के लिए काम करता है। अब यदि आप 200 ग्राम के बजाय 300 ग्राम गौडा के साथ इस परीक्षण को दोहराते हैं, तो आप बहुत आश्वस्त हो सकते हैं कि यह विभिन्न मूल्यों के लिए सही तरीके से काम करता है। आप के लिए परीक्षण जोड़ सकते हैं 0, -1और int.MaxValueGouda के जी आश्वस्त हो सकता है कि कोड अजीब यात्रा नहीं करता है (या सही तरीके से ऊपर की ओर यात्राएं) अजीब इनपुट के लिए।

CheeseMeltCalculatorसंपूर्ण खाद्य तापमान और समय गणना प्रक्रिया में सही तरीके से शामिल किया गया है, यह जांचने के लिए आप एक एकीकरण परीक्षण लिख सकते हैं । यदि यह गलत हो जाता है, लेकिन CheeseMeltCalculatorऊपर दिए गए परीक्षण ठीक हैं, तो आप आश्वस्त हो सकते हैं कि बग अन्य कैलकुलेटर में है या अलग-अलग कैलकुलेटर से डेटा संयुक्त है।

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

और अंत में , यदि वे सभी परीक्षण ठीक हैं, तो आप आश्वस्त हो सकते हैं कि " यदि आप कई अलग-अलग प्रकार के पनीर को अलग-अलग मात्रा में जोड़ते हैं, तो यह आपको सही तापमान और समय देता है ताकि वे सभी पिघल जाएं "

कहानी संक्षिप्त में

मुद्दा यह है कि आपके पास एक परीक्षण नहीं हो सकता है "यह सही ढंग से काम करता है"। आप केवल "अगर मैं एक्स, वाई होता है" का परीक्षण कर सकता हूं।

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

अतिरिक्त जानकारी

उपयोगकर्ता रिचर्ड ने इस जानकारी को एक संपादन में जोड़ा:

मार्टिन फावलर ने अपनी वेबसाइट पर सबसे आम रणनीतियों के बारे में बहुत अच्छा सारांश दिया है: https://martinfowler.com/articles/microservice-testing/

मैं इसे दूर नहीं करना चाहता, लेकिन मैं यह कहना चाहता हूं: इस उत्तर की तुलना में, यह "सारांश" नहीं है, बल्कि अच्छे ग्राफिक्स और सब कुछ के साथ बहुत अधिक गहराई से स्पष्टीकरण है।

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


यह एक अच्छा वैचारिक दृष्टिकोण है। क्या आपके पास ऐसे उदाहरण मेट्रिक्स होंगे जो हमारे परीक्षण कवरेज में विश्वास प्रदान करने में उपयोगी होंगे?
पत्थरबाज़ी

@stonefruit वास्तव में नहीं है, लेकिन मुझे लगता है कि मेरे पास वास्तव में आपके लिए आवश्यक उत्तर है: Testivus On Test Coverage
R. Schmitz

@stonefruit उस दृष्टांत में संख्या के बारे में, 80%, यह एक संख्या है जिसे आप इस संदर्भ में अधिक बार सुनते हैं। मुख्य रूप से पेरेटो सिद्धांत के कारण - अंतिम 20% कवरेज 80% काम है। दूसरे शब्दों में, इसे 80% से 100% तक लाने के लिए 4 गुना काम है, क्योंकि इसे पहली बार में 80% तक प्राप्त करना था। यह अक्सर ओवरकिल होता है, लेकिन कल्पना करें कि आप एक उपग्रह के लिए नियंत्रण कोड लिख रहे हैं: यदि कोई बग पॉप अप करता है, तो आप इसे ठीक नहीं कर सकते हैं; 100% तक कवरेज प्राप्त करना एक सार्थक निवेश है।
आर। शमित्ज़

लगता है कि मैं तीसरा प्रोग्रामर हूं। haha। मुझे लगता है कि दिन के अंत में, यह जोखिम-आधारित दृष्टिकोण लेने के लिए वापस जाता है, जैसा कि आपने उपग्रह उदाहरण के साथ उल्लेख किया है।
पत्थरबाज़ी

1
@stonefruit शायद आप पहले एक हैं, हालांकि। यदि आपके पास 0% कवरेज के साथ एक मौजूदा परियोजना है, तो 80% से मृत्यु मार्च शुरू न करें। इसके बजाय, वास्तव में, " बस कुछ अच्छे परीक्षण लिखें "। शायद परीक्षण लिखने के लिए शुक्रवार के अंतिम आधे हिस्से का उपयोग करें, ऐसा कुछ। मेरे अनुभव में, आप स्वचालित रूप से सबसे पहले प्रयास-इनाम अनुपात के साथ परीक्षण के साथ आएंगे, और प्रत्येक परीक्षण आपको थोड़ा और आत्मविश्वास देगा।
आर। शमित्ज़

4

कोई मीट्रिक नहीं है जो आप गणना कर सकते हैं जो आपको वह आत्मविश्वास देगा जिसकी आप तलाश कर रहे हैं। कुछ करने से आत्मविश्वास पैदा होता है, और फिर उस पर सफल होना या असफल होना और उससे कुछ सीखना।

केवल "मेट्रिक्स" मैंने पाया है जो मुझे हमारे टेस्ट कवरेज में विश्वास दिलाता है:

  1. उत्पादन में पाए जाने वाले दोषों की संख्या
  2. क्या आप कोड आधार को फिर से तैयार कर सकते हैं और प्रतिगमन दोषों को पकड़ने के लिए अपने परीक्षण कवरेज पर भरोसा कर सकते हैं?

स्वचालित परीक्षण एक चांदी की गोली नहीं है। आपको प्रत्येक रिलीज़ चक्र के दौरान कितने उत्पादन दोष पाए जाते हैं, इस पर नज़र रखने की आवश्यकता है। जब यह संख्या कम हो जाती है, तो आप बेहतर सॉफ्टवेयर वितरित कर रहे हैं। स्वचालित परीक्षण और निरंतर एकीकरण ऐसे उपकरण हैं, जिनका उपयोग आप बेहतर सॉफ़्टवेयर वितरित करने के लिए करते हैं।

एकमात्र मीट्रिक जो आप वास्तव में माप सकते हैं "क्या आप बेहतर सॉफ़्टवेयर वितरित कर रहे हैं?"

और फिर भी, यह व्यक्तिपरक है।


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

2

आपके निरंतर एकीकरण पाइपलाइन में आश्वस्त होने के लिए आपके पास पर्याप्त स्वचालित परीक्षण कब है?

अधिकांश आर्थिक वातावरण में आपके पास पर्याप्त आत्मविश्वास (> 99%) को लागू करने के लिए बजट नहीं होगा, लेकिन आपको एक सीमित बजट का प्रबंधन करना होगा: यह लागत / लाभ अनुपात के बारे में है।

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

तो वास्तव में आसान / सस्ते / जोखिम वाले परीक्षण लागू किए जाएंगे जबकि महंगे / संभावनाहीन परीक्षण नहीं होंगे।

सॉफ्टवेयर्सडेलपमेंट का एक उप-लक्ष्य आर्किटेक्चर बनाना है जो कि आटोमैटेड परीक्षण को सस्ता रखने के लिए परीक्षण करने के लिए आसान / सस्ता ( टेस्टी-टेस्टी-डिवेलपमेंट लागू करके परीक्षण के लिए डिजाइन ) तैयार करता है।

मुझे लगता है कि Pareto_principle को यहां रखरखाव योग्य / परीक्षण योग्य सॉफ़्टवेयर के लिए लागू किया जा सकता है, यह भी कहता है: यह कहता है कि अतिरिक्त 20% अधिक धन खर्च करने से आपको 80% अतिरिक्त लाभ मिलता है। शेष 20% अधिक लाभ तक पहुंचने के लिए आपको अतिरिक्त 80% पैसा खर्च करने की आवश्यकता है।

आप संभावित अप्रभावित सोर्सकोड को दिखाने के लिए कोड कवरेज और म्यूटेशन कवरेज जैसे टेस्ट मेट्रिक्स लागू कर सकते हैं ।

लेकिन यहां तक ​​कि 100% कवरेज से आप यह नहीं समझ सकते हैं कि आपका कोड बग से मुक्त है।

प्रबंधन को कोडेमेट्रिक्स पसंद है। यदि "कोड कवरेज> = 80%" प्रबंधन द्वारा लागू किया जाता है, जबकि विकासशील लोग समर्थन नहीं करते हैं / स्वचालित परीक्षण की तरह, उच्च कवरेज के साथ टेस्टकोड लिखने के तरीके हैं जो सुरक्षा की झूठी भावना देने वाले कुछ भी साबित नहीं करते हैं।


1

यहाँ चाल पूरी कवरेज के बारे में चिंता करने की नहीं बल्कि आपके परिवर्तनों के जोखिम को प्रबंधित करने की है।

मान लीजिए कि आप अपनी पाइपलाइन का उपयोग उसी सटीक संस्करण को लागू करने के लिए कर रहे हैं जैसा कि पहले से ही उत्पादन में है - प्रतिगमन त्रुटि का जोखिम क्या है? शून्य (क्योंकि कोई परिवर्तन नहीं है)।

अब, मान लीजिए कि मैं किसी एक स्क्रीन पर टेक्स्ट का एक टुकड़ा बदलना चाहता हूं। मैंने यह जांचने के लिए परीक्षण जोड़ा है कि पाठ अब सही ढंग से प्रदर्शित हो गया है (मान लें कि तर्क के लिए यह पाठ का एक महत्वपूर्ण टुकड़ा है)। प्रतिगमन त्रुटियों की कोई पुष्टि करने के लिए मुझे कौन से अन्य परीक्षणों की आवश्यकता है? वास्तव में कोई नहीं ...

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

लेकिन एक मिनट रुकिए ... क्या यह लाइन सीआई और सीडी के संदर्भ में बहुत अच्छी तरह से नहीं है?

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

TLDR

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


0

यह वही मीट्रिक है जब आप अपने उत्पाद को मैन्युअल रूप से परीक्षण कर रहे होते हैं।

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

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

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