कार्यक्रम की आंतरिक स्थिति के बारे में बताने के लिए दावे आपके लिए उपयोगी हैं । उदाहरण के लिए, आपकी डेटा संरचनाओं में एक मान्य स्थिति है, उदाहरण के लिए, कि एक Time
डेटा संरचना का मान नहीं होगा 25:61:61
। मुखर द्वारा जाँच की जाने वाली शर्तें हैं:
पूर्व-शर्तें, जो यह विश्वास दिलाती हैं कि कॉलर अपना अनुबंध रखता है,
पोस्टकंडिशन, जो आश्वासन देते हैं कि कैली अपने अनुबंध को बनाए रखता है, और
Invariants, जो आश्वासन देते हैं कि डेटा संरचना हमेशा फ़ंक्शन के वापस आने के बाद कुछ संपत्ति रखती है। एक अपरिवर्तनीय एक शर्त है जो एक पूर्व शर्त और एक पोस्टकंडिशन है।
मॉड्यूल के बाहरी व्यवहार के बारे में बताने के लिए इकाई परीक्षण उपयोगी होते हैं । विधि कहे Stack
जाने के बाद आपके पास एक सुसंगत स्थिति हो सकती है push()
, लेकिन यदि तीन बार पुकारने के बाद स्टैक का आकार तीन से नहीं बढ़ता है, तो यह एक त्रुटि है। (उदाहरण के लिए, तुच्छ मामला जहां गलत push()
कार्यान्वयन केवल एसेर्ट्स की जांच करता है और बाहर निकलता है।)
कड़ाई से बोलते हुए, अभ्रक और इकाई परीक्षणों के बीच मुख्य अंतर यह है कि इकाई परीक्षणों में परीक्षण डेटा (मानों को चलाने के लिए कार्यक्रम), जबकि मुखर नहीं होते हैं। यही है, आप अपने यूनिट परीक्षणों को स्वचालित रूप से निष्पादित कर सकते हैं, जबकि आप दावे के लिए ऐसा नहीं कह सकते। इस चर्चा के लिए मैंने मान लिया है कि आप प्रोग्राम को उच्च-क्रम फ़ंक्शन परीक्षणों के संदर्भ में निष्पादित करने के बारे में बात कर रहे हैं (जो पूरे कार्यक्रम को निष्पादित करते हैं, और यूनिट परीक्षणों जैसे मॉड्यूल को ड्राइव नहीं करते हैं)। यदि आप "वास्तविक इनपुट को देखने" के साधन के रूप में स्वचालित फ़ंक्शन परीक्षणों के बारे में बात नहीं कर रहे हैं, तो स्पष्ट रूप से मूल्य स्वचालन में निहित है, और इस प्रकार इकाई परीक्षण जीत जाएगा। यदि आप (स्वचालित) फ़ंक्शन परीक्षणों के संदर्भ में इस बारे में बात कर रहे हैं, तो नीचे देखें।
परीक्षण किया जा रहा है में कुछ ओवरलैप हो सकता है। उदाहरण के लिए, एक Stack
पोस्टकंडिशन वास्तव में यह दावा कर सकता है कि स्टैक का आकार एक से बढ़ जाता है। लेकिन उस दावे में जो किया जा सकता है, उसकी सीमाएँ हैं: क्या यह भी जाँचना चाहिए कि शीर्ष तत्व वही था जो अभी जोड़ा गया था?
दोनों के लिए, गुणवत्ता बढ़ाना लक्ष्य है। इकाई परीक्षण के लिए, लक्ष्य बग ढूंढना है। दावे के लिए, लक्ष्य जैसे ही होता है अमान्य प्रोग्राम राज्यों का अवलोकन करके डिबगिंग को आसान बनाना है।
ध्यान दें कि न तो तकनीक शुद्धता की पुष्टि करती है। वास्तव में, यदि आप कार्यक्रम को सत्यापित करने के लिए लक्ष्य के साथ इकाई परीक्षण करते हैं, तो आप संभावित रूप से निर्बाध परीक्षण के साथ आएंगे, जो आपको पता है कि काम करेगा। यह एक मनोवैज्ञानिक प्रभाव है: आप अपने लक्ष्य को पूरा करने के लिए जो कुछ भी करेंगे, वह करेंगे। यदि आपका लक्ष्य बग ढूंढना है, तो आपकी गतिविधियाँ इस बात को प्रतिबिंबित करेंगी।
दोनों महत्वपूर्ण हैं, और उनके अपने उद्देश्य हैं।
[जोर के बारे में एक अंतिम नोट के रूप में: सबसे अधिक मूल्य प्राप्त करने के लिए, आपको उन्हें अपने कार्यक्रम में सभी महत्वपूर्ण बिंदुओं पर उपयोग करने की आवश्यकता है, न कि कुछ प्रमुख कार्यों के लिए। अन्यथा, समस्या का मूल स्रोत डिबगिंग के घंटों के बिना पता लगाने में कठिन और कठिन हो सकता है।]
:-)