2013-06-12 10 views
7

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

उदाहरण के लिए, मैं कुछ इस तरह (रिचर्ड Huxton के माध्यम से) ने लिखा:

while (<$infile>) { 
    if (/item_id:(\d+)\s*,\s*sold/) { 
     my $item_id = $1; 
     $item_id_sold_times{$item_id}++; 
    } 
} 
my @matched_items_ids = keys %item_id_sold_times; 
my $owner_ids = 
    Store::Model::Map::ItemOwnerMap->fetch_by_keys(\@matched_item_ids) 
    ->entry(); 
for my $owner_id (@$owner_ids) { 
    $item_id_owner_map{$owner_id}++; 
} 

कहो, इस स्क्रिप्ट script.pl कहा जाता है। फ़ाइल का परीक्षण करते समय, मैंने एक फ़ाइल स्क्रिप्ट बनाई और script.pl में script.pl के कुछ ब्लॉक दोहराना पड़ा। प्रासंगिक कोड खंडों को चिपकाने के बाद, मैं पुष्टि करता हूं:

is($item_id_sold_times{1}, 1, "Number of sold items of item 1"); 
is($item_id_owner_map{3}, 8, "Number of sold items for owner 3"); 

और इसी तरह से।

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

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

सादर

+1

मैं अपने साथियों से कहूंगा और यदि वे सामान पूछते रहेंगे तो मैं कहूंगा कि ब्रायन डी फोय को उद्धृत करते हुए मैं कहूंगा। यह काम करना चाहिए जैसा हमने आपकी पुस्तक से सीखा है :) – ado

+0

ए (अच्छा) परीक्षण कुछ ऐसा है जो कुछ हितधारक को मूल्यवान जानकारी प्रदान करता है। पूरी तरह से अलग सवाल यह है कि आपको एक पर्ल स्क्रिप्ट के लिए यूनिट परीक्षण कैसे लिखना चाहिए। :-) – Edu

उत्तर

10

एक महत्वपूर्ण भेद यह है: अगर कोई आपकी 'script.pl' फ़ाइल को संपादित करने (बगफिक्स या नई सुविधा) को संपादित करना था, तो आपकी वर्तमान स्थिति में आपकी 'script.t' फ़ाइल चलाना होगा, इस स्थिति में कोई उपयोगी जानकारी दें नया 'script.pl'? इस मामले के लिए आपको include या use चुनिंदा प्रतिलिपि/चिपकाने वाले अंशों की बजाय .pl फ़ाइल होना चाहिए।

सबसे अच्छे मामले में आप अपने सॉफ़्टवेयर को मॉड्यूलरली और परीक्षण के लिए योजना बनाते हैं। आप इस तथ्य के बाद एक अखंड स्क्रिप्ट परीक्षण करना चाहते हैं, मुझे लगता है कि आप एक परीक्षण स्क्रिप्ट लिख सकता है कि include एक exit() के बाद और कम से कम सबरूटीन्स परीक्षण करने के लिए अपने मुख्य कार्यक्रम है ...

2

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

4

तुम सिर्फ एक कार्यक्रम का परीक्षण कर सकते मॉड्यूल की तरह यदि आप इसे मॉड्यूलिनो के रूप में सेट करते हैं। मैंने इस जगह पर इस बारे में लिखा है, लेकिन सबसे विशेष रूप से Mastering Perl में। आप अभी read Chapter 18 for online for free कर सकते हैं क्योंकि मैं सार्वजनिक रूप से दूसरे संस्करण पर काम कर रहा हूं। :)

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