अनुबंध द्वारा डिजाइन: Difference between revisions
(Created page with "{{Short description|Approach for designing software}} thumbnail|अनुबंध योजना द्वारा एक डिजाइन...") |
(text) |
||
Line 1: | Line 1: | ||
{{Short description|Approach for designing software}} | {{Short description|Approach for designing software}} | ||
[[File:Design by contract.svg|thumbnail|अनुबंध योजना द्वारा एक डिजाइन]]अनुबंध द्वारा डिजाइन (डीबीसी), जिसे अनुबंध प्रोग्रामिंग, अनुबंध द्वारा प्रोग्रामिंग और डिजाइन-दर-अनुबंध प्रोग्रामिंग के रूप में भी जाना जाता है, [[सॉफ्टवेर डिज़ाइन]] के लिए | [[File:Design by contract.svg|thumbnail|अनुबंध योजना द्वारा एक डिजाइन]]अनुबंध द्वारा डिजाइन (डीबीसी), जिसे अनुबंध प्रोग्रामिंग, अनुबंध द्वारा प्रोग्रामिंग और डिजाइन-दर-अनुबंध प्रोग्रामिंग के रूप में भी जाना जाता है, [[सॉफ्टवेर डिज़ाइन]] के लिए दृष्टिकोण है। | ||
यह निर्धारित करता है कि | यह निर्धारित करता है कि सॉफ़्टवेयर डिजाइनरों को सॉफ़्टवेयर घटकों के लिए औपचारिक, सटीक और सत्यापन योग्य इंटरफ़ेस विनिर्देशों को परिभाषित करना चाहिए, जो [[सार डेटा प्रकार|अमूर्त डेटा प्रकार]] की सामान्य परिभाषा को पूर्वापेक्षा, [[शर्त लगाना|पोस्टकंडिशन]] और [[अपरिवर्तनीय (कंप्यूटर विज्ञान)]] के साथ विस्तारित करता है। व्यावसायिक अनुबंधों की शर्तों और दायित्वों के साथ [[वैचारिक रूपक]] के अनुसार, इन विशिष्टताओं को अनुबंध के रूप में संदर्भित किया जाता है। | ||
डीबीसी दृष्टिकोण उन सभी क्लाइंट घटकों आक्रामक प्रोग्रामिंग है जो सर्वर अवयव पर संचालन का आह्वान करते हैं, उस संचालन के लिए आवश्यक पूर्वापेक्षा को पूरा करते हैं। | |||
जहां इस धारणा को बहुत जोखिम भरा माना जाता है (मल्टी-चैनल या वितरित कंप्यूटिंग में), | जहां इस धारणा को बहुत जोखिम भरा माना जाता है (मल्टी-चैनल या वितरित कंप्यूटिंग में), उलटा दृष्टिकोण लिया जाता है, जिसका अर्थ है कि सर्वर अवयव परीक्षण करता है कि सभी प्रासंगिक पूर्वापेक्षा सही हैं (क्लाइंट अवयव के अनुरोध को संसाधित करने से पहले, या उसके दौरान) और उत्तर उपयुक्त त्रुटि संदेश के साथ हैं। | ||
== इतिहास == | == इतिहास == | ||
यह शब्द [[बर्ट्रेंड मेयर]] द्वारा [[एफिल (प्रोग्रामिंग भाषा)]] के अपने डिजाइन के संबंध में गढ़ा गया था और पहली बार 1986 से शुरू होने वाले विभिन्न लेखों | यह शब्द [[बर्ट्रेंड मेयर]] द्वारा [[एफिल (प्रोग्रामिंग भाषा)]] के अपने डिजाइन के संबंध में गढ़ा गया था और पहली बार 1986 से शुरू होने वाले विभिन्न लेखों <ref>Meyer, Bertrand: ''Design by Contract'', Technical Report TR-EI-12/CO, Interactive Software Engineering Inc., 1986</ref><ref>Meyer, Bertrand: ''Design by Contract'', in ''Advances in Object-Oriented Software Engineering'', eds. D. Mandrioli and B. Meyer, Prentice Hall, 1991, pp. 1–50</ref><ref>Meyer, Bertrand: ''Applying "Design by Contract"'', in Computer (IEEE), 25, 10, October 1992, pp. 40–51, also available [http://se.ethz.ch/~meyer/publications/computer/contract.pdf online]</ref> और उनकी पुस्तक [[वस्तु-उन्मुख सॉफ्टवेयर निर्माण]] के दो लगातार संस्करण (1988, 1997) में वर्णित है। एफिल सॉफ्टवेयर ने दिसंबर 2003 में अनुबंध द्वारा डिजाइन के लिए ट्रेडमार्क पंजीकरण के लिए आवेदन किया था, और इसे दिसंबर 2004 में प्रदान किया गया था।<ref name=DbC_tm_words>{{cite web|url=http://tess2.uspto.gov/bin/showfield?f=doc&state=4010:lsqmmo.2.2|title="डिज़ाइन बाय कॉन्ट्रेक्ट" के लिए संयुक्त राज्य पेटेंट और ट्रेडमार्क कार्यालय पंजीकरण|access-date=2009-06-22|archive-date=2016-12-21|archive-url=https://web.archive.org/web/20161221062729/http://tess2.uspto.gov/bin/showfield?f=doc&state=4010:lsqmmo.2.2|url-status=dead}}</रेफरी><ref name=DbC_tm_design>{{cite web|url=http://tess2.uspto.gov/bin/showfield?f=doc&state=4010:lsqmmo.2.1|title=संयुक्त राज्य अमेरिका पेटेंट और ट्रेडमार्क कार्यालय पंजीकरण "अनुबंध द्वारा डिजाइन" शब्दों के साथ ग्राफिक डिजाइन के लिए|access-date=2009-06-22|archive-date=2016-12-21|archive-url=https://web.archive.org/web/20161221062436/http://tess2.uspto.gov/bin/showfield?f=doc&state=4010:lsqmmo.2.1|url-status=dead}}</ref> इस ट्रेडमार्क का वर्तमान अधिष्ठाता एफिल सॉफ्टवेयर है।<ref name=DbC_tm_words2>{{cite web|url=http://tarr.uspto.gov/servlet/tarr?regser=serial&entry=78342277|title=ट्रेडमार्क स्थिति और दस्तावेज़ पुनर्प्राप्ति|website=tarr.uspto.gov}}</रेफरी><ref name=DbC_tm_design2>{{cite web|url=http://tarr.uspto.gov/servlet/tarr?regser=serial&entry=78342308|title=ट्रेडमार्क स्थिति और दस्तावेज़ पुनर्प्राप्ति|website=tarr.uspto.gov}}</रेफरी> | ||
[[औपचारिक सत्यापन]], [[औपचारिक विनिर्देश]] और [[होरे तर्क]] पर काम में अनुबंध द्वारा डिजाइन की जड़ें हैं। मूल योगदान में शामिल हैं: | [[औपचारिक सत्यापन]], [[औपचारिक विनिर्देश]] और [[होरे तर्क]] पर काम में अनुबंध द्वारा डिजाइन की जड़ें हैं। मूल योगदान में शामिल हैं: | ||
Line 68: | Line 68: | ||
बग-मुक्त कार्यक्रम के निष्पादन के दौरान अनुबंध की शर्तों का कभी भी उल्लंघन नहीं किया जाना चाहिए। अनुबंध इसलिए आमतौर पर केवल सॉफ्टवेयर विकास के दौरान डिबग मोड में चेक किए जाते हैं। बाद में रिलीज़ होने पर, प्रदर्शन को अधिकतम करने के लिए अनुबंध जाँच अक्षम कर दी जाती है। | बग-मुक्त कार्यक्रम के निष्पादन के दौरान अनुबंध की शर्तों का कभी भी उल्लंघन नहीं किया जाना चाहिए। अनुबंध इसलिए आमतौर पर केवल सॉफ्टवेयर विकास के दौरान डिबग मोड में चेक किए जाते हैं। बाद में रिलीज़ होने पर, प्रदर्शन को अधिकतम करने के लिए अनुबंध जाँच अक्षम कर दी जाती है। | ||
कई प्रोग्रामिंग भाषाओं में, अनुबंधों को अभिकथन (सॉफ्टवेयर विकास) के साथ कार्यान्वित किया जाता है। आवेषण डिफ़ॉल्ट रूप से सी/सी ++ में रिलीज मोड में संकलित किए जाते हैं, और इसी तरह सी # में निष्क्रिय होते हैं<ref>{{cite web|url=https://msdn.microsoft.com/en-us/library/ttcc4x86.aspx|title=Assertions in Managed Code|website=msdn.microsoft.com}}</ref> | कई प्रोग्रामिंग भाषाओं में, अनुबंधों को अभिकथन (सॉफ्टवेयर विकास) के साथ कार्यान्वित किया जाता है। आवेषण डिफ़ॉल्ट रूप से सी/सी ++ में रिलीज मोड में संकलित किए जाते हैं, और इसी तरह सी # में निष्क्रिय होते हैं<ref>{{cite web|url=https://msdn.microsoft.com/en-us/library/ttcc4x86.aspx|title=Assertions in Managed Code|website=msdn.microsoft.com}}</ref> | ||
एक तर्क के रूप में -O (ऑप्टिमाइज़ के लिए) के साथ पायथन दुभाषिया को | एक तर्क के रूप में -O ("ऑप्टिमाइज़" के लिए) के साथ पायथन दुभाषिया को प्रक्षेपित करने से इसी तरह पायथन कोड जनरेटर को अभिकथन के लिए किसी भी बायटेकोड का उत्सर्जन नहीं करने का कारण बनता है।<ref>[https://docs.python.org/3/reference/simple_stmts.html#grammar-token-assert-stmt Official Python Docs, ''assert statement'']</ref> | ||
यह प्रभावी रूप से उत्पादन कोड में अभिकथनों की रन-टाइम लागतों को समाप्त करता है-विकास में उपयोग किए गए अभिकथनों की संख्या और कम्प्यूटेशनल व्यय के बावजूद-संकलक द्वारा उत्पादन में ऐसे कोई निर्देश शामिल नहीं किए | |||
यह प्रभावी रूप से उत्पादन कोड में अभिकथनों की रन-टाइम लागतों को समाप्त करता है-विकास में उपयोग किए गए अभिकथनों की संख्या और कम्प्यूटेशनल व्यय के बावजूद-संकलक द्वारा उत्पादन में ऐसे कोई निर्देश शामिल नहीं किए जाते हैं। | |||
== सॉफ्टवेयर परीक्षण से संबंध == | == सॉफ्टवेयर परीक्षण से संबंध == | ||
अनुबंध द्वारा डिज़ाइन नियमित परीक्षण रणनीतियों को प्रतिस्थापित नहीं करता है, जैसे इकाई परीक्षण, एकीकरण परीक्षण और [[सिस्टम परीक्षण]] | अनुबंध द्वारा डिज़ाइन नियमित परीक्षण रणनीतियों को प्रतिस्थापित नहीं करता है, जैसे इकाई परीक्षण, एकीकरण परीक्षण और [[सिस्टम परीक्षण]] हैं। इसके बजाय, यह बाहरी परीक्षण को आंतरिक स्व-परीक्षणों के साथ पूरक करता है जिसे परीक्षण-चरण के दौरान पृथक परीक्षणों और उत्पादन कोड दोनों में सक्रिय किया जा सकता है। | ||
आंतरिक स्व-परीक्षणों का लाभ यह है कि वे क्लाइंट द्वारा देखे गए अमान्य परिणामों के रूप में स्वयं को प्रकट करने से पहले त्रुटियों का पता लगा सकते हैं। इससे पहले और अधिक विशिष्ट त्रुटि का पता चलता है। | आंतरिक स्व-परीक्षणों का लाभ यह है कि वे क्लाइंट द्वारा देखे गए अमान्य परिणामों के रूप में स्वयं को प्रकट करने से पहले त्रुटियों का पता लगा सकते हैं। इससे पहले और अधिक विशिष्ट त्रुटि का पता चलता है। | ||
अभिकथन के उपयोग को परीक्षण ऑरेकल का | अनुबंध कार्यान्वयन द्वारा डिजाइन का परीक्षण करने का एक तरीका अभिकथन के उपयोग को परीक्षण ऑरेकल का रूप माना जा सकता है। | ||
== भाषा समर्थन == | == भाषा समर्थन == | ||
Line 102: | Line 103: | ||
* एफिल (प्रोग्रामिंग भाषा) | * एफिल (प्रोग्रामिंग भाषा) | ||
* [[किले (प्रोग्रामिंग भाषा)]] | * [[किले (प्रोग्रामिंग भाषा)]] | ||
* | * कोटलिन (प्रोग्रामिंग_भाषा) | ||
* बुध (प्रोग्रामिंग भाषा) | * बुध (प्रोग्रामिंग भाषा) | ||
* [[ऑक्सीजन (प्रोग्रामिंग भाषा)]] (पूर्व में क्रोम और डेल्फी प्रिज्म<ref>{{cite web | url=http://edn.embarcadero.com/article/39398 | title=Write Cleaner, Higher Quality Code with Class Contracts in Delphi Prism | publisher=Embarcadero Technologies | access-date=20 January 2016 | author=Hodges, Nick}}</ref>) | * [[ऑक्सीजन (प्रोग्रामिंग भाषा)]] (पूर्व में क्रोम और डेल्फी प्रिज्म<ref>{{cite web | url=http://edn.embarcadero.com/article/39398 | title=Write Cleaner, Higher Quality Code with Class Contracts in Delphi Prism | publisher=Embarcadero Technologies | access-date=20 January 2016 | author=Hodges, Nick}}</ref>) | ||
* [[रैकेट (प्रोग्रामिंग भाषा)]] (उच्च आदेश अनुबंधों सहित, और अनुबंध के उल्लंघन पर जोर देते हुए दोषी | * [[रैकेट (प्रोग्रामिंग भाषा)]] (उच्च आदेश अनुबंधों सहित, और अनुबंध के उल्लंघन पर जोर देते हुए दोषी पक्ष को निदा देना चाहिए और सटीक स्पष्टीकरण के साथ ऐसा करना चाहिए<ref>Findler, Felleisen [http://www.eecs.northwestern.edu/~robby/pubs/papers/ho-contracts-icfp2002.pdf Contracts for Higher-Order Functions]</ref>) | ||
* [[सथर]] | * [[सथर]] | ||
* | * स्काला (प्रोग्रामिंग_भाषा)<ref name="scala-assertions-dbc"> | ||
{{cite web | {{cite web | ||
| title = Scala Standard Library Docs - Assertions | | title = Scala Standard Library Docs - Assertions | ||
Line 122: | Line 123: | ||
===तृतीय-पक्ष समर्थन वाली भाषाएं=== | ===तृतीय-पक्ष समर्थन वाली भाषाएं=== | ||
मौजूदा प्रोग्रामिंग भाषाओं के लिए मूल डिजाइन के बिना अनुबंध समर्थन द्वारा विभिन्न लाइब्रेरीज, [[preprocessor|पूर्वप्रक्रमक]] और अन्य उपकरणों का विकास किया गया है: | |||
* एडा (प्रोग्रामिंग लैंग्वेज), जीएनएटी प्रागमास के माध्यम से पूर्वापेक्षा और पोस्टकंडिशन के लिए। | |||
* [[सी (प्रोग्रामिंग भाषा)|C (प्रोग्रामिंग भाषा)]] और [[सी ++|C ++]]: | |||
** [https://www.boost.org/doc/libs/master/libs/contract/doc/html/index.html बूस्ट.कॉन्ट्रैक्ट] | |||
मौजूदा प्रोग्रामिंग भाषाओं के लिए मूल डिजाइन के बिना अनुबंध समर्थन द्वारा विभिन्न | ** C प्रीप्रोसेसर के लिए डीबीसी | ||
* एडा (प्रोग्रामिंग लैंग्वेज), जीएनएटी प्रागमास के माध्यम से | |||
* [[सी (प्रोग्रामिंग भाषा)]] और [[सी ++]]: | |||
** [https://www.boost.org/doc/libs/master/libs/contract/doc/html/index.html | |||
** | |||
** जीएनयू नाना | ** जीएनयू नाना | ||
** eCv और eCv++ औपचारिक सत्यापन उपकरण | ** eCv और eCv++ औपचारिक सत्यापन उपकरण | ||
** C के [[CTESK]] एक्सटेंशन के माध्यम से [[डिजिटल मंगल]] C++ कंपाइलर | ** C के [[CTESK]] एक्सटेंशन के माध्यम से [[डिजिटल मंगल]] C++ कंपाइलर | ||
** लोकी ( | ** लोकी (C ++) कॉन्ट्रैक्ट चेकर नामक तंत्र प्रदान करता है जो वर्ग को अनुबंध द्वारा डिजाइन का सत्यापन करता है। | ||
** [https://github.com/Bambofy/dbc_cpp | ** [https://github.com/Bambofy/dbc_cpp डीबीसी C++] C++ के लिए अनुबंध द्वारा डिजाइन | ||
* | * C # (और अन्य .NET लैंग्वेज), कोड कॉन्ट्रैक्ट्स के माध्यम से<ref>{{cite web|url=https://docs.microsoft.com/en-us/dotnet/framework/debug-trace-profile/code-contracts|title=Code Contracts|website=msdn.microsoft.com}}</ref> (एक माइक्रोसॉफ्ट अनुसंधान परियोजना .NET फ्रेमवर्क 4.0 में एकीकृत) | ||
* [[ग्रूवी (प्रोग्रामिंग भाषा)]] | * [[ग्रूवी (प्रोग्रामिंग भाषा)]] जी कॉन्ट्रैक्ट के माध्यम से | ||
*[[जाओ (प्रोग्रामिंग भाषा)]] [https://github.com/drblez/dbc | *[[जाओ (प्रोग्रामिंग भाषा)]] [https://github.com/drblez/dbc डीबीसी] या [https://github.com/Parquery/gocontracts गोकोन्ट्रेक्ट्स] के माध्यम से | ||
* [[जावा (प्रोग्रामिंग भाषा)]]: | * [[जावा (प्रोग्रामिंग भाषा)]]: | ||
** सक्रिय: | ** सक्रिय: | ||
*** [https://sebthom.github.io/oval/ | *** [https://sebthom.github.io/oval/ ओवल] [[AspectJ]] के साथ | ||
*** [https://github.com/nhatminhle/cofoja Java के लिए अनुबंध] (Cofoja) | *** [https://github.com/nhatminhle/cofoja Java के लिए अनुबंध] (Cofoja) | ||
*** [[जावा मॉडलिंग भाषा]] ( | *** [[जावा मॉडलिंग भाषा]] (जेएमएल) | ||
*** [[बीन सत्यापन]] (केवल पूर्व और बाद की स्थिति)<ref>{{cite web|url=http://beanvalidation.org/1.1/spec/|title=Bean Validation specification|website=beanvalidation.org}}</ref> | *** [[बीन सत्यापन]] (केवल पूर्व और बाद की स्थिति)<ref>{{cite web|url=http://beanvalidation.org/1.1/spec/|title=Bean Validation specification|website=beanvalidation.org}}</ref> | ||
*** [http:// | *** [http://वैलिड4] | ||
*** [https://swdes.net/en/content/safer-project SafeR] (सुरक्षित संदर्भ के साथ) | *** [https://swdes.net/en/content/safer-project SafeR] (सुरक्षित संदर्भ के साथ) | ||
** निष्क्रिय/अज्ञात: | ** निष्क्रिय/अज्ञात: | ||
*** [[Jtest]] (सक्रिय लेकिन | *** [[Jtest]] (सक्रिय लेकिन डीबीसी अब समर्थित नहीं लगता है)<ref>{{Cite web|url=https://www.parasoft.com/wp-content/uploads/pdf/JtestDataSheet.pdf |archive-url=https://ghostarchive.org/archive/20221009/https://www.parasoft.com/wp-content/uploads/pdf/JtestDataSheet.pdf |archive-date=2022-10-09 |url-status=live|title=Software Testing Help from the Experts | Parasoft Resources}}</ref> | ||
*** iContract2/JContracts | *** iContract2/JContracts | ||
*** अनुबंध 4 जे | *** अनुबंध 4 जे | ||
Line 166: | Line 163: | ||
* [[निम (प्रोग्रामिंग भाषा)]], [https://github.com/Udiknedormin/NimContracts मैक्रोज़] के माध्यम से। | * [[निम (प्रोग्रामिंग भाषा)]], [https://github.com/Udiknedormin/NimContracts मैक्रोज़] के माध्यम से। | ||
* [[पर्ल]], [[सीपीएएन]] मॉड्यूल के माध्यम से वर्ग :: अनुबंध ([[डेमियन कॉनवे]] द्वारा) या कार्प :: डेटम (राफेल मैनफ्रेडी द्वारा)। | * [[पर्ल]], [[सीपीएएन]] मॉड्यूल के माध्यम से वर्ग :: अनुबंध ([[डेमियन कॉनवे]] द्वारा) या कार्प :: डेटम (राफेल मैनफ्रेडी द्वारा)। | ||
* [[PHP]], [https://github.com/php-deal/framework PhpDeal], [[क्रिसमस पार्टी]] या स्टुअर्ट हर्बर्ट के कॉन्ट्रैक्टलिब के माध्यम से। | * [[PHP]], [https://github.com/php-deal/framework PhpDeal], [[क्रिसमस पार्टी|क्रिसमस पक्ष]] या स्टुअर्ट हर्बर्ट के कॉन्ट्रैक्टलिब के माध्यम से। | ||
* [[पायथन (प्रोग्रामिंग भाषा)]], [https://github.com/life4/deal Deal], [https://pypi.org/project/icontract/ icontract], [https://pypi.org/ जैसे पैकेजों का उपयोग करके project/PyContracts3/ PyContracts], [https://pypi.org/project/dpcontracts/ dpcontracts], या [https://pypi.org/project/zope.interface/ zope.interface]। 2003 में [https://peps.python.org/pep-0316/ PEP-316] में अनुबंधों द्वारा डिजाइन का समर्थन करने के लिए पायथन में एक स्थायी परिवर्तन प्रस्तावित किया गया था, लेकिन इसे स्थगित कर दिया गया है। | * [[पायथन (प्रोग्रामिंग भाषा)]], [https://github.com/life4/deal Deal], [https://pypi.org/project/icontract/ icontract], [https://pypi.org/ जैसे पैकेजों का उपयोग करके project/PyContracts3/ PyContracts], [https://pypi.org/project/dpcontracts/ dpcontracts], या [https://pypi.org/project/zope.interface/ zope.interface]। 2003 में [https://peps.python.org/pep-0316/ PEP-316] में अनुबंधों द्वारा डिजाइन का समर्थन करने के लिए पायथन में एक स्थायी परिवर्तन प्रस्तावित किया गया था, लेकिन इसे स्थगित कर दिया गया है। | ||
* [[रूबी (प्रोग्रामिंग भाषा)]], ब्रायन मैकक्लिस्टर के DesignByContract, रूबी | * [[रूबी (प्रोग्रामिंग भाषा)]], ब्रायन मैकक्लिस्टर के DesignByContract, रूबी डीबीसी रूबी-कॉन्ट्रैक्ट या कॉन्ट्रैक्ट्स.रूबी के माध्यम से। | ||
* [[जंग (प्रोग्रामिंग भाषा)]] [https://crates.io/crates/contracts अनुबंध] क्रेट के माध्यम से। | * [[जंग (प्रोग्रामिंग भाषा)]] [https://crates.io/crates/contracts अनुबंध] क्रेट के माध्यम से। | ||
* [[स्विफ्ट (प्रोग्रामिंग भाषा)]] [https://github.com/busybusy/DBC-Apple कोकोपॉड जिम बॉयड द्वारा] के माध्यम से। | * [[स्विफ्ट (प्रोग्रामिंग भाषा)]] [https://github.com/busybusy/DBC-Apple कोकोपॉड जिम बॉयड द्वारा] के माध्यम से। | ||
Line 174: | Line 171: | ||
== यह भी देखें == | == यह भी देखें == | ||
* | * अवयव आधारित सॉफ्टवेयर इंजीनियरिंग | ||
* शुद्धता (कंप्यूटर विज्ञान) | * शुद्धता (कंप्यूटर विज्ञान) | ||
* रक्षात्मक प्रोग्रामिंग | * रक्षात्मक प्रोग्रामिंग | ||
Line 200: | Line 197: | ||
==बाहरी संबंध== | ==बाहरी संबंध== | ||
* [https://www.eiffel.com/values/design-by-contract/ The Power of Design by Contract(TM)] A top-level description of | * [https://www.eiffel.com/values/design-by-contract/ The Power of Design by Contract(TM)] A top-level description of डीबीसी, with links to additional resources. | ||
* [http://archive.eiffel.com/doc/manuals/technology/contract/ Building bug-free O-O software: An introduction to Design by Contract(TM)] Older material on | * [http://archive.eiffel.com/doc/manuals/technology/contract/ Building bug-free O-O software: An introduction to Design by Contract(TM)] Older material on डीबीसी. | ||
* [http://www.rps-obix.com/docs/manuals/design_by_contract_contract_programming.html Benefits and drawbacks; implementation in RPS-Obix] | * [http://www.rps-obix.com/docs/manuals/design_by_contract_contract_programming.html Benefits and drawbacks; implementation in RPS-Obix] | ||
* Bertrand Meyer, [http://se.ethz.ch/~meyer/publications/computer/contract.pdf ''Applying "Design by Contract"''], IEEE Computer, October 1992. | * Bertrand Meyer, [http://se.ethz.ch/~meyer/publications/computer/contract.pdf ''Applying "Design by Contract"''], IEEE Computer, October 1992. |
Revision as of 11:02, 27 February 2023
अनुबंध द्वारा डिजाइन (डीबीसी), जिसे अनुबंध प्रोग्रामिंग, अनुबंध द्वारा प्रोग्रामिंग और डिजाइन-दर-अनुबंध प्रोग्रामिंग के रूप में भी जाना जाता है, सॉफ्टवेर डिज़ाइन के लिए दृष्टिकोण है।
यह निर्धारित करता है कि सॉफ़्टवेयर डिजाइनरों को सॉफ़्टवेयर घटकों के लिए औपचारिक, सटीक और सत्यापन योग्य इंटरफ़ेस विनिर्देशों को परिभाषित करना चाहिए, जो अमूर्त डेटा प्रकार की सामान्य परिभाषा को पूर्वापेक्षा, पोस्टकंडिशन और अपरिवर्तनीय (कंप्यूटर विज्ञान) के साथ विस्तारित करता है। व्यावसायिक अनुबंधों की शर्तों और दायित्वों के साथ वैचारिक रूपक के अनुसार, इन विशिष्टताओं को अनुबंध के रूप में संदर्भित किया जाता है।
डीबीसी दृष्टिकोण उन सभी क्लाइंट घटकों आक्रामक प्रोग्रामिंग है जो सर्वर अवयव पर संचालन का आह्वान करते हैं, उस संचालन के लिए आवश्यक पूर्वापेक्षा को पूरा करते हैं।
जहां इस धारणा को बहुत जोखिम भरा माना जाता है (मल्टी-चैनल या वितरित कंप्यूटिंग में), उलटा दृष्टिकोण लिया जाता है, जिसका अर्थ है कि सर्वर अवयव परीक्षण करता है कि सभी प्रासंगिक पूर्वापेक्षा सही हैं (क्लाइंट अवयव के अनुरोध को संसाधित करने से पहले, या उसके दौरान) और उत्तर उपयुक्त त्रुटि संदेश के साथ हैं।
इतिहास
यह शब्द बर्ट्रेंड मेयर द्वारा एफिल (प्रोग्रामिंग भाषा) के अपने डिजाइन के संबंध में गढ़ा गया था और पहली बार 1986 से शुरू होने वाले विभिन्न लेखों [1][2][3] और उनकी पुस्तक वस्तु-उन्मुख सॉफ्टवेयर निर्माण के दो लगातार संस्करण (1988, 1997) में वर्णित है। एफिल सॉफ्टवेयर ने दिसंबर 2003 में अनुबंध द्वारा डिजाइन के लिए ट्रेडमार्क पंजीकरण के लिए आवेदन किया था, और इसे दिसंबर 2004 में प्रदान किया गया था।Cite error: Closing </ref>
missing for <ref>
tag इस ट्रेडमार्क का वर्तमान अधिष्ठाता एफिल सॉफ्टवेयर है।Cite error: Closing </ref>
missing for <ref>
tag
एक तर्क के रूप में -O ("ऑप्टिमाइज़" के लिए) के साथ पायथन दुभाषिया को प्रक्षेपित करने से इसी तरह पायथन कोड जनरेटर को अभिकथन के लिए किसी भी बायटेकोड का उत्सर्जन नहीं करने का कारण बनता है।[4]
यह प्रभावी रूप से उत्पादन कोड में अभिकथनों की रन-टाइम लागतों को समाप्त करता है-विकास में उपयोग किए गए अभिकथनों की संख्या और कम्प्यूटेशनल व्यय के बावजूद-संकलक द्वारा उत्पादन में ऐसे कोई निर्देश शामिल नहीं किए जाते हैं।
सॉफ्टवेयर परीक्षण से संबंध
अनुबंध द्वारा डिज़ाइन नियमित परीक्षण रणनीतियों को प्रतिस्थापित नहीं करता है, जैसे इकाई परीक्षण, एकीकरण परीक्षण और सिस्टम परीक्षण हैं। इसके बजाय, यह बाहरी परीक्षण को आंतरिक स्व-परीक्षणों के साथ पूरक करता है जिसे परीक्षण-चरण के दौरान पृथक परीक्षणों और उत्पादन कोड दोनों में सक्रिय किया जा सकता है।
आंतरिक स्व-परीक्षणों का लाभ यह है कि वे क्लाइंट द्वारा देखे गए अमान्य परिणामों के रूप में स्वयं को प्रकट करने से पहले त्रुटियों का पता लगा सकते हैं। इससे पहले और अधिक विशिष्ट त्रुटि का पता चलता है।
अनुबंध कार्यान्वयन द्वारा डिजाइन का परीक्षण करने का एक तरीका अभिकथन के उपयोग को परीक्षण ऑरेकल का रूप माना जा सकता है।
भाषा समर्थन
देशी समर्थन वाली भाषाएं
अधिकांश डीबीसी सुविधाओं को मूल रूप से लागू करने वाली भाषाओं में शामिल हैं:
- एडीए प्रोग्रामिंग भाषा
- सियाओ (प्रोग्रामिंग भाषा)
- क्लोजर
- कोबरा (प्रोग्रामिंग भाषा)
- डी (प्रोग्रामिंग भाषा)[5]
- डैफनी (प्रोग्रामिंग भाषा)
- एफिल (प्रोग्रामिंग भाषा)
- किले (प्रोग्रामिंग भाषा)
- कोटलिन (प्रोग्रामिंग_भाषा)
- बुध (प्रोग्रामिंग भाषा)
- ऑक्सीजन (प्रोग्रामिंग भाषा) (पूर्व में क्रोम और डेल्फी प्रिज्म[6])
- रैकेट (प्रोग्रामिंग भाषा) (उच्च आदेश अनुबंधों सहित, और अनुबंध के उल्लंघन पर जोर देते हुए दोषी पक्ष को निदा देना चाहिए और सटीक स्पष्टीकरण के साथ ऐसा करना चाहिए[7])
- सथर
- स्काला (प्रोग्रामिंग_भाषा)[8][9]
- स्पार्क (प्रोग्रामिंग भाषा) (एडा (प्रोग्रामिंग भाषा) कार्यक्रमों के स्थिर कोड विश्लेषण के माध्यम से)
- वाला (प्रोग्रामिंग भाषा)
- वीडीएम विनिर्देश भाषा
इसके अतिरिक्त, कॉमन लिस्प ऑब्जेक्ट सिस्टम में मानक विधि संयोजन में विधि क्वालिफायर हैं :before
, :after
और :around
जो अन्य उपयोगों के साथ अनुबंधों को सहायक तरीकों के रूप में लिखने की अनुमति देता है।
तृतीय-पक्ष समर्थन वाली भाषाएं
मौजूदा प्रोग्रामिंग भाषाओं के लिए मूल डिजाइन के बिना अनुबंध समर्थन द्वारा विभिन्न लाइब्रेरीज, पूर्वप्रक्रमक और अन्य उपकरणों का विकास किया गया है:
- एडा (प्रोग्रामिंग लैंग्वेज), जीएनएटी प्रागमास के माध्यम से पूर्वापेक्षा और पोस्टकंडिशन के लिए।
- C (प्रोग्रामिंग भाषा) और C ++:
- बूस्ट.कॉन्ट्रैक्ट
- C प्रीप्रोसेसर के लिए डीबीसी
- जीएनयू नाना
- eCv और eCv++ औपचारिक सत्यापन उपकरण
- C के CTESK एक्सटेंशन के माध्यम से डिजिटल मंगल C++ कंपाइलर
- लोकी (C ++) कॉन्ट्रैक्ट चेकर नामक तंत्र प्रदान करता है जो वर्ग को अनुबंध द्वारा डिजाइन का सत्यापन करता है।
- डीबीसी C++ C++ के लिए अनुबंध द्वारा डिजाइन
- C # (और अन्य .NET लैंग्वेज), कोड कॉन्ट्रैक्ट्स के माध्यम से[10] (एक माइक्रोसॉफ्ट अनुसंधान परियोजना .NET फ्रेमवर्क 4.0 में एकीकृत)
- ग्रूवी (प्रोग्रामिंग भाषा) जी कॉन्ट्रैक्ट के माध्यम से
- जाओ (प्रोग्रामिंग भाषा) डीबीसी या गोकोन्ट्रेक्ट्स के माध्यम से
- जावा (प्रोग्रामिंग भाषा):
- सक्रिय:
- ओवल AspectJ के साथ
- Java के लिए अनुबंध (Cofoja)
- जावा मॉडलिंग भाषा (जेएमएल)
- बीन सत्यापन (केवल पूर्व और बाद की स्थिति)[11]
- [1]
- SafeR (सुरक्षित संदर्भ के साथ)
- निष्क्रिय/अज्ञात:
- Jtest (सक्रिय लेकिन डीबीसी अब समर्थित नहीं लगता है)[12]
- iContract2/JContracts
- अनुबंध 4 जे
- जे ठेकेदार
- सी4जे
- गूगल कोडप्रो एनालिटिक्स
- स्प्रिंग फ्रेमवर्क के लिए स्प्रिंगकॉन्ट्रैक्ट्स
- जस
- आधुनिक जस (उत्तराधिकारी Cofoja है)[13][14]
- JavaDbC AspectJ का उपयोग कर
- JavaTESK जावा के विस्तार का उपयोग कर रहा है
- javassist का उपयोग कर chex4j
- अत्यधिक अनुकूलन योग्य जावा-ऑन-कॉन्ट्रैक्ट
- सक्रिय:
- जावास्क्रिप्ट, डेकोरेटर-कॉन्ट्रैक्ट्स के माध्यम से, AspectJS (विशेष रूप से, AJS_Validator), Cerny.js, ecmaDebug, jsContract, /पैकेज/डीबीसी-कोड-अनुबंध डीबीसी-कोड-अनुबंध या jscategory.
- सामान्य लिस्प, मैक्रो सुविधा या कॉमन लिस्प ऑब्जेक्ट सिस्टम metaobject के माध्यम से।
- नेमर्ले, मैक्रोज़ के माध्यम से।
- निम (प्रोग्रामिंग भाषा), मैक्रोज़ के माध्यम से।
- पर्ल, सीपीएएन मॉड्यूल के माध्यम से वर्ग :: अनुबंध (डेमियन कॉनवे द्वारा) या कार्प :: डेटम (राफेल मैनफ्रेडी द्वारा)।
- PHP, PhpDeal, क्रिसमस पक्ष या स्टुअर्ट हर्बर्ट के कॉन्ट्रैक्टलिब के माध्यम से।
- पायथन (प्रोग्रामिंग भाषा), Deal, icontract, जैसे पैकेजों का उपयोग करके project/PyContracts3/ PyContracts, dpcontracts, या zope.interface। 2003 में PEP-316 में अनुबंधों द्वारा डिजाइन का समर्थन करने के लिए पायथन में एक स्थायी परिवर्तन प्रस्तावित किया गया था, लेकिन इसे स्थगित कर दिया गया है।
- रूबी (प्रोग्रामिंग भाषा), ब्रायन मैकक्लिस्टर के DesignByContract, रूबी डीबीसी रूबी-कॉन्ट्रैक्ट या कॉन्ट्रैक्ट्स.रूबी के माध्यम से।
- जंग (प्रोग्रामिंग भाषा) अनुबंध क्रेट के माध्यम से।
- स्विफ्ट (प्रोग्रामिंग भाषा) कोकोपॉड जिम बॉयड द्वारा के माध्यम से।
- Tcl, XOTcl ऑब्जेक्ट-ओरिएंटेड एक्सटेंशन के माध्यम से।
यह भी देखें
- अवयव आधारित सॉफ्टवेयर इंजीनियरिंग
- शुद्धता (कंप्यूटर विज्ञान)
- रक्षात्मक प्रोग्रामिंग
- असफल-तेज
- औपचारिक तरीके
- होरे तर्क
- मॉड्यूलर प्रोग्रामिंग
- कार्यक्रम व्युत्पत्ति
- कार्यक्रम शोधन
- मजबूत और कमजोर टाइपिंग
- परीक्षण संचालित विकास
- टाइपस्टेट विश्लेषण
टिप्पणियाँ
- ↑ Meyer, Bertrand: Design by Contract, Technical Report TR-EI-12/CO, Interactive Software Engineering Inc., 1986
- ↑ Meyer, Bertrand: Design by Contract, in Advances in Object-Oriented Software Engineering, eds. D. Mandrioli and B. Meyer, Prentice Hall, 1991, pp. 1–50
- ↑ Meyer, Bertrand: Applying "Design by Contract", in Computer (IEEE), 25, 10, October 1992, pp. 40–51, also available online
- ↑ Official Python Docs, assert statement
- ↑ Bright, Walter (2014-11-01). "D Programming Language, Contract Programming". Digital Mars. Retrieved 2014-11-10.
- ↑ Hodges, Nick. "Write Cleaner, Higher Quality Code with Class Contracts in Delphi Prism". Embarcadero Technologies. Retrieved 20 January 2016.
- ↑ Findler, Felleisen Contracts for Higher-Order Functions
- ↑ "Scala Standard Library Docs - Assertions". EPFL. Retrieved 2019-05-24.
- ↑ Strong typing as another "contract enforcing" in Scala, see discussion at scala-lang.org/.
- ↑ "Code Contracts". msdn.microsoft.com.
- ↑ "Bean Validation specification". beanvalidation.org.
- ↑ "Software Testing Help from the Experts | Parasoft Resources" (PDF). Archived (PDF) from the original on 2022-10-09.
- ↑ "Archived copy" (PDF). Archived from the original (PDF) on 2016-03-28. Retrieved 2016-03-25.
{{cite web}}
: CS1 maint: archived copy as title (link) p. 2 - ↑ "No chance of releasing under Apache/Eclipse/MIT/BSD license? · Issue #5 · nhatminhle/cofoja". GitHub.
ग्रन्थसूची
- Mitchell, Richard, and McKim, Jim: Design by Contract: by example, Addison-Wesley, 2002
- A wikibook describing DBC closely to the original model.
- McNeile, Ashley: A framework for the semantics of behavioral contracts. Proceedings of the Second International Workshop on Behaviour Modelling: Foundation and Applications (BM-FA '10). ACM, New York, NY, USA, 2010. This paper discusses generalized notions of Contract and Substitutability.
बाहरी संबंध
- The Power of Design by Contract(TM) A top-level description of डीबीसी, with links to additional resources.
- Building bug-free O-O software: An introduction to Design by Contract(TM) Older material on डीबीसी.
- Benefits and drawbacks; implementation in RPS-Obix
- Bertrand Meyer, Applying "Design by Contract", IEEE Computer, October 1992.
- Using Code Contracts for Safer Code