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