testing - इकाई, कार्यात्मक, स्वीकृति, और एकीकरण परीक्षण के बीच क्या अंतर है?




इकाई, कार्यात्मक, स्वीकृति, और एकीकरण परीक्षण (और किसी भी अन्य प्रकार के परीक्षणों के बीच अंतर क्या है जो मैं उल्लेख करने में विफल रहा) के बीच क्या अंतर है?


आप कहां देखते हैं इसके आधार पर, आपको थोड़ा अलग जवाब मिलेंगे। मैंने विषय के बारे में बहुत कुछ पढ़ा है, और यहां मेरा आसवन है; फिर, ये थोड़ा ऊनी हैं और अन्य असहमत हो सकते हैं।

यूनिट टेस्ट

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

  • सहयोगी (गैर-तुच्छ) सहयोगियों में कॉल करें
  • नेटवर्क तक पहुंचें
  • डेटाबेस हिट करें
  • फाइल सिस्टम का प्रयोग करें
  • एक थ्रेड स्पिन करें
  • आदि।

किसी भी प्रकार की निर्भरता जो धीमी / समझने / प्रारंभ करने / कुशलतापूर्वक उपयोग करने के लिए कठिन है, उसे उपयुक्त तकनीकों का उपयोग करके स्टब किया / मजाक / whatevered किया जाना चाहिए ताकि आप ध्यान केंद्रित कर सकें कि कोड की इकाई क्या कर रही है, न कि इसकी निर्भरता क्या करती है।

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

एकीकरण टेस्ट

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

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

मुख्य लाभ यह है कि उन्हें बग मिलेगी कि यूनिट परीक्षण वायरिंग बग जैसे नहीं हो सकते हैं (उदाहरण के लिए कक्षा ए का एक उदाहरण अप्रत्याशित रूप से बी का शून्य उदाहरण प्राप्त करता है) और पर्यावरण कीड़े (यह मेरी एकल-सीपीयू मशीन पर ठीक है, लेकिन मेरा सहयोगी की 4 कोर मशीन परीक्षण पास नहीं कर सकती है)। मुख्य नुकसान यह है कि एकीकरण परीक्षण अधिक कोड को स्पर्श करते हैं, कम विश्वसनीय होते हैं, विफलताओं का निदान करना कठिन होता है और परीक्षणों को बनाए रखना कठिन होता है।

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

कार्यात्मक टेस्ट

कार्यात्मक परीक्षण विनिर्देश के खिलाफ दिए गए इनपुट के परिणामों की तुलना करके शुद्धता के लिए एक विशेष सुविधा की जांच करते हैं। कार्यात्मक परीक्षण मध्यवर्ती परिणामों या साइड इफेक्ट्स के साथ खुद को चिंता नहीं करते हैं, केवल परिणाम (वे परवाह नहीं करते हैं कि एक्स करने के बाद, ऑब्जेक्ट वाई में राज्य z है)। वे विनिर्देश के भाग का परीक्षण करने के लिए लिखे गए हैं, जैसे "कॉलिंग फ़ंक्शन स्क्वायर (x) 2 रिटर्न 4 के तर्क के साथ"।

स्वीकृति टेस्ट

स्वीकृति परीक्षण दो प्रकारों में विभाजित होता प्रतीत होता है:

मानक स्वीकृति परीक्षण में पूर्ण सिस्टम पर परीक्षण करना शामिल है (उदाहरण के लिए वेब ब्राउज़र के माध्यम से अपने वेब पेज का उपयोग करना) यह देखने के लिए कि एप्लिकेशन की कार्यक्षमता विनिर्देश को पूरा करती है या नहीं। उदाहरण के लिए "ज़ूम आइकन पर क्लिक करना दस्तावेज़ दृश्य को 25% तक बढ़ा देना चाहिए।" परिणामों की कोई वास्तविक निरंतरता नहीं है, केवल एक पास या असफल परिणाम।

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

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

निष्कर्ष

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


मैं आपको एक व्यावहारिक उदाहरण के साथ समझाऊंगा और कोई सिद्धांत सामग्री नहीं:

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

जब एक जीयूआई विकसित होता है, और एक परीक्षक को आवेदन सौंपा जाता है, तो वह ग्राहक के साथ व्यावसायिक आवश्यकताओं को सत्यापित करता है और विभिन्न परिदृश्यों को निष्पादित करता है। इसे कार्यात्मक परीक्षण कहा जाता है। यहां हम आवेदन प्रवाह के साथ ग्राहक आवश्यकताओं को मैप कर रहे हैं।

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

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


यह बहुत आसान है।

  1. यूनिट परीक्षण: यह वास्तव में उन डेवलपर्स द्वारा किया गया परीक्षण है जो ज्ञान कोडिंग करते हैं। यह परीक्षण कोडिंग चरण में किया जाता है और यह सफेद बॉक्स परीक्षण का एक हिस्सा है। जब कोई सॉफ़्टवेयर विकास के लिए आता है, तो इसे कोड के टुकड़े या कोड के स्लाइस में विकसित किया जाता है जिसे यूनिट के नाम से जाना जाता है। और इन इकाइयों के व्यक्तिगत परीक्षण को डेवलपर्स द्वारा किए गए यूनिट परीक्षण कहा जाता है ताकि कुछ प्रकार की मानवीय गलतियों को पता चल सके जैसे कथन कवरेज इत्यादि।

  2. कार्यात्मक परीक्षण: यह परीक्षण परीक्षण (क्यूए) चरण में किया जाता है और यह ब्लैक बॉक्स परीक्षण का हिस्सा है। पहले लिखित परीक्षा मामलों का वास्तविक निष्पादन। यह परीक्षण वास्तव में परीक्षकों द्वारा किया जाता है, वे साइट में किसी भी कार्यक्षमता का वास्तविक परिणाम पाते हैं और इस परिणाम की तुलना अपेक्षित परिणाम से करते हैं। अगर उन्हें कोई असमानता मिली तो यह एक बग है।

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

  4. एकीकरण परीक्षण: कोड की इकाइयां (बिंदु 1 में समझाया गया) परियोजना को पूरा करने के लिए एक दूसरे के साथ एकीकृत हैं। कोड की ये इकाइयां अलग-अलग कोडिंग तकनीक में लिखी जा सकती हैं या ये अलग-अलग संस्करण हैं, इसलिए यह परीक्षण डेवलपर्स द्वारा किया जाता है ताकि यह सुनिश्चित किया जा सके कि कोड की सभी इकाइयां दूसरे के साथ संगत हों और एकीकरण का कोई मुद्दा न हो।


http://martinfowler.com/articles/microservice-testing/

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

मैं अपनी सारांश स्लाइड से उद्धरण दूंगा:

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

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

कार्यात्मक परीक्षण - सिस्टम के आंतरिक कामकाज के किसी भी ज्ञान के बिना किया जाता है। परीक्षक विभिन्न इनपुट प्रदान करके और उत्पन्न आउटपुट का परीक्षण करके, केवल निम्नलिखित आवश्यकताओं का पालन करके सिस्टम का उपयोग करने का प्रयास करेगा। इस परीक्षण को बंद-बॉक्स परीक्षण या ब्लैक-बॉक्स के रूप में भी जाना जाता है।

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

एकीकरण परीक्षण - व्यक्तिगत मॉड्यूल जो पहले से ही इकाई परीक्षण के अधीन हैं, एक दूसरे के साथ एकीकृत हैं। आम तौर पर दो दृष्टिकोण का पालन किया जाता है:

1) टॉप-डाउन
2) नीचे-ऊपर





definition