मेरा उत्तर वास्तविक विश्व व्यापार के दृष्टिकोण और उन चुनौतियों से होगा जो हर विकास टीम का सामना करती है। मैं इस प्रश्न और उत्तर में बहुत कुछ देखता हूं, वास्तव में दोषों को नियंत्रित करने के बारे में है।
कोड बग-मुक्त हो सकता है। किसी भी प्रोग्रामिंग भाषा के लिए "हैलो वर्ल्ड" कोड के नमूने लें, और इसे उस प्लेटफ़ॉर्म पर चलाएं जो इसका इरादा है और यह लगातार काम करेगा और वांछित परिणाम उत्पन्न करेगा। बग मुक्त होने के कोड की असंभवता पर कोई सिद्धांत समाप्त होता है।
संभावित कीड़े आते हैं क्योंकि तर्क अधिक जटिल हो जाता है। सरल हैलो वर्ल्ड उदाहरण में कोई तर्क नहीं है और हर बार एक ही स्थिर चीज करता है। जैसे ही आप तर्क-चालित गतिशील व्यवहार को जोड़ते हैं, वह है जो उस जटिलता का परिचय देता है जो बग की ओर जाता है। तर्क स्वयं त्रुटिपूर्ण हो सकता है, या तर्क में इनपुट करने वाला डेटा एक तरह से भिन्न हो सकता है, जो तर्क संभालता नहीं है।
एक आधुनिक अनुप्रयोग रन-टाइम लाइब्रेरीज़, सीएलआर, मिडलवेयर, डेटाबेस आदि लेयर्स पर भी निर्भर करता है, जो विकास के समय को बचाते हुए, वे परतें भी हैं जहाँ उन परतों के भीतर बग मौजूद हो सकते हैं और विकास और यूएटी परीक्षण और उत्पादन में अंडरटेक हो सकते हैं।
अंत में, एप्लिकेशन / सिस्टम की श्रृंखला जो डेटा का उपभोग करती है, जो उसके तर्क को खिलाती है, वे सभी तर्क के भीतर या तो संभावित बग के स्रोत हैं, या सॉफ़्टवेयर के भीतर लॉजिक की सवारी करने वाले शीर्ष पर, या अपस्ट्रीम सिस्टम, जिसमें वह डेटा का उपभोग करता है।
डेवलपर्स अपने आवेदन के तर्क का समर्थन करने वाले हर बढ़ते टुकड़े के 100% नियंत्रण में नहीं हैं। दरअसल, हम ज्यादा नियंत्रण में नहीं हैं। यही कारण है कि इकाई परीक्षण महत्वपूर्ण है, और कॉन्फ़िगरेशन और परिवर्तन प्रबंधन महत्वपूर्ण प्रक्रियाएं हैं जिन्हें हमें अनदेखा या आलसी / मैला नहीं होना चाहिए।
इसके अलावा, आपके आवेदन के बीच प्रलेखित समझौते जो आपके नियंत्रण से परे एक स्रोत से डेटा की खपत करते हैं, जो स्थानांतरित किए गए डेटा के लिए विशिष्ट प्रारूप और विनिर्देशों को परिभाषित करता है, साथ ही साथ कोई भी सीमा या बाधा जो आपके सिस्टम को मानता है कि आउटपुट सुनिश्चित करने के लिए स्रोत प्रणाली जिम्मेदार है वे सीमाएँ।
सॉफ्टवेयर इंजीनियरिंग के वास्तविक विश्व अनुप्रयोग में आप व्यवसाय के बारे में बताकर इसे उड़ने में सक्षम नहीं होंगे कि सैद्धांतिक रूप से एप्लिकेशन बग-मुक्त क्यों नहीं हो सकते हैं। प्रौद्योगिकी और व्यवसाय के बीच इस प्रकृति की चर्चा कभी भी नहीं होगी सिवाय एक तकनीकी खराबी के जो व्यवसाय की क्षमता को प्रभावित करती है, जिससे पैसा कमाना, धन कम होना और / या लोगों को जीवित रखना। "यह कैसे हो सकता है" का उत्तर "मुझे इस सिद्धांत की व्याख्या नहीं करने दे सकता है ताकि आप समझ सकें।"
बड़े पैमाने पर कम्प्यूटेशन के संदर्भ में जो सैद्धांतिक रूप से गणना करने के लिए हमेशा के लिए ले सकता है और एक परिणाम प्राप्त कर सकता है, एक आवेदन जो समाप्त नहीं हो सकता है और एक परिणाम के साथ वापस आ सकता है - वह एक बग है। यदि गणना की प्रकृति ऐसी है कि यह बहुत समय लेने वाली है और गहन गणना करती है, तो आप उस अनुरोध को लेते हैं और उपयोगकर्ता को प्रतिक्रिया देते हैं कि वे परिणाम कब / कैसे प्राप्त कर सकते हैं, और इस पर मंथन करने के लिए समानांतर धागे को किक मारते हैं। यदि यह एक सर्वर पर किया जा सकता है की तुलना में जल्दी होने की जरूरत है, और पर्याप्त महत्वपूर्ण व्यापार है, तो आप इसे भर में कई प्रणालियों के रूप में की जरूरत है। यही कारण है कि बादल बहुत ही आकर्षक है, और काम करने के लिए नोड्स को स्पिन करने और उन्हें पूरा करने की क्षमता है।
यदि यह संभावना मौजूद है कि किसी भी प्रकार की गणना शक्ति पूरी नहीं हो सकती है, तो उसे वहाँ नहीं घूमना चाहिए, जो एक व्यवसाय प्रक्रिया के साथ अनन्तता के लिए चल रहा हो, इस जवाब पर प्रतीक्षा करता है कि व्यवसाय क्या सोचता है कि एक समस्या है।
print "Hello, World!"
... क्या आप थोड़ा अधिक स्पष्ट हो सकते हैं?