कार्यात्मक परीक्षण से अधिक यूनिट टेस्ट के लिए उचित लाभ क्या हैं, जिन्हें यूनिट टेस्ट कहा जाता है


9

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

मेरे सवाल हैं, मैं उचित धक्का देने के लिए उचित इकाई परीक्षण की वास्तविक दुनिया मूर्त लाभ क्या कर सकता हूं? क्या वहां पर कोई? क्या मैं सिर्फ यह कहकर कि वह खराब यूनिट टेस्ट (भले ही वे काम करते हैं) खराब हैं? क्या कोड कवरेज उतना ही प्रभावी है?


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

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

1
हम तृतीय-पक्ष JAR एकीकरण का उपयोग नहीं करते हैं। :) हम, हालांकि, आवश्यकतानुसार स्टब्स बनाते हैं; मॉकिंग फ्रेमवर्क उसी को प्राप्त करने के लिए एक सुविधा है। यदि यह प्रक्रिया बहुत कठिन साबित होती है, हालांकि, हम अपने कोडिंग दृष्टिकोण पर पुनर्विचार करते हैं।
रॉबर्ट हार्वे

जवाबों:


8
  • साधन

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

  • विश्वसनीयता

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

  • अतिरिक्त रखरखाव

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

  • संगामिति

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

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


4

मेरे सवाल हैं, मैं उचित धक्का देने के लिए उचित इकाई परीक्षण की वास्तविक दुनिया मूर्त लाभ क्या कर सकता हूं?

अच्छी इकाई परीक्षण (प्रति स्वच्छ कोड, और अन्यत्र) हैं:

  • तेज
  • स्वतंत्र
  • repeatable
  • स्व मान्य
  • समयोचित

सही इकाई परीक्षण नहीं होने से पहले तीन (और आमतौर पर अंतिम एक) का उल्लंघन होता है। यह कुछ महत्वपूर्ण समस्याओं की ओर जाता है:

  1. आपकी परीक्षाएँ धीमी हैं। धीमे-धीमे परीक्षण बार-बार चलते हैं। जो टेस्ट नहीं चलाए जाते वे लगभग बेकार हैं।
  2. आपके परीक्षण आपके द्वारा परीक्षण किए गए कोड से असंबंधित कारणों के कारण विफल हो सकते हैं। इससे यह पता लगाना कठिन हो जाता है कि परीक्षण विफल क्यों हुए, समय बर्बाद कर रहे हैं और लोगों को कोड के बजाय पर्यावरण को दोष देने के लिए अग्रणी बना रहे हैं।
  3. जैसे-जैसे डेटाबेस बदलता है, आपके परिणाम बदलते हैं। एक अच्छा सुसंगत, परीक्षण के लिए बनाए रखा राज्य में कुछ डेटाबेस प्राप्त करना थकाऊ, कष्टप्रद और त्रुटि-प्रवण है।

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


2

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

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

मेरा अनुमान है कि आप अपने बॉस को एक मजबूत व्यवसाय के मामले में पेश नहीं कर पाएंगे क्योंकि कोई भी नहीं है।


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

1

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

मौजूदा वर्किंग कोड को फेंकने और उपयोगकर्ताओं को अनिवार्य रूप से शून्य लाभ के लिए भारी मात्रा में समय और धन खर्च करने के औचित्य के लिए महीने के ढांचे के नवीनतम स्वाद का उपयोग करना चाहते हैं।


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

1

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

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