2014-05-07 4 views
12

मैं वास्तव में software testing oracle की अवधारणा को समझ नहीं पा रहा हूं। यह कहता हैएक परीक्षण ऑरैकल क्या है, और इसके लिए क्या उपयोग किया जाता है?

एक ऑरैकल यह निर्धारित करने के लिए एक तंत्र है कि प्रोग्राम पास हो गया है या परीक्षण में विफल रहा है या नहीं।

// class that should be tested 
public int sum(int a, int b) { 
    return a + b; 
} 

// test class 
static Main tester = new Main(); 
@Test 
public void testSum() { 
    assertEquals("2 + 3 is 5", 5, tester.sum(2, 3)); 
} 

वर्ग कि हमेशा परीक्षण किया जाना चाहिए 2 पूर्णांकों का योग देता है:

निम्नलिखित कोड पर विचार करें।
मैं पैरामीटर 2 और 3 के रूप में पास करता हूं, और उम्मीद करता हूं 5. 2 और 3 समझा जाएगा और अपेक्षित मूल्य (5) की तुलना में। इस मामले में परीक्षण सफल होता है।

एक ऑरैकल मुझे यहां कैसे मदद कर सकता है? क्या इस उदाहरण में एक ऑरैकल शामिल है?

+0

मुझे इस बारे में सुनने में रूचि है, क्योंकि एक परीक्षण ऑरैकल की अवधारणा ने मुझे हमेशा अस्पष्ट अवधारणा के रूप में मारा है।मेरी समझ (जो गलत हो सकती है, इसलिए मेरी रूचि) यह है कि एक परीक्षण धावक परीक्षण ऑरैकल का एक उदाहरण है। (आपके मामले में, 'परीक्षक' ऑब्जेक्ट।) – Lilshieste

उत्तर

9

एक परीक्षण ऑरैकल इस बारे में जानकारी का स्रोत है कि किसी प्रोग्राम (या फ़ंक्शन या विधि) का आउटपुट सही है या नहीं।

एक परीक्षण ऑरैकल सभी संभावित इनपुट या केवल विशिष्ट इनपुट के लिए सही आउटपुट निर्दिष्ट कर सकता है। यह वास्तविक आउटपुट मान निर्दिष्ट नहीं कर सकता है लेकिन केवल उन पर बाधाएं।

ओरेकल

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

यदि अस्पष्ट नहीं है, तो अवधारणा कम से कम बहुत व्यापक है।

एक ऑरैकल परीक्षण धावक नहीं है, लेकिन एक परीक्षण धावक सही आउटपुट के स्रोत के रूप में एक ऑरैकल का उपयोग कर सकता है जिससे सिस्टम-अंडर-टेस्ट के आउटपुट की तुलना करने के लिए या बाधाओं के स्रोत के रूप में जिसका मूल्यांकन किया जा सके एसयूटी का आउटपुट

आपके उदाहरण में, आपने अपने ऑरैकल के रूप में अतिरिक्त एल्गोरिदम को चलाने की अपनी व्यक्तिगत क्षमता का उपयोग किया।

assertEquals("2 + 3 is 5", 2 + 3, tester.sum(2, 3)); 
+1

जैसा कि हम वास्तव में परिणामों की आवश्यकता नहीं है, और इसे स्वयं की गणना करने की आवश्यकता नहीं है, यह संस्करण और भी अधिक स्पष्ट रूप से हो सकता है: 'assertEquals ("2 + 3", 2 + 3, tester.sum (2, 3)); ' –

1

मुझे ओरेकल सवाल इस तरह से पैदा करते हैं:: हम कैसे जांच कर सकते हैं कि इस कार्यक्रम के सही जवाब देता है इसके बजाय, आप एक दैवज्ञ के रूप में है कि एल्गोरिथ्म के एक अलग कार्यान्वयन इस्तेमाल कर सकते हैं?

इस समारोह के लिए, हम आसानी से इस सवाल का जवाब निम्नलिखित स्यूडोकोड (। क्षमा करें, यह सी ++ नहीं है) के साथ जांच कर सकते हैं:

repeat many times { 
    int a = randomNumber(); 
    int b = randomNumber(); 
    int result = sum(a, b); 
    assertEquals("random case", a, result - b); 
} 

यह ओरेकल समारोह की जाँच करने के घटाव का उपयोग करता है। यह लाखों या अरबों परीक्षणों को छोटे मानव प्रयासों के साथ चलाने की अनुमति देता है।

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

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