Cem Kaner किसी परीक्षण को बग को समय की बर्बादी नहीं बताता है?


15

सकारात्मक परीक्षणों में कार्यक्षमता की पुष्टि करने के बारे में, यह साबित करना काम कर रहा है - क्या मुझे यह कहना चाहिए कि यह समय की बर्बादी है? इस उद्धरण के पीछे किस तरह की अवधारणा है?

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

वेब इंजीनियरिंग: वेब अनुप्रयोगों के व्यवस्थित विकास की अनुशासन Cem कनेर के हवाले से ।


2
ज़रुरी नहीं। कनेर का दावा है कि सामान्य तौर पर, परीक्षण में केवल दोषों का पता लगाना चाहिए।
जॉन वी।

4
वह बहुत ही शैक्षणिक स्थिति है। श्री कनेर और श्री श्रोडिंगर को कुछ समय के लिए एक कप कॉफी पीने की जरूरत होती है।
ब्लरफ्ल

2
@ ब्लरफ्ल केवल समस्या यह है कि श्री श्रोडिंगर मृत है। ओह, रुको ... उम ...
ikmac

1
बिना किसी संदर्भ के यह कथन मूर्खतापूर्ण लगता है ...
ऋग

1
"सकारात्मक परीक्षणों में कार्यक्षमता की पुष्टि" - यह मौलिक रूप से असंभव है। आप कुछ सही साबित नहीं कर सकते, आप केवल इसे गलत साबित कर सकते हैं।
कोनराड रुडोल्फ

जवाबों:


37

मैंने 25 साल पहले अधिकांश टेस्टिंग कंप्यूटर सॉफ्टवेयर लिखे थे। मैंने तब से किताब के कई हिस्सों की ओर इशारा किया है जिन्हें मैं पुराना मानता हूं, या बस गलत है। Http://www.kaner.com/pdfs/TheOngoingRevolution.pdf देखें

आप ब्लैक बॉक्स सॉफ्टवेयर टेस्टिंग कोर्स (मुफ्त में उपलब्ध वीडियो और स्लाइड्स), www.testingeducation.org/BBST के लिए मेरी साइट पर अधिक (वर्तमान दृश्य, लेकिन TCS पर स्पष्ट संकेत के बिना) देख सकते हैं

परीक्षण संस्कृति वापस तो बड़े पैमाने पर पुष्टि की गई थी।

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

मुझे लगता है कि इकाई परीक्षण के लिए पुष्टिकरण मानसिकता उपयुक्त है, लेकिन एक ऐसी दुनिया की कल्पना करें जिसमें सिस्टम परीक्षण का सभी पुष्टिकरण था (उन लोगों के लिए जो एक अंतर बनाते हैं, कृपया "सिस्टम एकीकरण परीक्षण" और "स्वीकृति परीक्षण" की व्याख्या करें जैसा कि सिस्टम पर मेरी टिप्पणियों में शामिल है। परीक्षण।) परीक्षण का बिंदु यह पुष्टि करने के लिए था कि कार्यक्रम अपने विनिर्देशों को पूरा करता है और प्रमुख दृष्टिकोण एक बिलियन (या कम से कम कुछ सौ) सिस्टम-स्तरीय प्रतिगमन परीक्षणों का निर्माण करना था जो कार्यक्रम के व्यवहार के लिए कल्पना के कुछ हिस्सों को मैप करते थे। (मुझे लगता है कि युक्ति से व्यवहार की पुष्टि उपयोगी है, लेकिन मुझे लगता है कि यह एक बड़े उद्देश्य का एक छोटा सा हिस्सा है।)

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

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

उपयोगी जानकारी प्रकट करने के लिए एक परीक्षण डिजाइन किया जाना चाहिए।

फिर, वैसे, किसी ने "जानकारी" प्रकट करने के लिए एक विधि के रूप में परीक्षण के बारे में बात नहीं की। इसके बाद, परीक्षण या तो (कुछ संस्करण के लिए ...) बग ढूंढ रहा था या (कुछ संस्करण ...) विनिर्देशों के विरुद्ध कार्यक्रम का सत्यापन (जाँच) कर रहा था। मुझे नहीं लगता है कि उपयोगी जानकारी प्रकट करने के लिए परीक्षण करने वाले दावे इस शताब्दी तक परीक्षण शब्दावली में आए थे।

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

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

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

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

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


4
एक सवाल आप जवाब देने के लिए समय निकालने के लिए +1 के लिए आधिकारिक स्रोत है, साथ ही का उपयोग कर ... हमेशा अच्छा लोगों को देखने के लिए अजीब शब्द "बिल्ड सत्यापन टेस्ट" जो इतने सारे लोग मुझे देखो के अपने प्रयोग को मान्य अपने कद का समय निकालकर आसपास के लोगों की मदद करने के लिए
जिमी हॉफ

1
एरिक जी: मुझे लगता है कि यदि आप फिर से पढ़ते हैं तो आप देखेंगे कि केम बताता है कि पाठकों के हिस्से के रूप में यह समझना कि इस विषय पर उनका दृष्टिकोण समय के साथ विकसित हुआ है। या आप बस ले जा सकते हैं और सूक्ष्मता और योग्यता को नजरअंदाज कर सकते हैं, Cem को paraphrase कर सकते हैं। (और मैं "योग्यता" को उनकी साख के रूप में नहीं, बल्कि अपवादों के रूप में लेता हूं।)
जिम होम्स

आपका उद्धरण मुझे विज्ञान के बारे में देखी गई किसी चीज़ की याद दिलाता है: कोई एक वैज्ञानिक सिद्धांत को सिद्ध नहीं कर सकता है, जिसमें प्रयोगों का संचालन करके एक वैज्ञानिक सिद्धांत के अनुरूप परिणाम प्राप्त करने की उम्मीद की जाती है; एक सिद्धांत का समर्थन करने का तरीका उपकरण प्रयोगों के लिए एक कठिन प्रयास करना है जो इसका समर्थन नहीं करेगा , लेकिन ऐसा करने में असमर्थ है।
2

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

@JonHanna: मेरा काम करने वाला गरीब था: इस मुद्दे की उम्मीद नहीं है, लेकिन प्रयास। एक परीक्षण को खोजने की कोशिश कर एक सिद्धांत को साबित नहीं किया जा सकता है कि यह पारित हो जाएगा; किसी को परीक्षण खोजने के लिए एक कठिन प्रयास करना चाहिए जो कि अमान्य होने पर विफल हो जाए।
16

11

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

आपके द्वारा पूछे गए उद्धरण के पीछे अवधारणा को प्रस्तुत किया गया है और Cem Kaner , Jack Falk, Hung Quoc Nguyen द्वारा टेस्टिंग कंप्यूटर सॉफ्टवेयर लेख में अच्छे से समझाया गया है , अध्याय "OBJECTIVES AND LIMITS OF TESTING" में:

तो, क्यों परीक्षण?

आपको सभी बग नहीं मिल सकते हैं। आप प्रोग्राम को सही साबित नहीं कर सकते, और आप नहीं करना चाहते। यह महंगा है, निराशाजनक है, और यह आपको किसी भी लोकप्रियता प्रतियोगिता में नहीं जीता है। तो, परीक्षण क्यों परेशान करते हैं?

एक कार्यक्रम का परीक्षण करने का अवसर आईटी में खोज करने के लिए है

समस्याओं का पता लगाना आपके काम का मूल है। आपको यथासंभव अधिक से अधिक ढूंढना चाहिए; समस्या जितनी अधिक गंभीर होगी, उतना ही बेहतर होगा।

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


एक परीक्षण जो एक समस्या का खुलासा करता है वह एक सफलता है। एक परीक्षण जिसने किसी समस्या को प्रकट नहीं किया, वह समय की बर्बादी थी।


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


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

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

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

(यदि आप आश्चर्य करते हैं, तो ऊपर की तरह याद आती है कि आप किस तरह से प्रयास करते हैं, यह आम तौर पर अपरिहार्य है, और इन से निपटने के तरीके हैं , लेकिन यह एक अलग प्रश्न के लिए अधिक विषय होगा ... और शायद एसक्यूए के लिए एक बेहतर फिट होगा। एसई।)


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

@KateGregory मैं सहमत हूँ, मुझे भी यही लगता है। मैं दृढ़ता से उनकी राय को गलत पाया, हम मुख्य रूप से जानकारी इकट्ठा करने के लिए परीक्षण करते हैं ..
जॉन वी।

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

4

खैर, मैं श्री कनेर नहीं जानता, लेकिन IMHO

परीक्षण जो संभावित रूप से त्रुटियां नहीं पाते हैं

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

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


-1

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

यदि आप किसी फ़ंक्शन के लिए एक परीक्षण करते हैं जो ईमेल को मान्य करता है और परीक्षण पर आप केवल मान्य ईमेल प्रदान करते हैं, तो वह परीक्षण पूरी तरह से बेकार है। आपको इस फ़ंक्शन को "किसी भी" स्ट्रिंग पॉसिबल, अमान्य ईमेल, बहुत लंबे ईमेल, यूनिकोड वर्ण (áêçç ....) के लिए परीक्षण करना होगा।

यदि आप एक परीक्षण को कोड करते हैं, जो केवल check@dom.com की जाँच करता है और name @ com झूठी देता है, तो यह परीक्षण बिना किसी परीक्षण के समान है।

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