अनुबंध द्वारा डिजाइन
अनुबंध द्वारा डिजाइन (डीबीसी), जिसे अनुबंध प्रोग्रामिंग, अनुबंध द्वारा प्रोग्रामिंग और डिजाइन-दर-अनुबंध प्रोग्रामिंग के रूप में भी जाना जाता है, सॉफ्टवेर डिज़ाइन के लिए एक दृष्टिकोण है।
यह निर्धारित करता है कि सॉफ्टवेयर डिजाइनरों को घटक-आधारित सॉफ़्टवेयर इंजीनियरिंग # सॉफ़्टवेयर घटक के लिए औपचारिक तरीकों, सटीक और सत्यापन योग्य इंटरफ़ेस विनिर्देशों को परिभाषित करना चाहिए, जो सार डेटा प्रकारों की सामान्य परिभाषा को पूर्व शर्त, शर्त लगाना और अपरिवर्तनीय (कंप्यूटर विज्ञान) के साथ विस्तारित करता है। व्यावसायिक अनुबंधों की शर्तों और दायित्वों के साथ एक वैचारिक रूपक के अनुसार, इन विशिष्टताओं को अनुबंध के रूप में संदर्भित किया जाता है।
DbC एप्रोच ऑफेंसिव_प्रोग्रामिंग सभी क्लाइंट कंपोनेंट्स जो एक सर्वर कंपोनेंट पर एक ऑपरेशन शुरू करते हैं, उस ऑपरेशन के लिए आवश्यक पूर्व शर्तों को पूरा करेंगे।
जहां इस धारणा को बहुत जोखिम भरा माना जाता है (मल्टी-चैनल या वितरित कंप्यूटिंग में), रक्षात्मक_प्रोग्रामिंग लिया जाता है, जिसका अर्थ है कि 'सर्वर घटक' परीक्षण करता है कि सभी प्रासंगिक पूर्व शर्त सही हैं (पहले, या 'ग्राहक को संसाधित करते समय) घटक अनुरोध) और यदि नहीं तो एक उपयुक्त त्रुटि संदेश के साथ उत्तर दें।
इतिहास
यह शब्द बर्ट्रेंड मेयर द्वारा एफिल (प्रोग्रामिंग भाषा) के अपने डिजाइन के संबंध में गढ़ा गया था और पहली बार 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
जो अन्य उपयोगों के साथ अनुबंधों को सहायक तरीकों के रूप में लिखने की अनुमति देता है।
तृतीय-पक्ष समर्थन वाली भाषाएं
This section has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)
(Learn how and when to remove this template message)
|
मौजूदा प्रोग्रामिंग भाषाओं के लिए मूल डिजाइन के बिना अनुबंध समर्थन द्वारा विभिन्न पुस्तकालयों, preprocessorों और अन्य उपकरणों का विकास किया गया है:
- एडा (प्रोग्रामिंग लैंग्वेज), जीएनएटी प्रागमास के माध्यम से पूर्व शर्त और पोस्टकंडिशन के लिए।
- सी (प्रोग्रामिंग भाषा) और सी ++:
- Boost.Contract
- सी प्रीप्रोसेसर के लिए डीबीसी
- जीएनयू नाना
- eCv और eCv++ औपचारिक सत्यापन उपकरण
- C के CTESK एक्सटेंशन के माध्यम से डिजिटल मंगल C++ कंपाइलर
- लोकी (सी ++) कॉन्ट्रैक्ट चेकर नामक एक तंत्र प्रदान करता है जो एक वर्ग को अनुबंध द्वारा डिजाइन का सत्यापन करता है।
- DBC C++ C++ के लिए अनुबंध द्वारा डिजाइन
- सी शार्प (प्रोग्रामिंग लैंग्वेज) | सी # (और अन्य .NET लैंग्वेज), कोड कॉन्ट्रैक्ट्स के माध्यम से[10] (एक Microsoft अनुसंधान परियोजना .NET फ्रेमवर्क 4.0 में एकीकृत)
- ग्रूवी (प्रोग्रामिंग भाषा) GContracts के माध्यम से
- जाओ (प्रोग्रामिंग भाषा) dbc या gocontracts के माध्यम से
- जावा (प्रोग्रामिंग भाषा):
- सक्रिय:
- OVal AspectJ के साथ
- Java के लिए अनुबंध (Cofoja)
- जावा मॉडलिंग भाषा (JML)
- बीन सत्यापन (केवल पूर्व और बाद की स्थिति)[11]
- [1]
- SafeR (सुरक्षित संदर्भ के साथ)
- निष्क्रिय/अज्ञात:
- Jtest (सक्रिय लेकिन DbC अब समर्थित नहीं लगता है)[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, रूबी DBC रूबी-कॉन्ट्रैक्ट या कॉन्ट्रैक्ट्स.रूबी के माध्यम से।
- जंग (प्रोग्रामिंग भाषा) अनुबंध क्रेट के माध्यम से।
- स्विफ्ट (प्रोग्रामिंग भाषा) कोकोपॉड जिम बॉयड द्वारा के माध्यम से।
- 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 DbC, with links to additional resources.
- Building bug-free O-O software: An introduction to Design by Contract(TM) Older material on DbC.
- Benefits and drawbacks; implementation in RPS-Obix
- Bertrand Meyer, Applying "Design by Contract", IEEE Computer, October 1992.
- Using Code Contracts for Safer Code