2008-09-23 20 views
12

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

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

हमारी परियोजना एक सतत वृद्धिशील मॉडल पर चलाया जाता है।

उत्तर

6

'यूनिट परीक्षण की सीमाओं' के प्रश्न पर SO में से एक जवाब यह था कि एक यूनिट परीक्षण को तब तक गठित किया जाता है जब इसे फ़ंक्शन के बजाय इंटिग्रेशन के साथ कुछ भी करने के लिए उपयोग किया जाता है। बाहरी सेवाओं से कनेक्ट करने और उपयोग करने (डेटाबेस, किसी अन्य सर्वर पर SSH'ing, आदि) और उपयोगकर्ता इंटरफेस दो उदाहरण थे।

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

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

1

दो अलग अलग बातें

  • यूनिट टेस्ट - डेवलपर - यदि कोड सही
  • स्वीकृति परीक्षण है सत्यापित करें।

दो श्रेणियां अलग-अलग होनी चाहिए और दोनों एक समान भूमिका निभाएं .. एक को छोड़ना अच्छी तरह से नहीं है। जैसा कि आपने उल्लेख किया है टेस्ट स्क्रिप्ट दूसरी श्रेणी में आती है। मैं इस उद्देश्य के लिए FIT/Fitnesse जैसी कुछ सुझाऊंगा। यदि यह व्यवहार्य नहीं है, तो परीक्षण-स्क्रिप्ट/रिकॉर्ड-रीप्ले शैली उपकरण। लेकिन अच्छे यूनिट परीक्षणों को फेंक न दें .. 'परीक्षण बनाए रखने की लागत महंगी हो गई है' का क्या मतलब है?

+0

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

+0

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

+1

यह थ्रेड नेक्रोमेंसी का थोड़ा सा हो सकता है ... लेकिन सिर्फ इसलिए कि कुछ "यूनिट टेस्ट" नहीं है इसका मतलब यह नहीं है कि यह स्वीकृति परीक्षण है। यह सत्यापित करने की कई परतें हैं कि कोड सही है, इकाई परत से पूरी तरह से पूरे सिस्टम तक एक साथ फिट बैठता है। मैं अपने काम के स्थान पर बाहरी टेस्ट स्क्रिप्ट का उपयोग करता हूं, और वे * निश्चित रूप से * केवल सत्यापित कर रहे हैं कि कोड सही है, और यह नहीं कि सही कोड विकसित किया गया है। – Tom

3

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

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

+0

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

2

वास्तव में, वहाँ testings के चार स्तर हैं, उनमें से 3 स्क्रिप्ट शामिल हो सकता है, पहले एक नहीं करता है।

  • इकाई परीक्षण: कक्षा या प्रणाली के बाकी हिस्सों की पूरी अलगाव में विधि का परीक्षण
  • विधानसभा परीक्षण: प्रणाली (है कि एक से है के लिए बाहरी अन्य घटकों से पूरा अलगाव में प्रणाली के भीतर एक परिदृश्य का परीक्षण विभिन्न कार्यात्मक डोमेन)
  • एकीकरण परीक्षण: बाह्य भाग से आने वाले इनपुट सहित आउटपुट का परीक्षण करें, और आउटपुट बाहरी अन्य सिस्टम (जो अन्य कार्यात्मक डोमेन से है) में जा रहे हैं।
  • स्वीकृति परीक्षण: अंतिम मान्यताओं, जैसा कि गिशू कहते हैं, सही कोड (यह सही विशेषताएं है) की जांच करने के लिए है।

कार्यात्मक डोमेन का उदाहरण: सेवा लेयर बस, यह सभी परियोजनाएं (आमतौर पर कुछ कोर रेफरेंशियल डेटाबेस को encapsulating) बस पर अपनी सेवाओं का पर्दाफाश करने में सक्षम हैं।
आप ऐसा कर सकते हैं:

  • इकाई परीक्षण अपने प्रकाशक वर्ग
  • विधानसभा परीक्षण के लिए अपने प्रकाशक तंत्र के लिए सहयोग से SLB सेवा और अन्य घटकों के बाहर विकसित आप के लिए अपने SLB
  • एकीकरण परीक्षण के अन्य घटक के साथ एसएलबी और आपकी सेवाओं के ग्राहक
  • पूरे सिस्टम के लिए स्वीकृति परीक्षण।

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

10

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

मेरी राय में जब चुनौती इस तरह का सामना करना पड़ रहा है, तो निम्न कुछ दिशा निर्देश की तुलना में एक की तुलना इकाई परीक्षण कर रहे हैं:

  • त्यागें अप्रचलित परीक्षण - कभी कभी यह हजारों सैकड़ों अपडेट करने का प्रयास में व्यर्थ है यदि वे हैं, संक्षेप में, गलत या अप्रासंगिक, परीक्षण की रेखाओं की लाइनों के। तुरंत परीक्षण छोड़ दें। उन्हें "अनदेखा" न करें, उन्हें टिप्पणी न करें। उन्हें पूरी तरह से हटा दें।
  • नई कार्यक्षमता के लिए परीक्षण लिखें - किसी भी नई कार्यक्षमता को अभी भी इकाई परीक्षण और यूनिट-टेस्टेबल तरीके से लिखा जाना चाहिए।
  • बग फिक्स के लिए परीक्षण लिखें - जब रिग्रेशन एप्लिकेशन का परीक्षण करता है, तो यह सुनिश्चित करने के लिए प्रासंगिक हो सकता है कि बग फिक्स में यूनिट परीक्षण होते हैं जो सुनिश्चित करता है कि बग ठीक हो गया है।
  • कोड कवरेज के साथ नरक में - यह कुछ डाउनवॉट अर्जित कर सकता है, मुझे यकीन है, लेकिन there is a fine line between ensuring functionality and using tests as an excuse to delay work। किसी भी मनमाने ढंग से कोड कवरेज प्रतिशत का पालन करने से कोर कार्यक्षमता सुनिश्चित करने पर ध्यान केंद्रित होना चाहिए।

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

0

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

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