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