औपचारिक विनिर्देश

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

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

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

यह ध्यान रखना महत्वपूर्ण है कि एक औपचारिक विनिर्देश एक कार्यान्वयन नहीं है, बल्कि इसका उपयोग कार्यान्वयन को विकसित करने के लिए किया जा सकता है। औपचारिक विनिर्देश वर्णन करते हैं कि सिस्टम को क्या करना चाहिए, न कि सिस्टम को कैसे करना चाहिए।

एक अच्छे विनिर्देशन में निम्नलिखित में से कुछ विशेषताएँ होनी चाहिए: पर्याप्त, आंतरिक रूप से सुसंगत, स्पष्ट, पूर्ण, संतुष्ट, न्यूनतम

एक अच्छे विनिर्देशन में होगा:

* निर्माण क्षमता, प्रबंधनीयता और विकास
 * उपयोगिता
 * संप्रेषणीयता
 * शक्तिशाली और कुशल विश्लेषण

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

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

सॉफ्टवेयर विकास के औपचारिक तरीके उद्योग में व्यापक रूप से उपयोग नहीं किए जाते हैं। अधिकांश कंपनियां उन्हें अपनी सॉफ्टवेयर विकास प्रक्रियाओं में लागू करने के लिए लागत प्रभावी नहीं मानती हैं। इसके कई कारण हो सकते हैं, जिनमें से कुछ हैं:


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

अन्य सीमाएँ:

* एकांत
 * निम्न-स्तरीय ऑन्कोलॉजी
 * खराब मार्गदर्शन
 * चिंताओं का खराब अलगाव
 * खराब टूल फीडबैक

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


 * इतिहास-आधारित विनिर्देश
 * सिस्टम इतिहास पर आधारित व्यवहार
 * कथनों की व्याख्या समय के साथ की जाती है
 * राज्य आधारित विनिर्देश
 * सिस्टम स्टेट्स पर आधारित व्यवहार
 * अनुक्रमिक चरणों की श्रृंखला, (उदाहरण के लिए एक वित्तीय लेनदेन)
 * जेड अंकन, वियना विकास पद्धति या बी-विधि जैसी भाषाएं इस प्रतिमान पर भरोसा करती हैं
 * संक्रमण-आधारित विनिर्देश
 * प्रणाली के राज्य से राज्य के संक्रमण के आधार पर व्यवहार
 * एक प्रतिक्रियाशील प्रणाली के साथ सबसे अच्छा उपयोग किया जाता है
 * Statecharts, PROMELA, STeP-SPL, RSML या SCR जैसी भाषाएँ इस प्रतिमान पर भरोसा करती हैं
 * कार्यात्मक विनिर्देश
 * गणितीय कार्यों की संरचना के रूप में एक प्रणाली निर्दिष्ट करें
 * OBJ, ASL, PLUSS, LARCH, HOL या PVS इस प्रतिमान पर भरोसा करते हैं
 * परिचालन विशिष्टता
 * शुरुआती भाषाएँ जैसे पैस्ले (प्रोग्रामिंग लैंग्वेज), जीआईएसटी, पेट्री नेट या प्रोसेस अल्जेब्रा इस प्रतिमान पर निर्भर करती हैं

उपरोक्त प्रतिमानों के अतिरिक्त, इन विशिष्टताओं के निर्माण में सुधार करने में सहायता के लिए कुछ ह्यूरिस्टिक्स लागू करने के तरीके हैं। यहां संदर्भित पेपर विनिर्देश डिजाइन करते समय उपयोग करने के लिए ह्यूरिस्टिक्स पर सबसे अच्छी चर्चा करता है। वे एक विभाजन और जीत एल्गोरिथम लागू करके ऐसा करते हैं |

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

कुछ उपकरण हैं:
 * बीजीय
 * लर्च परिवार
 * ओबीजे (प्रोग्रामिंग भाषा)
 * टेम्पोरल ऑर्डरिंग विशिष्टता की भाषा
 * मॉडल आधारित
 * जेड-विधि
 * बी-विधि
 * वियना विकास पद्धति
 * अनुक्रमिक प्रक्रियाओं का संचार करना
 * पेट्री नेट
 * टीएलए+

यह भी देखें

 * बीजगणितीय विनिर्देश
 * औपचारिक तरीके
 * मॉडल-आधारित विनिर्देश
 * सॉफ्टवेयर इंजीनियरिंग
 * विशिष्टता भाषा
 * विशिष्टता (तकनीकी मानक)

बाहरी संबंध

 * A Case for Formal Specification (Technology) by Coryoth 2005-07-30