इकाई, कार्यात्मक, स्वीकृति और एकीकरण परीक्षण (और किसी अन्य प्रकार के परीक्षण जो मैं उल्लेख करने में विफल रहा) के बीच अंतर क्या है?
इकाई, कार्यात्मक, स्वीकृति और एकीकरण परीक्षण (और किसी अन्य प्रकार के परीक्षण जो मैं उल्लेख करने में विफल रहा) के बीच अंतर क्या है?
जवाबों:
जहाँ आप देखते हैं, उसके आधार पर आपको थोड़े अलग उत्तर मिलेंगे। मैंने इस विषय के बारे में बहुत कुछ पढ़ा है, और यहाँ मेरा आसवन है; फिर से, ये थोड़े ऊनी होते हैं और अन्य असहमत हो सकते हैं।
यूनिट टेस्ट
कार्यक्षमता की सबसे छोटी इकाई का परीक्षण, आम तौर पर एक विधि / कार्य (जैसे एक विशेष राज्य के साथ एक वर्ग दिया जाता है, वर्ग पर x विधि को कॉल करने से y होने का कारण बनता है)। यूनिट परीक्षणों को एक विशेष सुविधा पर केंद्रित किया जाना चाहिए (जैसे, स्टैक खाली होने पर पॉप विधि को कॉल करना InvalidOperationException
)। यह जो कुछ भी छूता है उसे स्मृति में किया जाना चाहिए; इसका मतलब यह है कि परीक्षण कोड और परीक्षण के तहत कोड नहीं होना चाहिए:
किसी भी प्रकार की निर्भरता जो धीमी / कठिन है / समझने / आरंभ करने / हेरफेर करने के लिए उचित तकनीकों का उपयोग करते हुए ठूंसा / ठगा / ठगा जाना चाहिए, ताकि आप इस बात पर ध्यान केंद्रित कर सकें कि कोड की इकाई क्या कर रही है, न कि इसकी निर्भरता क्या है।
संक्षेप में, यूनिट परीक्षण यथासंभव सरल, डिबग करने में आसान, विश्वसनीय (बाहरी कारकों को कम करने के कारण) होते हैं, निष्पादित करने में तेजी से और यह साबित करने में मदद करते हैं कि आपके प्रोग्राम फ़ंक्शन के सबसे छोटे बिल्डिंग ब्लॉक पहले से ही एक साथ रखे गए हैं। चेतावनी यह है कि, यद्यपि आप यह साबित कर सकते हैं कि वे अलगाव में पूरी तरह से काम करते हैं, कोड की इकाइयाँ तब फूट सकती हैं, जब संयुक्त हो जाती हैं जो हमें ...
एकीकरण टेस्ट
एकीकरण परीक्षण कोड की इकाइयों को जोड़कर इकाई परीक्षणों का निर्माण करते हैं और परीक्षण करते हैं कि परिणामस्वरूप संयोजन सही ढंग से कार्य करता है। यह या तो किसी एक प्रणाली का जन्मदाता हो सकता है, या कुछ उपयोगी करने के लिए कई प्रणालियों को एक साथ जोड़ सकता है। इसके अलावा, एक और चीज जो इकाई परीक्षणों से एकीकरण परीक्षणों को अलग करती है वह है पर्यावरण। एकीकरण परीक्षण धागे का उपयोग कर सकते हैं, डेटाबेस तक पहुंच सकते हैं या यह सुनिश्चित करने के लिए कि सभी कोड और विभिन्न पर्यावरण परिवर्तन सही ढंग से काम करेंगे , जो कुछ भी आवश्यक है।
यदि आपने कुछ क्रमांकन कोड बनाए हैं और इकाई ने डिस्क को छुए बिना अपने सराय का परीक्षण किया है, तो आपको कैसे पता चलेगा कि जब आप लोड कर रहे हैं और डिस्क पर सहेज रहे हैं तो यह कैसे काम करेगा? हो सकता है कि आप फिल्म्स को फ्लश और डिस्पोज करना भूल गए हों। हो सकता है कि आपकी फ़ाइल अनुमतियां गलत हों और आपने मेमोरी स्ट्रीम का उपयोग करते हुए सराय का परीक्षण किया हो। सुनिश्चित करने के लिए पता लगाने का एकमात्र तरीका यह है कि इसे उत्पादन के लिए सबसे नज़दीकी वातावरण का उपयोग करके 'असली के लिए' परीक्षण किया जाए।
मुख्य लाभ यह है कि वे बग पाएंगे कि यूनिट परीक्षण वायरिंग बग (जैसे कि कक्षा ए का एक उदाहरण अप्रत्याशित रूप से बी का एक शून्य उदाहरण प्राप्त करता है) और पर्यावरण बग नहीं मिल सकता है (यह मेरे सिंगल-सीपीयू मशीन पर ठीक चलता है, लेकिन मेरी सहयोगी की 4 कोर मशीन परीक्षण पास नहीं कर सकती)। मुख्य नुकसान यह है कि एकीकरण परीक्षण अधिक कोड को छूते हैं, कम विश्वसनीय होते हैं, असफलताओं का निदान करना कठिन होता है और परीक्षण बनाए रखना कठिन होता है।
इसके अलावा, एकीकरण परीक्षण जरूरी नहीं है कि एक पूर्ण सुविधा काम करता है। उपयोगकर्ता मेरे कार्यक्रमों के आंतरिक विवरण की परवाह नहीं कर सकता है, लेकिन मैं करता हूं!
कार्यात्मक परीक्षण
विनिर्देश के खिलाफ दिए गए इनपुट के लिए परिणामों की तुलना करके कार्यात्मक परीक्षण शुद्धता के लिए एक विशेष सुविधा की जांच करते हैं। कार्यात्मक परीक्षण खुद को मध्यवर्ती परिणामों या साइड-इफेक्ट्स के साथ चिंतित नहीं करते हैं, बस परिणाम (वे परवाह नहीं करते हैं कि एक्स करने के बाद, ऑब्जेक्ट वाई में स्थिति है)। उन्हें विनिर्देश के भाग का परीक्षण करने के लिए लिखा जाता है जैसे, "कॉलिंग फंक्शन स्क्वायर (x) 2 रिटर्न 4 के तर्क के साथ"।
स्वीकृति टेस्ट
स्वीकृति परीक्षण को दो प्रकारों में विभाजित किया गया लगता है:
मानक स्वीकृति परीक्षण में पूर्ण प्रणाली पर परीक्षण करना शामिल है (उदाहरण के लिए वेब ब्राउज़र के माध्यम से आपके वेब पेज का उपयोग करना) यह देखने के लिए कि क्या एप्लिकेशन की कार्यक्षमता विनिर्देश को संतुष्ट करती है। उदाहरण के लिए "ज़ूम आइकन पर क्लिक करने से दस्तावेज़ का दृश्य 25% बढ़ जाना चाहिए।" परिणामों की कोई वास्तविक निरंतरता नहीं है, बस एक पास या असफल परिणाम है।
लाभ यह है कि परीक्षण सादे अंग्रेजी में वर्णित हैं और यह सुनिश्चित करता है कि सॉफ्टवेयर, एक संपूर्ण के रूप में, सुविधा पूर्ण है। नुकसान यह है कि आपने परीक्षण पिरामिड को एक और स्तर ऊपर ले जाया है। स्वीकृति परीक्षण कोड के पहाड़ों को छूते हैं, इसलिए विफलता को ट्रैक करना मुश्किल हो सकता है।
इसके अलावा, चुस्त सॉफ्टवेयर विकास में, उपयोगकर्ता स्वीकृति परीक्षण में विकास के दौरान सॉफ़्टवेयर के ग्राहक द्वारा / उसके लिए बनाई गई उपयोगकर्ता कहानियों को दर्पण करने के लिए परीक्षण बनाना शामिल है। यदि परीक्षण पास होते हैं, तो इसका मतलब है कि सॉफ़्टवेयर को ग्राहकों की आवश्यकताओं को पूरा करना चाहिए और कहानियों को पूर्ण माना जा सकता है। एक स्वीकृति परीक्षण सूट मूल रूप से एक निष्पादन योग्य विनिर्देश है जो एक डोमेन विशिष्ट भाषा में लिखा गया है जो सिस्टम के उपयोगकर्ताओं द्वारा उपयोग की जाने वाली भाषा में परीक्षणों का वर्णन करता है।
निष्कर्ष
वे सभी पूरक हैं। कभी-कभी एक प्रकार पर ध्यान केंद्रित करना या उन्हें पूरी तरह से बचाना फायदेमंद होता है। मेरे लिए मुख्य अंतर यह है कि कुछ परीक्षण प्रोग्रामर के दृष्टिकोण से चीजों को देखते हैं, जबकि अन्य ग्राहक / अंत उपयोगकर्ता फोकस का उपयोग करते हैं।
महत्वपूर्ण बात यह है कि आप जानते हैं कि उन शब्दों का आपके सहयोगियों के लिए क्या मतलब है। विभिन्न समूहों के उदाहरण के लिए "पूर्ण अंत-से-अंत" परीक्षणों के कहने पर उनका क्या अर्थ है, इसकी थोड़ी भिन्न परिभाषाएँ होंगी।
मैं हाल ही में उनके परीक्षणों के लिए Google के नामकरण प्रणाली में आया था, और मुझे यह पसंद है - वे सिर्फ छोटे, मध्यम और बड़े का उपयोग करके तर्कों को दरकिनार करते हैं। यह तय करने के लिए कि परीक्षण किस श्रेणी में फिट बैठता है, वे कुछ कारकों को देखते हैं - इसे चलाने में कितना समय लगता है, क्या यह नेटवर्क, डेटाबेस, फाइल सिस्टम, बाहरी सिस्टम और इतने पर पहुंचता है।
http://googletesting.blogspot.com/2010/12/test-sizes.html
मुझे लगता है कि आपके वर्तमान कार्यस्थल के लिए छोटे, मध्यम और बड़े के बीच अंतर Google के भिन्न हो सकते हैं।
हालांकि, यह केवल गुंजाइश के बारे में नहीं है, बल्कि उद्देश्य के बारे में है। परीक्षणों के लिए अलग-अलग दृष्टिकोणों के बारे में मार्क का बिंदु, जैसे प्रोग्रामर बनाम ग्राहक / अंत उपयोगकर्ता, वास्तव में महत्वपूर्ण है।
http://martinfowler.com/articles/microservice-testing/
मार्टिन फाउलर का ब्लॉग पोस्ट टेस्ट कोड (विशेष रूप से एक माइक्रो-सर्विसेज आर्किटेक्चर) में रणनीतियों के बारे में बोलता है, लेकिन यह किसी भी एप्लिकेशन पर लागू होता है।
मैं उनके सारांश स्लाइड से उद्धृत करूंगा:
- यूनिट परीक्षण - यह निर्धारित करने के लिए कि क्या वे अपेक्षा के अनुरूप व्यवहार करते हैं, आवेदन में परीक्षण योग्य सॉफ़्टवेयर के सबसे छोटे टुकड़ों का उपयोग करते हैं।
- एकीकरण परीक्षण - इंटरफ़ेस दोष का पता लगाने के लिए घटकों के बीच संचार पथ और बातचीत को सत्यापित करें।
- घटक परीक्षण - परीक्षण के तहत सिस्टम के एक हिस्से में एक्सरसाइज किए गए सॉफ्टवेयर के दायरे को सीमित करते हैं, आंतरिक कोड इंटरफेस के माध्यम से सिस्टम में हेरफेर करते हैं और अन्य घटकों से परीक्षण के तहत कोड को अलग करने के लिए टेस्ट डबल्स का उपयोग करते हैं।
- अनुबंध परीक्षण - एक बाहरी सेवा की सीमा पर बातचीत को सत्यापित करता है कि यह एक उपभोग सेवा द्वारा अपेक्षित अनुबंध को पूरा करता है।
- एंड-टू-एंड परीक्षण - सत्यापित करें कि एक सिस्टम बाहरी आवश्यकताओं को पूरा करता है और अपने लक्ष्यों को प्राप्त करता है, पूरे सिस्टम का परीक्षण, अंत से अंत तक।
यूनिट टेस्टिंग - जैसा कि नाम से पता चलता है, यह विधि ऑब्जेक्ट स्तर पर परीक्षण करती है। किसी भी त्रुटि के लिए व्यक्तिगत सॉफ़्टवेयर घटकों का परीक्षण किया जाता है। इस परीक्षण के लिए कार्यक्रम के ज्ञान की आवश्यकता होती है और परीक्षण कोड यह जांचने के लिए बनाए जाते हैं कि क्या सॉफ्टवेयर जैसा व्यवहार करता है वैसा ही किया जाता है।
कार्यात्मक परीक्षण - सिस्टम के आंतरिक काम के किसी भी ज्ञान के बिना किया जाता है। परीक्षक अलग-अलग इनपुट प्रदान करके और उत्पन्न आउटपुट का परीक्षण करके, केवल निम्नलिखित आवश्यकताओं द्वारा प्रणाली का उपयोग करने का प्रयास करेगा। इस परीक्षण को बंद-बॉक्स परीक्षण या ब्लैक-बॉक्स के रूप में भी जाना जाता है।
स्वीकृति परीक्षण - यह अंतिम परीक्षण है जो क्लाइंट को सॉफ्टवेयर सौंपने से पहले किया जाता है। यह सुनिश्चित करने के लिए किया जाता है कि विकसित सॉफ्टवेयर सभी ग्राहकों की आवश्यकताओं को पूरा करता है। स्वीकृति परीक्षण के दो प्रकार हैं - एक जो विकास टीम के सदस्यों द्वारा किया जाता है, जिसे आंतरिक स्वीकृति परीक्षण (अल्फा परीक्षण) के रूप में जाना जाता है, और दूसरा जो ग्राहक या अंतिम उपयोगकर्ता द्वारा किया जाता है (बीटा परीक्षण) के रूप में जाना जाता है।
एकीकरण परीक्षण - व्यक्तिगत मॉड्यूल जो पहले से ही इकाई परीक्षण के अधीन हैं, एक दूसरे के साथ एकीकृत हैं। आम तौर पर दो दृष्टिकोणों का पालन किया जाता है:
1) टॉप-डाउन
2) बॉटम-अप
यह बहुत सरल है।
यूनिट परीक्षण: यह वास्तव में डेवलपर्स द्वारा किया गया परीक्षण है जिसमें कोडिंग ज्ञान है। यह परीक्षण कोडिंग चरण में किया जाता है और यह सफेद बॉक्स परीक्षण का एक हिस्सा है। जब कोई सॉफ्टवेयर विकास के लिए आता है, तो उसे कोड के टुकड़े या एक इकाई के रूप में ज्ञात कोड के स्लाइस में विकसित किया जाता है। और इन इकाइयों के व्यक्तिगत परीक्षण को डेवलपर्स द्वारा किए गए यूनिट परीक्षण कहा जाता है ताकि किसी तरह की मानवीय गलतियों का पता लगाया जा सके जैसे कि बयान कवरेज आदि का गायब होना।
कार्यात्मक परीक्षण: यह परीक्षण परीक्षण (क्यूए) चरण में किया जाता है और यह ब्लैक बॉक्स परीक्षण का एक हिस्सा है। पहले लिखित परीक्षा के मामलों का वास्तविक निष्पादन। यह परीक्षण वास्तव में परीक्षकों द्वारा किया जाता है, वे साइट में किसी भी कार्यक्षमता का वास्तविक परिणाम पाते हैं और इस परिणाम की अपेक्षा परिणाम से करते हैं। अगर उन्हें कोई असमानता मिली तो यह एक बग है।
स्वीकृति परीक्षण: UAT के रूप में जाना जाता है। और यह वास्तव में परीक्षक के साथ-साथ डेवलपर्स, प्रबंधन टीम, लेखक, लेखकों और इस परियोजना में शामिल सभी लोगों द्वारा किया जाता है। यह सुनिश्चित करने के लिए कि परियोजना अंततः बग मुक्त होने के लिए तैयार है।
एकीकरण परीक्षण: परियोजना को पूरा करने के लिए कोड की इकाइयाँ (बिंदु 1 में बताई गई) एक दूसरे के साथ एकीकृत होती हैं। कोड की इन इकाइयों को अलग-अलग कोडिंग तकनीक में लिखा जा सकता है या ये अलग-अलग संस्करण हो सकते हैं, इसलिए डेवलपर्स द्वारा यह सुनिश्चित करने के लिए यह परीक्षण किया जाता है कि कोड की सभी इकाइयाँ अन्य के साथ संगत हैं और एकीकरण का कोई मुद्दा नहीं है।
अत्यधिक नकल और शुद्ध इकाई-परीक्षण के खिलाफ कुछ (अपेक्षाकृत) हालिया विचार:
मैं आपको एक व्यावहारिक उदाहरण और कोई सिद्धांत सामग्री के साथ समझाऊंगा:
एक डेवलपर कोड लिखता है। अभी कोई GUI लागू नहीं हुआ है। इस स्तर पर परीक्षण सत्यापित करता है कि फ़ंक्शन सही तरीके से काम करते हैं और डेटा प्रकार सही हैं। परीक्षण के इस चरण को यूनिट परीक्षण कहा जाता है।
जब जीयूआई विकसित होता है, और आवेदन एक परीक्षक को सौंपा जाता है, तो वह ग्राहक के साथ व्यावसायिक आवश्यकताओं की पुष्टि करता है और विभिन्न परिदृश्यों को निष्पादित करता है। इसे कार्यात्मक परीक्षण कहा जाता है। यहां हम एप्लिकेशन के प्रवाह के साथ क्लाइंट आवश्यकताओं की मैपिंग कर रहे हैं।
एकीकरण परीक्षण: मान लें कि हमारे आवेदन में दो मॉड्यूल हैं: मानव संसाधन और वित्त। एचआर मॉड्यूल को पहले वितरित और परीक्षण किया गया था। अब वित्त विकसित किया गया है और परीक्षण के लिए उपलब्ध है। अन्योन्याश्रित विशेषताएं भी अब उपलब्ध हैं, इसलिए इस चरण में, आप दोनों के बीच संचार बिंदुओं का परीक्षण करेंगे और सत्यापित करेंगे कि वे आवश्यकताओं के अनुसार काम कर रहे हैं।
प्रतिगमन परीक्षण एक और महत्वपूर्ण चरण है, जो किसी भी नए विकास या बग फिक्स के बाद किया जाता है। इसका उद्देश्य पहले से काम कर रहे कार्यों को सत्यापित करना है।
इकाई परीक्षण: किसी अनुप्रयोग में व्यक्तिगत मॉड्यूल या स्वतंत्र घटक का परीक्षण इकाई परीक्षण के लिए जाना जाता है, इकाई परीक्षण डेवलपर द्वारा किया जाएगा।
एकीकरण परीक्षण: संचार को सत्यापित करने के लिए सभी मॉड्यूलों के संयोजन और अनुप्रयोग का परीक्षण और मॉड्यूल के बीच डेटा प्रवाह ठीक से काम कर रहा है या नहीं, यह परीक्षण भी डेवलपर्स द्वारा किया जाता है।
किसी एप्लिकेशन की व्यक्तिगत कार्यक्षमता की जाँच करने वाला फ़ंक्शनल परीक्षण का अर्थ कार्यात्मक परीक्षण है
स्वीकृति परीक्षण इस परीक्षण के अंत उपयोगकर्ता या ग्राहक द्वारा किया जाता है कि क्या बिल्ड आवेदन ग्राहक की आवश्यकता के अनुसार है, और ग्राहक विनिर्देश यह परीक्षण स्वीकार करने के लिए जाना जाता है