यूनिट परीक्षणों के लिए एंड-टू-एंड टेस्ट, क्या परीक्षणों को डिकोड किया जाना चाहिए?


23

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

हम इसका उपयोग अप्रत्यक्ष रूप से अंतर्निहित तर्क का परीक्षण करने के लिए भी करते हैं।

मुझे एक सहकर्मी ने बताया था कि इसका कारण यह है कि हम अंत तक एंड टेस्ट पास होने तक किसी भी बिंदु पर अंतर्निहित कार्यान्वयन को बदल सकते हैं और बदल सकते हैं।

मैं सोच रहा हूं कि क्या इस तरह का डिकोडिंग समझ में आता है या कोड की छोटी इकाइयों के लिए परीक्षण लिखने से बचने का एक तरीका है?


6
was told by a co-worker that the reason for this is that we can rip out and change the underlying implementation at any point as long as the end-to-end tests pass.- यह इकाई परीक्षणों का भी सच है। यह मुझे लगता है जैसे यूनिट टेस्ट न लिखने के बहाने एंड-टू-एंड टेस्ट का इस्तेमाल किया जा रहा है।
रॉबर्ट हार्वे

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

2
@ दिदिबुद्ध, मुझे लगता है कि सामान्य अवधारणा इकाई परीक्षणों का सच है, लेकिन एक छोटे (इकाई) दायरे में।
सैम

जवाबों:


38

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

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


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

14
मैं यूनिट परीक्षणों को अधिक मूल्यवान होने के कारण देखता हूं क्योंकि वे समस्याओं का स्थानीयकरण करते हैं। एंड-टू-एंड मूल्यवान हैं क्योंकि वे आपको विश्वास दिलाते हैं कि सब कुछ एक साथ काम करता है।
जेसन स्वेट

20

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


2
शब्दांकन पर एक त्वरित टिप्पणी; हालांकि एक सटीक विज्ञान नहीं है, कई लोग कहेंगे कि अंत-टू-एंड परीक्षण और एकीकरण परीक्षण अलग-अलग चीजें हैं। देखें stackoverflow.com/questions/4904096/...
sbrattla

6

कुछ वर्षों के बाद कोडिंग और परियोजनाओं पर काम करने के बाद मैं अपने स्वयं के प्रश्न का उत्तर दूंगा।

हां, आपको यूनिट टेस्ट लिखना चाहिए। अंत से लेकर अंत तक के परीक्षण कठिन हैं और विशेष रूप से भंगुर हैं यदि वे यूआई घटकों पर निर्भर हैं।

यदि आप Django या रेल (या अपने स्वयं के कस्टम वर्ग) जैसे ढांचे का उपयोग कर रहे हैं, तो आपके पास एक फॉर्म वर्ग होना चाहिए जो फ़ॉर्म के सत्यापन को संभाल लेगा। आपके पास देखने वाले वर्ग भी होंगे जो प्रदान किए गए टेम्प्लेट और फॉर्म को प्रदर्शित करते हैं और GET और POST अनुरोधों को संभालते हैं।

अंत करने के लिए अंत में आप होगा परीक्षण:

  1. url प्राप्त करें
  2. वैध डेटा के साथ फॉर्म भरें
  3. प्रपत्र को url पर पोस्ट करें
  4. यह सुनिश्चित करने के लिए जाँच करें कि डेटाबेस को अपडेट किया गया है या वैध फॉर्म के परिणामस्वरूप कुछ कार्रवाई निष्पादित की गई है

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

इकाई परीक्षणों के साथ इसे फिर से आज़माएँ:

  1. GET विधि देखें
  2. नकली / नकली फॉर्म के साथ POST विधि को देखें
  3. वैध डेटा के साथ फॉर्म का परीक्षण करें
  4. अमान्य डेटा वाले फ़ॉर्म का परीक्षण करें
  5. प्रपत्र के दुष्प्रभावों का परीक्षण करें

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

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


एक अन्य डेटा बिंदु, Google परीक्षण ब्लॉग कहता है कि कोई और अधिक परीक्षण 2 करने के लिए नहीं: googletesting.blogspot.ca/2015/04/…
रुडोल्फ

5

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

हालांकि जैसा कि कहा गया है, आपको यूनिट परीक्षण भी करना चाहिए, क्योंकि एकीकरण परीक्षण में किनारे के मामलों को पकड़ने के लिए यह अधिक जटिल है।


1

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

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

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


मुझे इस बात की चिंता है कि हम स्वीकार्यता परीक्षणों की ओर अग्रसर होंगे जो छोटी इकाइयों के बजाय बड़ी कक्षाओं या विधियों की ओर ले जाते हैं।
रुडोल्फ ओलह

@omouse: सिर्फ इसलिए कि आप यूनिट टेस्ट नहीं लिख रहे हैं, कोई कारण नहीं है कि आप अच्छे कोड न लिखें। हालाँकि, यदि आपके पास प्रोग्रामर हैं जो अनुभवहीन हैं या सिर्फ बुरी आदतें हैं, तो लाभ लागत को कम कर सकते हैं। किसी भी मामले में आपको विश्लेषण करना चाहिए और इसे एक सरल समीकरण में कम करना चाहिए। For Any Practice: Practice iff Benefit > Cost
आहारबुद्ध
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.