मुझे यूनिट परीक्षणों और एकीकरण परीक्षणों के बीच की रेखा कहां खींचनी चाहिए? क्या उन्हें अलग होना चाहिए?


11

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

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

Fake HTTP रिक्वेस्ट ऑब्जेक्ट -> MVC फ्रेमवर्क -> HTTP रिस्पांस ऑब्जेक्ट -> चेक रिस्पांस सही है

क्योंकि यह सभी किसी भी राज्य या विशेष उपकरण (ब्राउज़र स्वचालन आदि) के बिना संभव है, मैं वास्तव में नियमित इकाई परीक्षण रूपरेखा (मैं NUnit का उपयोग करता हूं) के साथ आसानी से कर सकता हूं।

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


एकीकरण परीक्षण में एक साथ आपके घटकों के एक से अधिक वास्तविक कार्यान्वयन का परीक्षण शामिल है (वास्तविक कार्यान्वयन का मतलब है कोई नकली)।
केमोडा

1
यह प्रश्न परीक्षण और क्यूए से संबंधित है। इसलिए मैं इसे उसी साइट पर माइग्रेट करने का सुझाव दूंगा , SQA on Stack Exchange ( sqa.stackexchange.com )
dzieciou

@dzieciou को भी नहीं पता था कि अस्तित्व में है!
अर्लज़

जवाबों:


19

एकीकरण बनाम इकाई परीक्षण

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

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

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

इसका मतलब यह जानना कि क्या एक मॉडल वास्तव में एक डेटाबेस में संग्रहीत है या यदि एल्गोरिथ्म एक्स विफल होने के बाद एक चेतावनी वास्तव में जारी की जाती है।

परीक्षण संचालित विकास

इसे एक कदम पीछे ले जाना और टेस्ट ड्रिवेन डेवलपमेंट (टीडीडी) को देखते हुए कई बातों पर ध्यान देना है।

  1. आप अपने यूनिट टेस्ट को लिखने से पहले आप वास्तव में उस कोड को लिखते हैं जो इसे पास करता है।
  2. आप परीक्षा पास करते हैं, इसे पूरा करने के लिए सिर्फ पर्याप्त कोड लिखते हैं।
  3. अब जब परीक्षा पास हो गई तो एक कदम वापस लेने का समय आ गया है। क्या इस नई कार्यक्षमता के साथ रिफ्लेक्टर के लिए कुछ है? आप इसे सुरक्षित रूप से कर सकते हैं क्योंकि सब कुछ परीक्षणों द्वारा कवर किया गया है।

एकीकरण पहले बनाम एकीकरण अंतिम

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

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

चलन

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

हम आम तौर पर एक कक्षा के लिए एक परीक्षण फ़ाइल का उपयोग करते हैं।

पढ़ने का सुझाव दिया

  1. बढ़ते ऑब्जेक्ट-ओरिएंटेड सॉफ्टवेयर, परीक्षणों द्वारा निर्देशित यह पुस्तक एकीकरण परीक्षण के पहले कार्यप्रणाली का एक बहुत अच्छा उदाहरण है
  2. यूनिट टेस्टिंग की कला डॉट.नेट में उदाहरणों के साथ, यूनिट टेस्टिंग में डॉट.नेट के उदाहरणों के साथ: यूनिट-टेस्टिंग के पीछे सिद्धांतों पर बहुत अच्छी पुस्तक।
  3. TDD (मुक्त लेख) पर रॉबर्ट सी। मार्टिन : पहले दो लेख पढ़िए जो उन्होंने वहां से भी जुड़े थे।

2

किसी भी परीक्षण रणनीति में क्या महत्वपूर्ण है, टेस्ट कवरेज है - यानी यह दिखाने में सक्षम है कि सभी कार्यक्षमता का परीक्षण किया जा रहा है।

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

मुझे यूनिट परीक्षणों और एकीकरण परीक्षणों के बीच की रेखा कहां खींचनी चाहिए?

यह देखते हुए कि आमतौर पर इंटरग्रेशन टेस्टिंग आसान, तेज और सस्ती होती है, लाइन को जितना दूर तक ले जा सकते हैं, उतने खींचिए ...

क्या मुझे यूनिट परीक्षणों के साथ एक समय में केवल एक वर्ग (जितना संभव हो) परीक्षण करना चाहिए?

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

इसके अलावा, एकीकरण परीक्षणों को मेरी इकाई परीक्षण परियोजना के समान परीक्षण परियोजना में रखा जाना चाहिए?

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


2
मैं यह देखने में विफल हूं कि एकीकरण परीक्षण कितना आसान, तेज या सस्ता है। मेरे लिए यह सभी के विपरीत है 3. और एकीकरण परीक्षण आमतौर पर इकाई परीक्षणों की तुलना में अधिक भंगुर होते हैं
अर्लज़

0

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

यूनिट परीक्षणों के साथ मैं आमतौर पर एक फ़ाइल में केवल एक वर्ग (SUT) का परीक्षण करता हूं।

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