मेरे अनुभव डिजाइन द्वारा अनुबंध में, कर के लायक है भी भाषा समर्थन के बिना।उन विधियों के लिए जो ओवरराइड किए गए दावे नहीं हैं, डॉकस्ट्रिंग के साथ पूर्व और पोस्टकंडिशन दोनों के लिए पर्याप्त हैं। एक सार्वजनिक विधि है जो पूर्व और बाद की स्थिति, और एक संरक्षित तरीका है जिसके कार्यान्वयन प्रदान करते हैं और उपवर्गों द्वारा ओवरराइड किया जा सकता है की जाँच करें: तरीकों अधिरोहित कर रहे हैं कि हम दो में विधि विभाजित हैं। यहाँ उत्तरार्द्ध का एक उदाहरण:
class Math:
def square_root(self, number)
"""
Calculate the square-root of C{number}
@precondition: C{number >= 0}
@postcondition: C{abs(result * result - number) < 0.01}
"""
assert number >= 0
result = self._square_root(number)
assert abs(result * result - number) < 0.01
return result
def _square_root(self, number):
"""
Abstract method for implementing L{square_root()}
"""
raise NotImplementedError()
मैं डिजाइन द्वारा अनुबंध सॉफ्टवेयर इंजीनियरिंग रेडियो (http://www.se-radio.net/2007/03/episode-51-design-by-contract/) पर पर एक प्रकरण से डिजाइन द्वारा अनुबंध की एक सामान्य उदाहरण के रूप में वर्गमूल मिला है। उन्होंने भाषा समर्थन की आवश्यकता का भी उल्लेख किया क्योंकि लिस्कोव-प्रतिस्थापन-सिद्धांत सुनिश्चित करने में दावा सहायक नहीं थे, हालांकि उपरोक्त मेरा उदाहरण अन्यथा प्रदर्शित करना है। मुझे प्रेरणा के स्रोत के रूप में सी ++ पिंपल (निजी कार्यान्वयन) मुहावरे का भी उल्लेख करना चाहिए, हालांकि इसका एक अलग उद्देश्य है।
मेरे काम में, मैं हाल ही में अनुबंध की जाँच एक बड़ा वर्ग पदानुक्रम में इस तरह का पुनर्संशोधित (अनुबंध पहले से ही प्रलेखित किया गया था, लेकिन व्यवस्थित परीक्षण नहीं)। मौजूदा इकाई परीक्षणों से पता चला कि अनुबंधों का कई बार उल्लंघन किया गया था। मैं केवल यह निष्कर्ष निकाल सकता हूं कि यह बहुत समय पहले किया जाना चाहिए था, और डिजाइन-दर-अनुबंध लागू होने के बाद यूनिट-टेस्ट कवरेज और भी अधिक भुगतान करता है। मैं उम्मीद करता हूं कि कोई भी जो अवलोकन करने के लिए तकनीकों के इस संयोजन को दूर करता है।
बेहतर उपकरण समर्थन भविष्य में और भी अधिक शक्ति प्रदान कर सकता है, मुझे लगता है कि स्वागत करते हैं।
स्रोत
2013-08-09 20:49:16
ध्यान दें कि आप सिर्फ testcase से विरासत कर सकते हैं और किसी भी वर्ग में इकाई परीक्षण शामिल हैं। – Marcin
ठीक है, लेकिन डीबीसी थोड़ा अलग है जिसमें यह उत्पादन में और सभी डेटा इनपुट पर जांच चलाएगा। जो मैं समझता हूं उससे यूनिट टेस्ट रनटाइम एक प्री-डिफ़ाइंड डेटा सेट के साथ आवेषण करता है, जबकि डीबीसी सभी इनपुट के साथ एक स्तर से ऊपर के आवेषण है। विशेष रूप से, मुझे लगता है कि जब से कोड का एक बहुत वास्तव में राज्य के भारी है और अक्सर एक बार-बार बदलती स्कीमा और काफी जटिल रिश्तों के साथ एक बाहरी डीबी जो बहुत नकली को गंदा कर रहे हैं से राज्य प्राप्त करने के लिए है यह समझ में आता है मेरे मामले में डीबीसी उपयोग करने के लिए । – ipartola
अनुबंध द्वारा डिज़ाइन वह जगह है जहां आप स्पष्ट रूप से उस विनिर्देश को निर्दिष्ट करते हैं जिसमें कोड का प्रत्येक भाग अनुरूप होता है। आपको इसे रनटाइम पर पूर्ण रूप से परीक्षण करने की आवश्यकता नहीं है। यूनिट परीक्षण उतना ही विनिर्देश हो सकता है जितना कुछ और। टीडीडी यूनिट परीक्षणों का उपयोग करने का एक अलग तरीका है, उस मामले में व्यवहार के अपेक्षित सेट को मॉडल करने के लिए। – Marcin