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