2011-12-09 20 views
21

मैंने हाल ही में अपने कार्यालय में कुछ चर्चाओं को सुना था। नेट "अनुबंध" हालांकि, जब मैंने अपने कुछ साथी कर्मचारियों से पूछा, तो उनमें से नहीं, आसानी से मुझे बता सकता था कि वे क्या थे, या वे क्या थे।नेट कोड अनुबंध - और कहाँ सीखना है?

क्या किसी के पास उनके उपयोग पर कोई संसाधन, स्पष्टीकरण, और शायद एक ट्यूटोरियल है?

धन्यवाद,

पॉल

उत्तर

25

कोड संविदा .NET 4.0 में पेश किए गए और वे कार्यक्रमों में मान्यताओं कोडिंग व्यक्त करने के लिए एक भाषा-नास्तिक विधि प्रदान करते हैं।

वे मूल रूप से आपको पूर्व-स्थितियों, पोस्ट-स्थितियों और अन्य सुविधाओं की जांच करने की अनुमति देते हैं और परीक्षण प्रक्रिया और कोड की अंतिम गुणवत्ता में काफी सुधार कर सकते हैं।

माइक्रोसॉफ्ट से :

  • रनटाइम जाँच हो रही है। हमारे बाइनरी रीराइटर अनुबंधों को इंजेक्ट करके एक प्रोग्राम को संशोधित करता है, जिसे प्रोग्राम> निष्पादन के हिस्से के रूप में चेक किया जाता है। पुनर्निर्मित कार्यक्रम टेस्टेबिलिटी में सुधार करते हैं: प्रत्येक अनुबंध एक ऑरैकल के रूप में कार्य करता है, जिससे परीक्षण पास/असफल संकेत चलाता है। स्वचालित परीक्षण उपकरण, जैसे कि पेक्स, पूर्व-परिस्थितियों को पूरा न करने वाले अर्थहीन परीक्षण तर्कों को फ़िल्टर करके अधिक सार्थक यूनिट परीक्षण उत्पन्न करने के लिए अनुबंधों का लाभ उठाते हैं।

  • स्टेटिक चेकिंग। हमारा स्थिर चेकर यह तय कर सकता है कि कार्यक्रम चलाने के बिना कोई अनुबंध उल्लंघन है या नहीं! यह अंतर्निहित अनुबंधों की जांच करता है, जैसे शून्य अस्वीकरण और सरणी सीमाएं, साथ ही साथ स्पष्ट अनुबंध।

  • प्रलेखन जनरेशन। हमारे दस्तावेज़ जनरेटर अनुबंध की जानकारी के साथ मौजूदा एक्सएमएल दस्तावेज़ फ़ाइलों को बढ़ाता है। नई स्टाइल शीट भी हैं जिनका उपयोग सैंडकासल के साथ किया जा सकता है ताकि जेनरेट किए गए दस्तावेज़ पृष्ठों में अनुबंध अनुभाग हों।

अधिक जानें:

+0

धन्यवाद Rionmonster, तो यह उपयोगी था! –

17

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

यह उपयोगी क्यों है?

ठीक है, यह आपके फ़ंक्शन को वापस आने के बाद चर को संशोधित करने से रोकता है, जिससे संभावित रूप से बग पेश हो जाते हैं।

यहां एक उदाहरण है।

public void doSomething(SomeObject foo) 
{ 
    Contract.Requires<ArgumentNullException>(foo != null); 
} 

अब, कोड अनुबंधों की आवश्यकता है कि उस चेक से पहले कोई कोड न हो। जेनरेटेड आईएल में, foo का मान कॉल करने के लिए प्राथमिक परीक्षण किया जाता है। यह सुनिश्चित करने का एक निश्चित तरीका है कि आपका इनपुट अपेक्षित है।

दूसरा, Contract.Ensures निर्माण है। यह मूल रूप से Requires जैसा है लेकिन आपके वापसी मूल्य पर कार्य करता है।

public int doSomethingElse() 
{ 
    Contract.Ensures(Contract.Result<int>() != 0); 
    int ret = 1; 
    return ret; 
} 

यह अगर आप अपने समारोह से कई बाहर निकलने के रास्तों था विशेष रूप से उपयोगी हो सकता है ...

public int someBadFunction() 
{ 
    Contract.Ensures(Contract.Result<int>() != 0); 
    if(....) 
    { 
     if(....) return 2; 
     if(....) return 8; 
    } 
    return 3; 
} 
संबंधित मुद्दे