मैंने किसी को यह कहते सुना कि इकाई परीक्षण (जैसे nUnit, jUnit, xUnit) होना चाहिए
(जैसे इकाई परीक्षणों में "नम कोड" होना चाहिए "सूखा कोड" नहीं)
उनकी बातचीत किस बारे में हो रही है?
मैंने किसी को यह कहते सुना कि इकाई परीक्षण (जैसे nUnit, jUnit, xUnit) होना चाहिए
(जैसे इकाई परीक्षणों में "नम कोड" होना चाहिए "सूखा कोड" नहीं)
उनकी बातचीत किस बारे में हो रही है?
जवाबों:
DAMP और DRY विरोधाभासी नहीं हैं, बल्कि वे एक कोड के रख-रखाव के दो अलग-अलग पहलुओं को संतुलित करते हैं । बनाए रखने योग्य कोड (कोड जो बदलना आसान है) यहां अंतिम लक्ष्य है।
कोड बनाए रखने के लिए, आपको सबसे पहले कोड को समझना होगा। इसे समझने के लिए, आपको इसे पढ़ना होगा। एक पल के लिए विचार करें कि आप पढ़ने के कोड को कितना समय देते हैं । यह बहुत है। DAMP कोड को पढ़ने और समझने के लिए आवश्यक समय को कम करके स्थिरता को बढ़ाता है।
दोहराव को हटाने से यह सुनिश्चित होता है कि सिस्टम की प्रत्येक अवधारणा में कोड में एक एकल आधिकारिक प्रतिनिधित्व है। किसी एकल व्यवसाय अवधारणा के परिवर्तन से कोड में एकल परिवर्तन होता है। DRY सिस्टम के केवल उन हिस्सों को परिवर्तन (जोखिम) को अलग करके स्थिरता बनाए रखता है जिन्हें बदलना होगा।
परीक्षणों में अक्सर अंतर्निहित दोहराव होता है क्योंकि वे एक ही चीज़ को बार-बार परीक्षण कर रहे होते हैं, केवल थोड़े अलग इनपुट मूल्यों या सेटअप कोड के साथ। हालांकि, उत्पादन कोड के विपरीत, यह दोहराव आमतौर पर केवल एक ही परीक्षण स्थिरता / फ़ाइल के परिदृश्य में अलग-थलग होता है। इस वजह से, दोहराव न्यूनतम और स्पष्ट है, जिसका अर्थ है कि यह अन्य प्रकार के दोहराव की तुलना में परियोजना के लिए कम जोखिम पैदा करता है।
इसके अलावा, इस तरह के दोहराव को हटाने से परीक्षणों की पठनीयता कम हो जाती है। प्रत्येक परीक्षण में पहले जो विवरण डुप्लिकेट किए गए थे वे अब कुछ नई विधि या कक्षा में छिपे हुए हैं। परीक्षण की पूरी तस्वीर प्राप्त करने के लिए, आपको अब इन सभी टुकड़ों को मानसिक रूप से एक साथ रखना होगा।
इसलिए, चूंकि परीक्षण कोड दोहराव अक्सर कम जोखिम वहन करता है, और पठनीयता को बढ़ावा देता है, यह देखने में आसान है कि यह कैसे स्वीकार्य माना जाता है।
एक सिद्धांत के रूप में, उत्पादन कोड में DRY का पक्ष, परीक्षण कोड में DAMP का पक्ष। जबकि दोनों समान रूप से महत्वपूर्ण हैं, थोड़ी सी समझदारी से आप अपने पक्ष में संतुलन बना सकते हैं।
डेम्प - वर्णनात्मक और सार्थक वाक्यांश।
कोड पुनः उपयोग पर "DAMP not DRY" पठनीयता को महत्व देता है। परीक्षण के मामलों में DAMP not DRY का विचार यह है कि परीक्षणों को समझना आसान होना चाहिए, भले ही इसका मतलब है कि परीक्षण मामलों में कभी-कभी कोड दोहराया गया हो।
यह भी देखें कि क्या यूनिट परीक्षणों में डुप्लिकेट कोड अधिक सहनीय है? इस दृष्टिकोण के गुणों पर कुछ चर्चा के लिए।
यह डोमेन विशिष्ट भाषाओं के संबंध में जे फील्ड्स द्वारा गढ़ा गया हो सकता है ।
"DRY" है "अपने आप को दोहराएं नहीं"
यह एक शब्द है जिसका उपयोग लोगों को पुन: प्रयोज्य कोड लिखने के लिए किया जाता है, ताकि आप बार-बार समान कोड लिखना न छोड़ें।
"डेम्प" "वर्णनात्मक और अर्थपूर्ण वाक्यांश" है।
इस शब्द का उद्देश्य आपको कोड लिखना है जो आसानी से किसी ऐसे व्यक्ति द्वारा समझा जा सकता है जो इसे देख रहा है। यदि आप इस सिद्धांत का पालन कर रहे हैं, तो आपके पास लंबे और वर्णनात्मक चर और फ़ंक्शन नाम होंगे, आदि।
नम = 'वर्णनात्मक और सार्थक वाक्यांश' - आपकी इकाई परीक्षण 'पढ़ने' में सक्षम होना चाहिए:
अनावश्यक कोड से बचने की तुलना में पठनीयता अधिक महत्वपूर्ण है।
लेख से:
डीएएमपी "वर्णनात्मक और अर्थपूर्ण वाक्यांशों" के लिए खड़ा है और DRY के विपरीत है, इस अर्थ में नहीं कि यह कहता है कि "सब कुछ एक कूड़े के ढेर की तरह दिखना चाहिए और पढ़ने में असंभव होना चाहिए", उस में रीडायरेक्ट कोड से बचने की तुलना में पठनीयता अधिक महत्वपूर्ण है।
इसका क्या अर्थ है और इसका उपयोग कहां करना है?
परीक्षण कोड लिखते समय DAMP अधिकतर लागू होता है। परीक्षण कोड को इस बिंदु पर समझना बहुत आसान होना चाहिए कि कुछ अतिरेक स्वीकार्य है।
डीएएमपी "वर्णनात्मक और अर्थपूर्ण वाक्यांशों" के लिए खड़ा है और DRY के विपरीत है, इस अर्थ में नहीं कि यह कहता है कि "सब कुछ एक कूड़े के ढेर की तरह दिखना चाहिए और पढ़ने में असंभव होना चाहिए", उस में रीडायरेक्ट कोड से बचने की तुलना में पठनीयता अधिक महत्वपूर्ण है।
यहां पहले से ही कई उत्तर हैं, लेकिन मैं एक और जोड़ना चाहता था क्योंकि मुझे नहीं लगता था कि वे जरूरी समझाते हैं कि वे भी कर सकते हैं।
DRY का विचार (अपने आप को दोहराएं नहीं) यह है कि आपके एप्लिकेशन कोड में आप अनावश्यक या रेप्टेटिव कोड से बचना चाहते हैं। यदि आपको कुछ ऐसा मिला है, जिसमें आपके कोड को कई बार करने की आवश्यकता होती है, तो आपको कई स्थानों पर समान कोड को दोहराने के बजाय इसके लिए एक फ़ंक्शन या वर्ग होना चाहिए।
यह एक काफी प्रसिद्ध प्रोग्रामिंग अवधारणा है।
DAMP (वर्णनात्मक और अर्थपूर्ण वाक्यांश) आपकी इकाई परीक्षणों के लिए है। यहां विचार यह है कि आपकी इकाई परीक्षण विधि के नाम लंबे और वर्णनात्मक होने चाहिए - प्रभावी रूप से छोटे वाक्य जो कि आप परीक्षण कर रहे हैं का वर्णन करते हैं।
उदाहरण के लिए: testWhenIAddOneAndOneIShouldGetTwo() { .... }
जब आप इस तरह से एक डीएएमपी विधि नाम पढ़ते हैं, तो आपको यह समझना चाहिए कि परीक्षण लेखक क्या परीक्षण करने के लिए प्रयास कर रहा था, यहां तक कि परीक्षण कोड को पढ़ने के बिना भी (हालांकि परीक्षण कोड इस अवधारणा का पालन कर सकते हैं, निश्चित रूप से वर्डी चर नामों के साथ, आदि)।
यह संभव है क्योंकि एक इकाई परीक्षण विधि में बहुत विशिष्ट इनपुट और अपेक्षित आउटपुट होते हैं, इसलिए डीएएमपी सिद्धांत उनके लिए अच्छा काम करता है। आपके मुख्य एप्लिकेशन कोड के तरीके इस तरह के वारंट नामों के लिए पर्याप्त विशिष्ट होने की संभावना नहीं है, खासकर यदि आपने इसे DRY सिद्धांत को ध्यान में रखते हुए लिखा है।
डीएएमपी और डीआरवाई एक दूसरे के विपरीत नहीं हैं - वे आपके कोड को कैसे लिखा जाता है के विभिन्न पहलुओं को कवर करते हैं - लेकिन फिर भी वे आम तौर पर एक साथ उपयोग नहीं किए जाते हैं, क्योंकि डीआरवाई सिद्धांत के साथ लिखी गई विधियां सामान्य उद्देश्य और अनुकूल होने की संभावना नहीं हैं। अत्यधिक विशिष्ट विधि के नाम पर। सामान्य तौर पर, जैसा कि ऊपर बताया गया है, आपका एप्लिकेशन कोड DRY और आपका यूनिट टेस्ट कोड DAMP होना चाहिए।
मुझे उम्मीद है कि इसे थोड़ा बेहतर तरीके से समझाने में मदद मिलेगी।
मैं क्रिस एडवर्ड्स से सहमत हूं कि आपको दोनों के बीच संतुलन बनाने की जरूरत है। एक और ध्यान देने वाली बात यह है कि यदि, दोहराव को दूर करने के प्रयास में, आप अपने यूनिट टेस्ट कोड (यानी जब DRY को चरम सीमा पर ले जा रहे हैं) में बहुत सारी अतिरिक्त संरचना को जोड़ते हैं, तो आप वहां बग्स को पेश करने का जोखिम उठाते हैं। ऐसी स्थिति में, आपको या तो अपने यूनिट परीक्षणों का परीक्षण करना होगा या संरचना के बिट्स को अप्राप्त छोड़ देना होगा।
मैं यहां प्रयास की नकल नहीं करना चाहता, लेकिन आपके पास परीक्षण हो सकते हैं जो डीएएमपी हैं लेकिन डीआरवाई का लाभ है। दूसरी तरफ, DRY परीक्षण कुछ मामलों में DAMP परीक्षणों को संतुष्ट नहीं करेंगे।
मैंने DRY vs DAMP के बारे में ब्लॉग किया है जिसमें कुछ उदाहरण शामिल हैं।
न तो दृष्टिकोण केवल आपका एकमात्र समाधान होना चाहिए, कभी-कभी डीएएमपी ओवरकिल होता है, अन्य बार बहुत अच्छा जोड़ होता है।
एक सामान्य नियम के रूप में आपको तीन का नियम लागू करना चाहिए। यदि आप तीसरी बार दोहराव करते हैं, तो यह डीएएमपी शैली परीक्षण लिखने के लायक हो सकता है, लेकिन तब भी सभी दोहराव खराब नहीं होते हैं । प्रसंग मायने रखता है।