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