Random testing
यादृच्छिक परीक्षण एक ब्लैक-बॉक्स सॉफ्टवेयर परीक्षण तकनीक है जहाँ यादृच्छिक, स्वतंत्र निवेश उत्पन्न करके कार्यक्रमों का परीक्षण किया जाता है। आउटपुट के परिणामों की तुलना सॉफ्टवेयर विनिर्देशों के साथ की जाती है ताकि यह सत्यापित किया जा सके कि परीक्षण आउटपुट पास या फेल है। विनिर्देशों की अनुपस्थिति के मामले में भाषा के अपवादों का उपयोग किया जाता है जिसका अर्थ है कि यदि परीक्षण निष्पादन के दौरान कोई अपवाद उत्पन्न होता है तो इसका मतलब है कि कार्यक्रम में कोई दोष है, इसका उपयोग पक्षपाती परीक्षण से बचने के तरीके के रूप में भी किया जाता है। हार्डवेयर के लिए यादृच्छिक परीक्षण के इतिहास की जांच पहली बार 1971 में मेल्विन ब्रेयर द्वारा की गई थी और इसकी प्रभावशीलता का मूल्यांकन करने का प्रारंभिक प्रयास 1975 में प्रतिमा और विश्वनी अग्रवाल द्वारा किया गया था। सॉफ्टवेयर में, डुरान और एनटाफोस ने 1984 में यादृच्छिक परीक्षण की जांच की थी। यादृच्छिक परीक्षण के लिए एक सैद्धांतिक आधार के रूप में परिकल्पना परीक्षण का उपयोग हाउडेन द्वारा कार्यात्मक परीक्षण और विश्लेषण में वर्णित किया गया था। पुस्तक में परीक्षणों की संख्या का अनुमान लगाने के लिए एक सरल सूत्र का विकास भी शामिल है जो 1/n से अधिक की विफलता दर में कम से कम 1-1/n पर विश्वास रखने के लिए आवश्यक हैं। सूत्र लोअर बाउंड नलोग्न है, जो एक मामूली विफलता दर में मामूली विश्वास रखने के लिए बड़ी संख्या में विफलता-मुक्त परीक्षणों की आवश्यकता को इंगित करता है। अवलोकन निम्नलिखित सी + + फलन पर विचार करेंः इंट मायएब्स (इंट एक्स) {यदि (एक्स> 0) {रिटर्न एक्स;} अन्यथा {रिटर्न एक्स;// बगः '-एक्स' होना चाहिए} अब इस फलन के लिए यादृच्छिक परीक्षण {123,36,-35,48,0} हो सकते हैं। केवल मान '-35' बग को ट्रिगर करता है। यदि परिणाम की जांच करने के लिए कोई संदर्भ कार्यान्वयन नहीं है, तो भी बग पर किसी का ध्यान नहीं जा सकता है। हालांकि, परिणामों की जांच करने के लिए एक अभिकथन जोड़ा जा सकता है, जैसे किः शून्य टेस्टएब्स (इंट एन) {के लिए (इंट आई = 0; आई <एन; आई + +) {इंट एक्स = गेटरेन्डमइनपुट (); इंट परिणाम = मायएब्स (एक्स); दावा (परिणाम> = 0);} संदर्भ कार्यान्वयन कभी-कभी उपलब्ध होता है, जैसे। जब बेहतर प्रदर्शन के लिए एक सरल एल्गोरिथ्म को अधिक जटिल तरीके से लागू किया जाता है। उदाहरण के लिए, Schönhage-Strassen एल्गोरिथ्म के कार्यान्वयन का परीक्षण करने के लिए, पूर्णांकों पर मानक "*" संचालन का उपयोग किया जा सकता हैः (पूर्णांक i = 0; i <n; i + +) के लिए (पूर्णांक i = 0; i <n; i + +) के लिए (पूर्णांक i = 0; i <n; i + +) के लिए (पूर्णांक i = 0; i <n; i + +) के लिए (पूर्णांक i = 0; i <n; i + +) के लिए (पूर्णांक i = 0; i <n; i + +) के लिए (पूर्णांक i = 0; i <n; i + +) के लिए (पूर्णांक i = 0; i <n; i + + +) के लिए (पूर्णांक i = 0; i <n; i <n; i + + +) के लिए इस तरह के दृष्टिकोण तब यादृच्छिक रूप से उत्पन्न वस्तुओं के एक पूल को बनाए रखते हैं और या तो उत्पन्न वस्तु का पुनः उपयोग करने या एक नया बनाने के लिए एक संभावना का उपयोग करते हैं। यादृच्छिकता पर डी. हैमलेट द्वारा यादृच्छिक परीक्षण पर मौलिक पत्र के अनुसार "यादृच्छिक परीक्षण" का तकनीकी, गणितीय अर्थ परीक्षण डेटा के चयन में "प्रणाली" की स्पष्ट कमी को संदर्भित करता है, ताकि विभिन्न परीक्षणों के बीच कोई संबंध न हो। शक्ति और कमजोरियों यादृच्छिक परीक्षण की निम्नलिखित शक्तियों के लिए प्रशंसा की जाती हैः इसका उपयोग करना सस्ता हैः इसे परीक्षण के तहत कार्यक्रम के बारे में चतुर होने की आवश्यकता नहीं है। इसमें कोई पूर्वाग्रह नहीं हैः मैनुअल परीक्षण के विपरीत, यह बग को नजरअंदाज नहीं करता है क्योंकि कुछ कोड में गलत विश्वास है। बग उम्मीदवारों को ढूंढना त्वरित हैः आमतौर पर एक परीक्षण सत्र करने में कुछ मिनट लगते हैं। यदि सॉफ्टवेयर ठीक से निर्दिष्ट किया गया हैः यह वास्तविक बग ढूंढता है। निम्नलिखित कमजोरियों का वर्णन किया गया हैः यह केवल बुनियादी दोषों को ढूंढता है (जैसे। नल पॉइंटर डीरेफरेन्सिंग)। यह केवल उतना ही सटीक है जितना कि विनिर्देश और विनिर्देश आमतौर पर अस्पष्ट होते हैं। यह कीड़े खोजने के लिए अन्य तकनीकों के साथ खराब तुलना करता है (जैसे। स्थैतिक कार्यक्रम विश्लेषण)। यदि प्रत्येक परीक्षण दौड़ में यादृच्छिक रूप से अलग-अलग निवेशों का चयन किया जाता है, तो यह निरंतर एकीकरण के लिए समस्याएं पैदा कर सकता है क्योंकि एक ही परीक्षण यादृच्छिक रूप से उत्तीर्ण या विफल हो जाएंगे। कुछ लोगों का तर्क है कि यादृच्छिकता पर भरोसा करने की तुलना में सभी प्रासंगिक मामलों को सफेद-बॉक्स फैशन में मैन्युअल रूप से निर्मित परीक्षणों के साथ सोच-समझकर कवर करना बेहतर होगा। मामूली विफलता दर में मामूली स्तर के विश्वास के लिए बहुत बड़ी संख्या में परीक्षणों की आवश्यकता हो सकती है। उदाहरण के लिए, कम से कम 99 प्रतिशत विश्वास रखने के लिए 459 विफलता-मुक्त परीक्षणों की आवश्यकता होगी कि विफलता की संभावना 1/100 से कम है। यादृच्छिक परीक्षण के प्रकार इनपुट यादृच्छिक इनपुट अनुक्रम उत्पादन के संबंध में (अर्थात। विधि कॉल का एक क्रम) डेटा इनपुट का यादृच्छिक अनुक्रम (जिसे कभी-कभी यादृच्छिक परीक्षण कहा जाता है)-जैसे। विधि का एक यादृच्छिक अनुक्रम मौजूदा डेटाबेस से यादृच्छिक डेटा चयन को निर्देशित बनाम निर्देशित अनिर्देशित यादृच्छिक परीक्षण पीढ़ी कहता है-जिसमें इसकी खोज निर्देशित यादृच्छिक परीक्षण पीढ़ी का मार्गदर्शन करने के लिए कोई शोध नहीं है-जैसे। "फीडबैक-निर्देशित यादृच्छिक परीक्षण पीढ़ी" और "अनुकूली यादृच्छिक परीक्षण" कार्यान्वयन यादृच्छिक परीक्षण को लागू करने वाले कुछ उपकरणः क्विकचेक-एक प्रसिद्ध परीक्षण उपकरण, जिसे मूल रूप से हास्केल के लिए विकसित किया गया था, लेकिन कई अन्य भाषाओं में पोर्ट किया गया था, जो एक मॉडल के आधार पर एपीआई कॉल के यादृच्छिक अनुक्रम उत्पन्न करता है और सिस्टम गुणों को सत्यापित करता है जो प्रत्येक रन के बाद सही होना चाहिए। रैंडूप-परीक्षण के तहत कक्षाओं के लिए विधियों और निर्माता आह्वानों के अनुक्रम उत्पन्न करता है और इन सिमुलेंट से जेयूनिट परीक्षण बनाता है-एक क्लोजर उपकरण जो विभिन्न एजेंटों (जैसे। अलग-अलग व्यवहार प्रोफाइल वाले उपयोगकर्ता) अपने व्यवहार के सांख्यिकीय मॉडल के आधार पर, सभी कार्यों और परिणामों को बाद में अन्वेषण और सत्यापन के लिए एक डेटाबेस में रिकॉर्ड करते हैं ऑटोटेस्ट-एक उपकरण जो एफिल स्टूडियो परीक्षण के लिए एकीकृत है जो स्वचालित रूप से एफिल कोड को उसी नाम के शोध प्रोटोटाइप पर आधारित अनुबंधों के साथ एकीकृत करता है। यॉर्क एक्सटेंसिबल टेस्टिंग इंफ्रास्ट्रक्चर (वाईईटीआई)-एक भाषा अज्ञेयवादी उपकरण जो विभिन्न प्रोग्रामिंग भाषाओं (जावा, जेएमएल, कोफोजा,. नेट, सी, केरमेटा) को लक्षित करता है। ग्रामटेस्ट-जावा में लिखा गया एक व्याकरण आधारित यादृच्छिक परीक्षण उपकरण, यह इनपुट व्याकरण को निर्दिष्ट करने के लिए बी. एन. एफ. संकेतन का उपयोग करता है। क्रिटिक रैंडम टेस्टिंग में व्यवहार में केवल एक विशेष स्थान है, ज्यादातर इसलिए कि एक प्रभावी ओरेकल शायद ही कभी उपलब्ध होता है, लेकिन परिचालन प्रोफ़ाइल और छद्म इनपुट मूल्यों के उत्पादन के साथ कठिनाइयों के कारण भी। एक परीक्षण ऑरेकल यह सत्यापित करने के लिए एक उपकरण है कि परिणाम कार्यक्रम विनिर्देश से मेल खाते हैं या नहीं। एक संचालन प्रोफ़ाइल कार्यक्रम के उपयोग पैटर्न के बारे में ज्ञान है और इस प्रकार कौन से भाग अधिक महत्वपूर्ण हैं। प्रोग्रामिंग भाषाओं और प्लेटफार्मों के लिए जिनके अनुबंध हैं (जैसे। एफिल। . NET या जावा के विभिन्न विस्तार जैसे JML, CoFoJa.) अनुबंध प्राकृतिक दैवज्ञ के रूप में कार्य करते हैं और दृष्टिकोण को सफलतापूर्वक लागू किया गया है। विशेष रूप से, यादृच्छिक परीक्षण में मैनुअल निरीक्षण या उपयोगकर्ता रिपोर्ट (हालांकि अलग-अलग) की तुलना में अधिक बग पाए जाते हैं। फ़ज़ परीक्षण भी देखें-एक प्रकार का यादृच्छिक परीक्षण जो परीक्षण किए गए प्रोग्राम आलसी व्यवस्थित इकाई testing#Systematic परीक्षण को अमान्य इनपुट प्रदान करता है-"सभी" विधि कॉल की खोज करने का एक व्यवस्थित तरीका, जैसा कि लागू किया गया है। नासा के जावा पाथ फाइंडर द्वारा (जो विभिन्न तरीकों से राज्य के स्थान को उचित आकार तक सीमित करके मॉडल जाँच के साथ परीक्षण को मिश्रित करता है) सिस्टम वेरिलॉग कॉर्नर केस एज केस कॉन्कॉलिक परीक्षण संदर्भ एंड्रिया आर्कुरी द्वारा यादृच्छिक परीक्षण को बाहरी लिंक से जोड़ता है। रिचर्ड हैमलेट द्वारा यादृच्छिक परीक्षण, पोर्टलैंड स्टेट यूनिवर्सिटी में प्रोफेसर एमेरिटस; कनिंघम एंड कनिंघम, इंक. में यादृच्छिक परीक्षण विकी पेपर के अंत में संसाधनों की एक मूल्यवान सूची।