हम कैसे जान सकते हैं कि औपचारिक तरीके काम करते हैं?


20

औपचारिक तरीकों का एक महत्वपूर्ण लक्ष्य सिस्टम की शुद्धता को साबित करना है, या तो स्वचालित या मानव-निर्देशित साधनों द्वारा। हालाँकि, ऐसा लगता है कि भले ही आप एक सही प्रमाण दे सकें, आप यह गारंटी नहीं दे सकते कि सिस्टम विफल नहीं होगा। उदाहरण के लिए:

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

4
मुद्दे 1 और 3 सिस्टम विश्लेषण के निहित हैं, जो भी विधि है। औपचारिक तरीके कम से कम अन्य तरीकों के विपरीत, उन्हें स्पष्ट करते हैं। समस्या 2 गैर-मौजूद है जहाँ तक मुझे पता है; मैंने जिन औपचारिक प्रणालियों का उपयोग किया है, वे सही साबित हुई हैं; आप अपने आप को संशोधित करके और गलतियाँ करके, हर कटौती प्रणाली को गड़बड़ कर सकते हैं
राफेल

8
यह सवाल विषय के बजाय, और एक तरह से उत्तेजित करने के लिए है। मैं rephrasing या समापन की सिफारिश करेंगे।
सुरेश वेंकट

4
मैंने अपने फैसले में प्रश्न को अधिक उपयोगी बनाने के लिए कुछ प्रमुख संशोधन किए। यदि आपको लगता है कि यह बहुत आक्रामक था, तो कृपया मेटा में पोस्ट करें।
नील कृष्णस्वामी

1
@ नील: अच्छा संपादन। एक चीज जो आपके परिवर्तन को छोड़ देती है, वह सिस्टम सुरक्षा का संदर्भ है, जो मूल प्रश्न के सार का हिस्सा था। शायद जेनी उसे वापस रख सकती है, फिर से उसे अपना सवाल बनाने के लिए।
डेव क्लार्क

1
नई बुलेट 4 के लिए: बड़ी गलत धारणा: (यथार्थवादी) परीक्षण त्रुटियों की अनुपस्थिति को कभी नहीं दिखा सकता है।
राफेल

जवाबों:


11

4 के बारे में: औपचारिक तरीकों और परीक्षण के संयोजन के बहुत सारे काम हैं। Googling "औपचारिक तरीकों का परीक्षण" काफी बड़ी मात्रा में काम का खुलासा करता है। हालांकि इस तरह के काम के कई अलग-अलग लक्ष्य हैं, लेकिन प्रमुख लक्ष्यों में से एक अधिक प्रभावी परीक्षण सूट उत्पन्न करना है। यह बात एक अच्छा परिचय मॉडल की जाँच के आधार पर देता है।

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

अंक 3 के बारे में: सेटिंग्स में सिस्टम को सत्यापित करने के लिए कुछ काम किया गया है, जहां दोष स्पष्ट रूप से निर्धारित किए गए हैं, जिनमें दोषपूर्ण तर्क शामिल हैं: तर्क-सहिष्णु कार्यक्रमों के बारे में तर्क। मैथ्यू मेला और डेविड वॉकर। प्रोग्रामिंग पर यूरोपीय संगोष्ठी, 2010. संभाव्य मॉडल की जाँच और संभाव्य सत्यापन पर काम निश्चित रूप से दोनों कुछ हद तक दोष के मुद्दे को भी संबोधित करते हैं।


9

आपके अंक क्रम में:

  • सभी विशिष्टताओं की शुद्धता अंततः व्यक्तिपरक होती है: उन्हें अपने उपयोगकर्ताओं के अनुसार किसी समस्या को सही ढंग से हल करने के लिए माना जाता है या वे नहीं करते हैं। इस सॉफ्टवेयर विकास से कोई दूर नहीं हो रहा है, और किसी भी विधि के लिए चांदी की गोली नहीं है।
  • बहुत सारे काम यह साबित करने में जाते हैं कि प्रक्रिया अपनी मान्यताओं के संबंध में सही है। आमतौर पर विशेषज्ञों के लिए इन नियमों को मान्य करने के लिए जानकारी उपलब्ध है। किसी भी मानव गतिविधि त्रुटि के अधीन है लेकिन बहुत औपचारिक रूप से अच्छी तरह से अध्ययन किया तरीकों का उपयोग कर सिस्टम बहुत कम लगभग सभी अन्य मानव प्रक्रियाओं की तुलना में त्रुटि के अधीन है।
  • किसी बिंदु पर, किसी भी प्रणाली में उस प्रणाली के दायरे से बाहर एक विफलता मोड होता है। आप अभी भी त्रुटि के सभी पूर्वानुमान योग्य स्रोतों को समाप्त करने से बेहतर हैं , भले ही आप कुछ अप्रत्याशित लोगों के लिए बेहिसाब छोड़ दें।
  • परीक्षण और साबित करना आसानी से सह-अस्तित्व में आ सकता है। परीक्षण एक कम विशिष्ट, अधिक तदर्थ प्रक्रिया है, इसलिए आपको इस पर किए गए कम औपचारिक काम मिल सकते हैं। लेकिन आप क्विकचेक जैसे टूल में दिलचस्पी ले सकते हैं जो हास्केल प्रकार प्रणाली द्वारा प्रस्तुत साक्ष्यों के साथ पूरक है।

9

औपचारिक तरीके पहले से ही बड़े समय के काम करने के लिए दिखाए गए हैं। उनके बिना, हम आधुनिक डिजिटल सिस्टम (माइक्रोप्रोसेसर) को डिजाइन करने की जटिलता से निपटने में कामयाब नहीं होते।

कार्यात्मक तुल्यता सत्यापन के बिना अपने तर्क के बिना कोई सूक्ष्म जहाज; एफपीयू के बिना एफवी के अधीन रहा; इसके कैश सुसंगत प्रोटोकॉल के बिना FV के अधीन है (यह 1995 के बाद से मामला है)।

सॉफ्टवेयर और इंजीनियर भौतिक प्रणालियों (जैसे पुलों, जहां कोई सुरक्षा कारक जोड़ सकते हैं) के बीच स्पष्ट अंतर को छोड़कर, वे सीएस में इंजीनियरिंग गणित की भूमिका निभाते हैं। हालांकि, एफएम का उपयोग हमेशा लाभ / लागत पर निर्भर करता है। Microsoft (Google SAGE एक स्लाइड में) जैसी कंपनियों पर फ़र्ज़ परीक्षण बड़े समय का भुगतान करता है।

एक माइक्रो के भीतर भी, सबसिस्टम (जैसे माइक्रोप्रोसेसर पाइपलाइन) हैं, जहां एफवी का कहीं और के समान प्रभाव नहीं है (उदाहरण के लिए एफपीयू, जहां पारंपरिक परीक्षण कई मामलों में बिल्कुल भी नहीं किया गया था जब औपचारिक प्रतीकात्मक प्रक्षेपवक्र मूल्यांकन बग की अनुपस्थिति साबित हुए थे) : कैवोला एट अल CAV'09)।

औपचारिक तरीकों का उपयोग कलाकृतियों के संश्लेषण (कोड, उच्च-गुणवत्ता वाले परीक्षण, बेहतर बैटरी बैंकों के लिए शेड्यूल, ...) में भी किया जा रहा है। बेशक, प्रश्न में उठाए गए सभी मुद्दे काफी मान्य हैं, और प्रौद्योगिकी के किसी अन्य उपयोग की तरह, झूठे विज्ञापनों को मान्यता दी जानी चाहिए और उनसे बचा जाना चाहिए।


8

2 के बारे में: यदि सिस्टम को एक प्रमाण सहायक (जैसे, ट्वेल्फ़ या एजडा या कोक) में औपचारिक रूप दिया जाता है और ध्वनि और पूर्णता के गुणों को सत्यापित किया जाता है, और इस एन्कोडिंग में सबूत होते हैं, तो यह एक गैर-मुद्दा है। आपने एक ऐसी प्रणाली को औपचारिक रूप दिया होगा जो आपके इच्छित उद्देश्य का वर्णन नहीं कर रही है, लेकिन कम से कम आपके पास गलत प्रमाण या एक टूटी हुई प्रणाली नहीं होगी जिसमें आप तर्क कर रहे हैं।


1
इसके अलावा, आपके एन्कोडिंग की "पर्याप्तता" के रूप में कुछ जाना जाता है: यह कि आपने एक प्रमाण सहायक में जो औपचारिक रूप दिया है वह वास्तव में आपके द्वारा कागज पर लिखी गई प्रणाली है (देखें twelf.plparty.org/wiki/Adequacy )। हालांकि, यह आपके पहले बिंदु को संबोधित नहीं कर रहा है, यह एक आक्षेप का निर्माण कर रहा है।
जेमी मॉर्गेनस्टर्न

6

हालाँकि, ऐसा लगता है कि भले ही आप एक सही प्रमाण दे सकें, आप यह गारंटी नहीं दे सकते कि सिस्टम विफल नहीं होगा।

हां, शायद कोई गारंटी नहीं है । औपचारिक तरीके त्रुटियों को खोजने और खत्म करने और मनुष्यों को समझाने के लिए हैं।

क्या तकनीकों का परीक्षण करने के लिए जाना जाता है कि क्या कोई विनिर्देश बिल्कुल भी समझ में आता है?

आपको औपचारिक प्रणालियों के विनिर्देशों के लिए मॉडल जाँच उपकरणों में रुचि हो सकती है

प्रमाण प्रक्रिया भी त्रुटिपूर्ण हो सकती है! कौन जानता है कि उन अनुमान नियम सही और वैध हैं?

मुझे लगता है कि (गोएडेल के अधूरे प्रमेय के कारण) एक इंट्रेंस नियमों की प्रणाली दिखा रहा है, यह लगातार आवश्यक है कि एक और भी अधिक शक्तिशाली प्रक्षेपी नियमों की अपील की जाती है।

इसके अलावा, सबूत बहुत बड़े हो सकते हैं, और हम कैसे जानते हैं कि उनमें त्रुटियां नहीं हैं?

उम्मीद है, एक छोटे से प्रूफ चेकर द्वारा विशाल सबूतों की जांच की जाती है जो कि उचित समय में मनुष्यों द्वारा पढ़ा और समझा जा सकता है। इसे कभी-कभी "डी ब्रूजन मानदंड" कहा जाता है। यदि आप मानते हैं कि प्रूफ चेकर एक गलत प्रूफ को प्रमाणित नहीं करेगा, तो आपको केवल चेकर की जांच करनी होगी।

क्या वास्तविक हार्डवेयर की गिरावट के लिए कोई तकनीक ज्ञात है?

फाल्ट टॉलरेंट टाइप असेंबली लैंग्वेज के बारे में कैसे ?

हालांकि, मैं ज्यादातर शोध देखता हूं जो या तो औपचारिक तरीकों या परीक्षण पर केंद्रित है। दोनों के संयोजन के बारे में क्या जाना जाता है?

"टीएपी सम्मेलन साक्ष्यों और परीक्षणों के अभिसरण के लिए समर्पित है"

"सबूत और परीक्षण" के लिए बस googling में गुना के ऊपर कई अच्छे हिट हैं।


5

क्या तकनीकों का परीक्षण करने के लिए जाना जाता है कि क्या कोई विनिर्देश बिल्कुल भी समझ में आता है?

यह निश्चित रूप से एक निर्णय कॉल है। सॉफ्टवेयर इंजीनियरिंग में, लोगों ने विनिर्देशों को खोजने / लिखने / पुष्टि करने के लिए बहुत सख्त कार्यप्रणाली तैयार की है। यह वास्तविक मनुष्यों द्वारा किया जाता है और एक गैर औपचारिक (अर्थ गैर-गणितीय प्रक्रिया में) का उपयोग करता है, इसलिए यह अभी भी असंगति के अधीन है, लेकिन दिन के अंत में, यह मेल खाती है कि लोग क्या सत्यापित करना चाहते हैं, कोई कम नहीं।

क्या वास्तविक हार्डवेयर की गिरावट के लिए कोई तकनीक ज्ञात है?

निश्चित रूप से, सत्यापन के क्षेत्र को रनटाइम सत्यापन के रूप में जाना जाता है , आप विशिष्ट परिदृश्य के लिए पूरी तरह से आभासी वातावरण पर चल रहे वास्तविक सिस्टम पर निष्पादन आधारित मॉडल की जांच का उपयोग कर सकते हैं (मैंने खुद को वी-डीएस + एपीएमसी के साथ इसमें योगदान दिया )। हालांकि, यह स्पष्ट रूप से सत्यापन प्रक्रिया में सिस्टम और पर्यावरण के बीच बातचीत को जोड़ने के लिए एक बड़ी समस्या है।

हालांकि, मैं ज्यादातर शोध देखता हूं जो या तो औपचारिक तरीकों या परीक्षण पर केंद्रित है। दोनों के संयोजन के बारे में क्या जाना जाता है?

वाह, आज मैं पूरी तरह से बेशर्म हो जाऊंगा और खुद को फिर से उद्धृत करूंगा। Coauthors के साथ हम मॉडल की जाँच और परीक्षण के संयोजन पर काम करते हैं, आप हमारे समूह के एक पूर्व पीएचडी छात्र की प्रकाशन सूची देख सकते हैं या किसी भी अच्छे खोज इंजन में "अनुमानित संभाव्य मॉडल जाँच" या "सांख्यिकीय मॉडल जाँच" के लिए खोज कर सकते हैं (काम द्वारा किया गया) यूनिस एट अल।, सेन एट अल। या खुद एट अल। और कई अन्य)।


विज्ञापन 1: ध्यान दें कि प्राकृतिक भाषा में योगों के विपरीत व्यक्तिपरक हिस्से की सहायता करने के लिए विशिष्ट औपचारिकताओं की आवश्यकता है। बहुत सटीक होने से, विसंगतियां और अनिश्चितताएं दिखाई देती हैं और उन्हें हल करना पड़ता है।
राफेल

प्रक्रिया गैर औपचारिक है, लेकिन इसका परिणाम है, मॉडल की जाँच के लिए, आमतौर पर एक लौकिक सूत्र (उदाहरण के लिए एलटीएल या सीटीएल)। मेरे अनुभव में (उद्योग के लोगों के साथ), औपचारिक भाषा का उपयोग करने से जरूरी परिणाम की स्थिरता में सुधार नहीं होता है :(
सिल्वेन पायरोननेट

लेकिन आप कम से कम विसंगतियों के लिए जाँच कर सकते हैं, नहीं? "आप क्या चाहते हैं" के बारे में आपके अनुभव क्या हैं?
राफेल

2
हां, मैं विसंगतियों की जांच कर सकता हूं, लेकिन दुर्भाग्य से यह हमेशा उन्हें हल करने में मदद नहीं करता है। समस्या यह है कि अधिकांश इंजीनियरों / औद्योगिक डिजाइनरों के लिए शास्त्रीय सत्यापन भाषाओं में विनिर्देश लिखना बहुत मुश्किल है। मेरी राय यह है कि, यदि आपके पास एक विनिर्देश भाषा का गहरा ज्ञान नहीं है, तो इसका उपयोग करना आपको बहुत मार्गदर्शन करेगा: आप केवल वही लिखते हैं जो आप भाषा की थोड़ी परिचितता के साथ लिखने में सक्षम हैं। संक्षेप में, यह आपकी रचनात्मकता को मारता है।
सिल्वेन पाइरोननेट

5

आप जॉन रुश्बी के कामों में बहुत दिलचस्पी ले सकते हैं , जो पीवीएस प्रमेय प्रोवेर के डिजाइनरों में से एक हैं, जो आपके द्वारा उल्लिखित बिंदुओं में उदारतापूर्वक रुचि रखते हैं। औपचारिक तरीकों और क्रिटिकल सिस्टम्स (1993) के प्रमाणन के उपयोग के बारे में एफएए के लिए इस क्लासिक रिपोर्ट को पढ़ने में आपको आनंद आ सकता है , और उपलब्ध कराए गए साक्ष्य के विभिन्न माध्यमों से एक संभाव्य, औपचारिक सुरक्षा मामले को इकट्ठा करने के बारे में उनके नए लेखन (परीक्षण, प्रमाण) विश्लेषण, आदि)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.