2009-02-05 12 views
10

प्रश्न Am I unit testing or integration testing? पर मैंने उत्तर दिया है, थोड़ा उत्तेजक: Do your test and let other people spend time with taxonomyपरीक्षण: इकाई बनाम एकीकरण बनाम दूसरों, अलगाव की आवश्यकता क्या है?

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

मैंने सोचा कि मेरा जवाब या तो दृढ़ता से नीचे या दृढ़ता से उभरा होगा। वास्तव में दोनों पांच अपवॉट्स और चार डाउनवॉट्स के साथ हुआ। यहां तक ​​कि पहली टिप्पणी भी संकोच की तरह थी (रास्ते में आपके ऊपर के लिए धन्यवाद!)।

तो, मेरा प्रश्न यह है कि मेरे लिए एक विवाद दिखाई देने और विभिन्न दृष्टिकोणों को इकट्ठा करने के बारे में बेहतर तरीके से समझने का लक्ष्य है कि परीक्षण के विभिन्न स्तरों के बीच यह अलगाव प्रासंगिक है या नहीं।

क्या मेरी राय गलत है? क्या अन्य वर्कफ़्लो मौजूद हैं जो इस अलगाव (शायद चुस्त विधियों) पर जोर नहीं देते हैं? इस विषय पर आपका अनुभव क्या है?

प्रेसिजन: मैं परिभाषाओं के बारे में पूरी तरह से अवगत हूं (उन लोगों के लिए, this question देखें)। मुझे लगता है कि मुझे सॉफ्टवेयर परीक्षण के बारे में सबक की जरूरत नहीं है। लेकिन अगर आपके उत्तर की आवश्यकता है तो कुछ पृष्ठभूमि प्रदान करने के लिए स्वतंत्र महसूस करें।

उत्तर

13

प्रदर्शन आम तौर पर "कार्यात्मक" परीक्षणों से "यूनिट" परीक्षण को अलग करने का कारण है।

यूनिट परीक्षणों के समूह जितनी जल्दी हो सके निष्पादित करना चाहिए और प्रत्येक संकलन के बाद दौड़ने में सक्षम होना चाहिए।

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

यदि सभी परीक्षण एक साथ समूहीकृत किए गए थे, तो मैं कभी भी चेकइन से पहले कभी भी कोई परीक्षण नहीं चलाऊंगा जो विकास की मेरी समग्र गति को धीमा कर देगा। मेरी दुनिया से

+0

यदि मैं सही ढंग से समझता हूं, तो आप अपने परीक्षण समूहों का निर्माण करते हैं कि वे कितनी तेज़ हैं और आप उन्हें कितनी बार चलाते हैं। मुझे लगता है कि यह एक अच्छा मुद्दा है, धन्यवाद। – mouviciel

+0

+1 जितना अधिक परीक्षण चलते हैं, उतना ही कम डेवलपर टेस्ट सूट चलाने जा रहा है। –

+0

दिलचस्प। तो हो सकता है कि हम परीक्षण के अनुमानित अमूर्त स्तर के बावजूद 'इकाई/एकीकरण/कार्यात्मक' के बीच अंतर नहीं करना चाहते हैं, बल्कि 'तेज' और 'धीमी' के बीच अंतर करना चाहते हैं। यह एक अधिक शक्तिशाली प्रतिमान हो सकता है क्योंकि कुछ सरल (क्ली) ऐप्स में धीमी गति से परीक्षण नहीं हो सकते हैं और निम्न स्तर (इकाई) परीक्षण और उच्च स्तरीय (एकीकरण/कार्यात्मक) परीक्षण के बीच भेदभाव वास्तव में एक व्यर्थ वर्गीकरण अभ्यास होगा। – PSkocik

1

परिभाषाएं:

यूनिट परीक्षण - कोड का स्पष्ट रास्तों का परीक्षण करने और है कि यह उम्मीद परिणाम देता है।

फ़ंक्शन परीक्षण - सॉफ़्टवेयर की परिभाषाओं की जांच करें और सभी स्वीकार्य श्रेणियों के माध्यम से परिभाषित हर पथ का परीक्षण करें। रिग्रेशन परीक्षण लिखने के लिए एक अच्छा समय है।

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

एकीकरण परीक्षण - इसे एक सामान्य सिस्टम सेटअप पर चलाएं और देखें कि अन्य सॉफ़्टवेयर परीक्षण किए गए किसी के साथ संघर्ष का कारण बनता है या नहीं।

8

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

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

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

+0

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

+1

@mouviciel सामान्य रूप से, हाँ। यूनिट परीक्षण * आमतौर पर * "फास्ट टेस्ट" श्रेणी में सही हो जाते हैं जबकि एकीकरण परीक्षण * आमतौर पर * अधिक समय तक परीक्षण करने के बाद * अधिक समय लेते हैं। जैसा कि आपने पाया है, हालांकि, सभी कार्यक्रम समान नहीं होते हैं और कोड के कुछ टुकड़े जिन्हें आम तौर पर यूनिट माना जाएगा, को चलाने में काफी समय लग सकता है। हालांकि, मुझे संदेह होगा कि * अधिकांश * कार्यक्रमों के लिए वहां लिखा गया है कि तेज परीक्षण - इकाई/धीमी परीक्षा - एकीकरण भिन्नता कार्य करता है। ध्यान दें कि आपके पास ऐसे परीक्षणों का एक सेट होना चाहिए जो आपको तुरंत किए गए परिवर्तनों की स्थिरता दिखाने के लिए जल्दी से चलें। –

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