मैं एक स्थिति बताने के लिए कितना में नहीं हूँ और अधिक शोध विषय पर किया जाना चाहिए, लेकिन वहाँ है कि मैं आपको बता सकता है शोध किया जा रहा है, उदाहरण के लिए Verisoft एक्सटी जर्मन सरकार द्वारा वित्त पोषित कार्यक्रम।
जिन अवधारणाओं के बारे में आपको लगता है कि आप औपचारिक सत्यापन और अनुबंध आधारित प्रोग्रामिंग कहलाते हैं , जहां बाद वाला प्रोग्राम करने का पहला तरीका है। कॉन्ट्रैक्ट-आधारित प्रोग्रामिंग में आप पहले अपना कोड सामान्य लिखते हैं और फिर तथाकथित कॉन्ट्रैक्ट्स को कोड में डालते हैं। एक आसानी से प्रयोग करने योग्य भाषा जो इस प्रतिमान पर आधारित है Microsoft रिसर्च द्वारा Spec # है, और C # के लिए कार्यात्मक समान लेकिन थोड़े कम सुंदर कोड कॉन्ट्रैक्ट्स एक्सटेंशन जो आप दोनों ऑनलाइन आज़मा सकते हैं (उनके पास अन्य भाषाओं के समान उपकरण भी हैं, वृद्धि 4fun देखें )। आपके द्वारा उल्लिखित "प्रकार के साथ int" एक फ़ंक्शन में दो अनुबंधों द्वारा परिलक्षित होगा:
Contract.Requires(-3 <= a && a <= 24);
Contract.Requires( 3 <= b && b <= 10);
यदि आप उस फ़ंक्शन को कॉल करना चाहते हैं, तो आपको उन मापदंडों का उपयोग करना होगा जो इन मानदंडों को पूरा करना सुनिश्चित करते हैं, या आपको एक संकलन समय त्रुटि मिलती है। उपरोक्त बहुत ही सरल अनुबंध हैं, आप चर या अतिशयोक्ति और उनके संबंध के बारे में लगभग किसी भी धारणा या आवश्यकता को सम्मिलित कर सकते हैं, जिसके बारे में आप सोच सकते हैं और संकलक यह जाँच करेगा कि क्या प्रत्येक आवश्यकता को एक धारणा या कुछ द्वारा कवर किया गया है, जिसे सुनिश्चित किया जा सकता है, अर्थात मान्यताओं से। यही कारण है कि जहां से नाम उपजा है: कैली आवश्यकताओं को पूरा करती है , कॉलर यह सुनिश्चित करता है कि ये मिले - एक व्यापारिक अनुबंध की तरह।
P(x1,x2,...,xn)nP सभी संभव चर असाइनमेंट के लिए सही है, तो प्रोग्राम को सही माना जाता है। यह जांचने के लिए कि क्या यह मामला है या नहीं, एसएमटी प्रोवरप्रयोग किया जाता है। सीएस की ओर से, वे दो प्रक्रिया के महत्वपूर्ण भाग हैं - सत्यापन की शर्तों की पीढ़ी मुश्किल है और एसएमटी या तो एनपी-पूर्ण या अनिर्दिष्ट समस्या है, जो कि सिद्धांतों पर निर्भर करती है। यहां तक कि एसएमटी सॉल्वरों के लिए एक प्रतियोगिता भी है , इसलिए निश्चित रूप से इसमें कुछ शोध किया जाता है। इसके अतिरिक्त, औपचारिक सत्यापन के लिए एसएमटी का उपयोग करने के लिए वैकल्पिक दृष्टिकोण हैं जैसे कि राज्य अंतरिक्ष गणना, प्रतीकात्मक मॉडल की जाँच, बाध्य मॉडल की जाँच और कई और जो शोध भी किए जा रहे हैं, यद्यपि एसएमटी, afaik है, वर्तमान में सबसे "आधुनिक" दृष्टिकोण है।
सामान्य विचार की सीमा के बारे में:
- जैसा कि पहले कहा गया है, कार्यक्रम की शुद्धता साबित करना एक कम्प्यूटेशनल रूप से कठिन समस्या है, इसलिए यह संभव हो सकता है कि संविदा (या विनिर्देश के किसी अन्य रूप) के साथ एक कार्यक्रम का संकलन समय की जांच वास्तव में लंबा हो या असंभव भी हो सकता है। हेयर्स्टिक्स को लागू करना जो सबसे अच्छा काम करता है वह सबसे अच्छा है जो इसके बारे में कर सकता है।
- जितना अधिक आप अपने कार्यक्रम के बारे में निर्दिष्ट करते हैं, उच्चतर को विनिर्देशन में बग होने की संभावना मिलती है । इससे झूठी सकारात्मकता हो सकती है (संकलन समय की जांच विफल हो जाती है, भले ही सब कुछ बग-मुक्त हो) या सुरक्षित होने का झूठा आभास हो, भले ही आपके कार्यक्रम में अभी भी कीड़े हों।
- अनुबंध या विनिर्देशों लिखना वास्तव में थकाऊ काम है और अधिकांश प्रोग्रामर इसे करने के लिए बहुत आलसी हैं। हर जगह कोड कॉन्ट्रैक्ट के साथ C # प्रोग्राम लिखने की कोशिश करें, थोड़ी देर के बाद आप सोचेंगे "क्या यह वास्तव में आवश्यक है?"। यही कारण है कि औपचारिक सत्यापन आमतौर पर केवल हार्डवेयर डिज़ाइन और सुरक्षा महत्वपूर्ण प्रणालियों के लिए उपयोग किया जाता है, जैसे कि हवाई जहाज या ऑटोमोटिव को नियंत्रित करने वाले सॉफ़्टवेयर।
एक अंतिम बात जो उल्लेख के लायक है, जो उपरोक्त स्पष्टीकरण के लायक नहीं है, वह है "इंप्लांटस कॉम्पलेक्सिटी थ्योरी" नामक एक क्षेत्र, उदाहरण के लिए इस पत्र । इसका उद्देश्य उन प्रोग्रामिंग भाषाओं को चिह्नित करना है, जिनमें आप प्रत्येक प्रोग्राम को लिख सकते हैं, जो एक विशिष्ट जटिलता वर्ग में आते हैं, उदाहरण के लिए पी। ऐसी भाषा में, आप जो भी प्रोग्राम लिखते हैं, वह स्वचालित रूप से बहुपदीय रनटाइम का "सुनिश्चित" होता है, जिसे "चेक" किया जा सकता है। बस कार्यक्रम को संकलित करके संकलन समय पर। मैं इस शोध के किसी भी व्यावहारिक रूप से प्रयोग करने योग्य परिणाम के बारे में नहीं जानता, हालांकि, लेकिन मैं एक विशेषज्ञ होने से बहुत दूर हूं।