2012-08-12 17 views
6

मान लीजिए कि आप एक ऐसा ऐप्लिकेशन बनाते हैं जो वर्णमाला ए से वर्णमाला ए को वर्णमाला बी में यथासंभव निकटतापूर्वक टाइप करने का प्रयास करता है।क्या सभी यूनिट परीक्षण सफल होना चाहिए?

क्योंकि भाषा बी बहुत जटिल है, यह हमेशा सफल नहीं होता है। लेकिन आपको अनुमानित लिप्यंतरण मिलता है।

इस मामले में आप यूनिट परीक्षण कैसे बनाएंगे, इस पर विचार करते हुए कि आप 20-30% विफल होने की उम्मीद करते हैं?

उत्तर

8

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

मैं दोनों को अलग करने के सुझाव है: केवल सुनिश्चित करें कि आपके सॉफ्टवेयर जिस तरह से आप यह उम्मीद

  • एक परीक्षण का उत्पादन (भले ही यह अनुवाद में कुछ गलतियां भी शामिल है) काम करता है बनाने के लिए

    1. उपयोग इकाई परीक्षण डेटासेट जिसमें आपके सॉफ़्टवेयर द्वारा निर्मित अनुवाद शामिल हैं। आप अपने टेस्ट डेटासेट को मैन्युअल रूप से या अपने अनुवाद की गुणवत्ता का विचार प्राप्त करने के लिए आर जैसे सांख्यिकीय सॉफ्टवेयर पैकेज का उपयोग कर सकते हैं।
  • +1

    +1 * यूनिट * परीक्षणों को अलग करने के लिए जो * स्वीकृति * परीक्षण से प्रोग्राम शुद्धता को मान्य करता है जो मान्य करता है कि प्रोग्राम निर्दिष्ट आवश्यकताओं को पूरा करता है। –

    5

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

    7

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

    3

    इस तकनीक में मैंने जो तकनीक सीखी है वह केवल उस कोड के हिस्सों का परीक्षण करना है जो कार्यात्मक (या निर्धारक) हैं। निस्संदेह, गैर-निर्धारिती भागों से निर्धारिती को अलग करना मुश्किल हिस्सा है। यह कहने का शॉर्टेंड तरीका 'कार्यात्मक करने के लिए [या रिफैक्टर] को कम करना' है, जिसका अर्थ है परिभाषात्मक कोड के हिस्सों को अलग करना, और फिर उन हिस्सों का परीक्षण करना।

    संदर्भ के आधार पर संदर्भ के लिए, इस blog को इस तकनीक के आवेदन के बारे में पोस्ट करें जब विरासत कोड के आसपास परीक्षण प्राप्त हो रहा है और ApprovalTests नामक ओपन सोर्स यूनिट परीक्षण लाइब्रेरी का उपयोग कर)।

    फिर भी एक और तकनीक जो यहां रुचि का हो सकती है वह 'सिद्धांत-आधारित' परीक्षण है। उस पर और अधिक के लिए, यह blog पोस्ट देखें।

    1

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

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

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

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