ইউনিট পরীক্ষার কথা বলার সময় "ড্যাম্প শুকান না" এর অর্থ কী?


345

আমি কাউকে বলতে শুনেছি যে ইউনিট পরীক্ষাগুলি (উদাহরণস্বরূপ nUnit, jUnit, xUnit) হওয়া উচিত

DAMP DRY নয়

(যেমন ইউনিট পরীক্ষায় "স্যাঁতসেঁতে কোড" থাকা উচিত "শুকনো কোড" নয়)

তারা কী সম্পর্কে কথা বলছে?


2
ইউনিট টেস্টগুলির জন্য বিশেষ কিছুই নেই যা নন-ডিআরওয়াই কোড ওয়ারেন্ট করে। অ-ডিআরওয়াই টেস্টগুলি লেখাই অলস প্রোগ্রামাররা তাদের অলসতার জন্য অঞ্চল তৈরি করার চেষ্টা করার একটি অজুহাত। সোজা কথায়, ডিআরওয়াইনেস এবং পঠনযোগ্যতা অরথোগোনাল উদ্বেগ।
একিউম্যানাস

2
ডিআরওয়াইনেস কোড নেভিগেশন দূরত্ব বাড়িয়ে তোলে যার ফলস্বরূপ বোঝার জন্য উচ্চতর মানসিক লোড হয়। এটি একটি "সাধারণ" পাঠ্য ভিত্তিক পরিবেশকে ধারণ করে। একজন প্রক্ষেপণমূলক সম্পাদক কোডের অরথোগোনালিটি হ্রাস করতে পারে তবে প্রতিটি ক্ষেত্রেই নয়।
পিটার

আমি এই নিবন্ধটি সুপারিশ করছি: enterprisecraftsmanship.com/posts/dry-damp-unit-tests
ভ্লাদিমির

উত্তর:


595

এটি ভারসাম্য নয়, বৈপরীত্য নয়

ড্যাম্প এবং ডিআরওয়াই পরস্পরবিরোধী নয়, বরং তারা কোডের রক্ষণাবেক্ষণের দুটি ভিন্ন দিককে ভারসাম্যপূর্ণ করে । রক্ষণাবেক্ষণযোগ্য কোড (কোড যা পরিবর্তন করা সহজ) এখানে চূড়ান্ত লক্ষ্য।

ড্যাম্প (বর্ণনামূলক এবং অর্থপূর্ণ বাক্যাংশ) কোডের পঠনযোগ্যতার প্রচার করে ।

কোড বজায় রাখতে আপনার প্রথমে কোডটি বুঝতে হবে understand এটি বুঝতে, আপনাকে এটি পড়তে হবে। আপনি কোড পড়ার কতটা সময় ব্যয় করেন তা এক মুহুর্তের জন্য বিবেচনা করুন । এটি অনেক বেশি. কোডটি পড়ার এবং বোঝার জন্য প্রয়োজনীয় সময় কমিয়ে ডিএএমপি রক্ষণাবেক্ষণযোগ্যতা বাড়ায়।

ডিআরওয়াই (নিজেকে পুনরাবৃত্তি করবেন না) কোডের অরথোগোনালিটিকে প্রচার করে ।

সদৃশ অপসারণটি নিশ্চিত করে যে সিস্টেমে প্রতিটি ধারণারই কোডটিতে একক অনুমোদনযোগ্য প্রতিনিধিত্ব রয়েছে। একটি একক ব্যবসায়িক ধারণার পরিবর্তনের ফলে কোডে একক পরিবর্তন হয়। ডিআরওয়াই কেবলমাত্র সিস্টেমের সেই অংশগুলিতে পরিবর্তন (ঝুঁকি) বিচ্ছিন্ন করে রক্ষণাবেক্ষণযোগ্যতা বৃদ্ধি করে যা অবশ্যই পরিবর্তন করতে হবে।

সুতরাং, পরীক্ষায় নকলটি আরও গ্রহণযোগ্য কেন?

টেস্টগুলিতে প্রায়শই সহজাত নকল থাকে কারণ তারা একই জিনিসটি বারবার পরীক্ষা করে থাকে কেবল কিছুটা আলাদা ইনপুট মান বা সেটআপ কোড দিয়ে। তবে, উত্পাদন কোডের বিপরীতে, এই সদৃশটি কেবলমাত্র একক পরীক্ষার ফিক্স / ফাইলের মধ্যে দৃশ্যের মধ্যে বিচ্ছিন্ন থাকে। এ কারণে, সদৃশটি ন্যূনতম এবং সুস্পষ্ট, যার অর্থ এটি অন্যান্য ধরণের অনুলিপিটির চেয়ে প্রকল্পের জন্য কম ঝুঁকি তৈরি করে।

তদুপরি, এই জাতীয় সদৃশ অপসারণ পরীক্ষার পাঠযোগ্যতা হ্রাস করে। প্রতিটি পরীক্ষায় পূর্বে যে নকল করা হয়েছিল সেগুলি এখন কোনও নতুন পদ্ধতি বা শ্রেণিতে লুকিয়ে রাখা হয়েছে। পরীক্ষার পুরো ছবি পেতে, আপনাকে এখন মানসিকভাবে এই সমস্ত টুকরোটি একসাথে রেখে দিতে হবে।

সুতরাং, যেহেতু টেস্ট কোড সদৃশ প্রায়শই কম ঝুঁকি বহন করে এবং পাঠযোগ্যতার প্রচার করে তাই এটি কীভাবে গ্রহণযোগ্য বলে বিবেচিত হয় তা সহজেই দেখা যায়।

নীতি হিসাবে, উত্পাদন কোডে ডিআরওয়ির পক্ষে, পরীক্ষার কোডে ড্যাম্পের পক্ষপাতী। উভয়ই সমানভাবে গুরুত্বপূর্ণ হলেও সামান্য বুদ্ধি দিয়ে আপনি আপনার পক্ষে ভারসাম্যটি টিপতে পারেন।


18
এটি একটি দুর্দান্ত, সংক্ষিপ্তসার সংক্ষিপ্তসার। আমি এটিও উল্লেখ করতে চাই যে পরিবর্তনের প্রয়োজনীয়তার ক্ষেত্রে একটি ডিএএমপি পরীক্ষা আরও দৃili় হয় এবং পরীক্ষার স্পষ্টতাকে পরিমাপ করা একটি বিরাট উপকার হয় যখন অন্য কোনও ব্যক্তিকে নতুন প্রয়োজনীয়তার সাথে ফিট করার জন্য আপনার পরীক্ষাগুলি পুনর্লিখন করার দায়িত্ব দেওয়া হয়। জেস্পার লন্ডবার্গেরও এই বিষয়ে একটি ভাল গ্রন্থ রয়েছে।
জেসন 21

3
@ জেসন, বিটিডব্লির "জেস্পার লন্ডবার্গেরও এই বিষয়ে একটি ভাল গ্রন্থ রয়েছে" এর একটি লিঙ্ক আছে ?
পেসারিয়ার

2
@ জনসন্ডার্স, আপনি পরীক্ষার ডেটা বিল্ডার প্যাটার্নটি ব্যবহার করে সেই অনুলিপি কিছু এড়াতে পারবেন: ন্যাটপ্রাইস
1000714

2
ডিআরওয়াইং টেস্ট কোডে রহস্য অতিথির
জায়েফ

1
আমি আরও যোগ করব, যে লিখিত পরীক্ষাগুলি মূলত আপনার আবেদনের জন্য ডকুমেন্টেশন / মন্তব্য। সুতরাং আরও বর্ণনামূলক হওয়া আপনার বিকাশকারীকে অন্য বিকাশকারীদের কাছে ব্যাখ্যা করতে সহায়তা করে। এবং ওপি যেমন বলেছে, সেগুলি প্রতিটি পরীক্ষায় স্ব অন্তর্ভুক্ত তাই আপনার আবেদনের ঝুঁকি ন্যূনতম। সবচেয়ে খারাপ পরিস্থিতিটি হ'ল আপনার অতিরিক্ত কাজ বা পরীক্ষা সেটআপ রয়েছে এবং টেস্ট স্যুটটি চালাতে বেশি সময় লাগে। আমি বরং ভাল পরীক্ষার কভারেজের দিক দিয়ে ভুল করি।
লি ম্যাকালিলি

60

ড্যাম্প - বর্ণনামূলক এবং অর্থপূর্ণ বাক্যাংশ।

"DAMP DRY নয়" কোড পুনরায় ব্যবহারের মাধ্যমে পাঠযোগ্যতার মান দেয়। পরীক্ষার ক্ষেত্রে DAMP DRY নয় ধারণাটি হ'ল পরীক্ষাগুলি বোঝা সহজ হওয়া উচিত, এমনকি এর অর্থ যদি কখনও কখনও পরীক্ষার ক্ষেত্রে পুনরাবৃত্তি কোড থাকে।

আরও দেখুন ডুপ্লিকেট কোডটি কি ইউনিট পরীক্ষায় আরও সহনীয়? এই দৃষ্টিভঙ্গির গুণাবলী সম্পর্কে কিছু আলোচনার জন্য।

এটি জে ফিল্ডস দ্বারা তৈরি করা যেতে পারে , ডোমেন নির্দিষ্ট ভাষার সাথে সম্পর্কিত।


1
ভাল উত্তর এবং সম্পর্কিত প্রশ্নের লিঙ্ক। ডিআএমপি বনাম ডিআরওয়াই পছন্দ নেই Y আমরা এমন কোড চাই যা যথাসম্ভব শুকনো এবং পরীক্ষায় যার অর্থ এত শুষ্ক নয় যে পরীক্ষাটি বুঝতে অসুবিধা হয়। যখন কোনও পরীক্ষা ব্যর্থ হয় আমি কারণটি সুস্পষ্ট হওয়ার জন্য চাই যাতে বিকাশকারী এসইউটি ঠিক করতে শুরু করতে পারেন যার অর্থ আমি পরীক্ষায় ডিএএমপি কোডের দিকে ঝুঁকছি। বেশিরভাগ প্রোগ্রামিং ধারণার মতো খুব বেশি কিছু নিয়ে যাওয়া সর্বদা সম্ভব। যদি আপনার ইউনিট পরীক্ষার কোডটি এত শুষ্ক হয় যে কীভাবে পরীক্ষা কেন ব্যর্থ হয়েছিল এটি "খুব শুষ্ক" হতে পারে তা নির্ধারণ করতে এটি একটি বর্ধিত সময় নেয়।
জেরাল্ড ডেভিস

29

"DRY" হ'ল "নিজেকে পুনরাবৃত্তি করবেন না"

এটি এমন একটি শব্দ যা লোকেদের পুনরায় ব্যবহারযোগ্য এমন কোডটি লিখতে বলার জন্য ব্যবহৃত হয়, যাতে আপনি বার বার একই কোড লেখা শেষ না করেন।

"ডিএএমপি" হ'ল "বর্ণনামূলক এবং অর্থপূর্ণ বাক্যাংশ"।

এই শব্দটি আপনাকে কোড লিখতে বলার উদ্দেশ্যে করা হয়েছে যা এটির দিকে তাকিয়ে থাকা কেউ সহজেই বুঝতে পারবেন। আপনি যদি এই নীতিটি অনুসরণ করেন তবে আপনার দীর্ঘ এবং বর্ণনামূলক ভেরিয়েবল এবং ফাংশন নাম ইত্যাদি থাকবে


15
এআইইউআই, ডিআরওয়াই কেবল পুনরায় ব্যবহারযোগ্যতার মাধ্যমে সময় সাশ্রয় করার বিষয় নয় - এটি বিভিন্ন কোড পাথকে "সিঙ্কের বাইরে চলে" বাধা দেয়। আপনি যদি একাধিক ক্লাসে একই যুক্তিটি অনুলিপি করে থাকেন তবে কোনও পরিবর্তন প্রয়োজন হলে সেই কোডটির প্রতিটি উদাহরণ আপডেট করা দরকার। (এবং অনিবার্যভাবে তাদের মধ্যে একটিও নেবে না এবং অনুশীলনের সময় উড়িয়ে দেবে))
আন্দ্রেজ ডয়েল

20

স্যাঁতসেঁতে = 'বর্ণনামূলক এবং অর্থপূর্ণ বাক্যাংশ' - আপনার ইউনিট পরীক্ষাগুলি 'পড়তে' সক্ষম হতে হবে:

অপ্রয়োজনীয় কোড এড়ানোর চেয়ে পঠনযোগ্যতা আরও গুরুত্বপূর্ণ।

নিবন্ধ থেকে:

ডিএএমপি "বর্ণনামূলক এবং অর্থপূর্ণ বাক্যাংশ" বোঝায় এবং এটি ডিআরওয়ির বিপরীত, এই অর্থে নয় যে এটি বলে যে "প্রত্যেকটি জিনিস আবর্জনার স্তূপের মতো হওয়া উচিত এবং পড়তে অসম্ভব হওয়া উচিত", এ ক্ষেত্রে পাঠযোগ্যতা অপ্রয়োজনীয় কোড এড়ানোর চেয়ে গুরুত্বপূর্ণ is

এর অর্থ কী এবং এটি কোথায় ব্যবহার করা যায়?

পরীক্ষার কোড লেখার সময় ডিএএমপি বেশিরভাগ ক্ষেত্রে প্রযোজ্য। টেস্ট কোডটি বুঝতে খুব সহজ হওয়া উচিত যে কিছু অপ্রয়োজনীয়তা গ্রহণযোগ্য।


11

ডিএএমপি "বর্ণনামূলক এবং অর্থপূর্ণ বাক্যাংশ" বোঝায় এবং এটি ডিআরওয়ির বিপরীত, এই অর্থে নয় যে এটি বলে যে "প্রত্যেকটি জিনিস আবর্জনার স্তূপের মতো হওয়া উচিত এবং পড়তে অসম্ভব হওয়া উচিত", এ ক্ষেত্রে পাঠযোগ্যতা অপ্রয়োজনীয় কোড এড়ানোর চেয়ে গুরুত্বপূর্ণ is

http://codeshelter.wordpress.com/2011/04/07/dry-and-damp-principles-when-developing-and-unit-testing/


11

এখানে ইতিমধ্যে বেশ কয়েকটি উত্তর রয়েছে, তবে আমি অন্যটি যুক্ত করতে চেয়েছিলাম কারণ আমি মনে করি না যে তারা এটি প্রয়োজনীয়ভাবে ব্যাখ্যা করেছে পাশাপাশি তারা পারে।

ডিআরওয়াই (নিজেকে পুনরাবৃত্তি করবেন না) এর ধারণাটি হ'ল আপনার অ্যাপ্লিকেশন কোডটিতে আপনি বাড়াবাড়ি বা পুনরাবৃত্তি কোড এড়াতে চান। আপনি যদি এমন কিছু পেয়ে থাকেন যা বেশ কয়েকটি জায়গায় একই কোড পুনরাবৃত্তি না করে আপনার কোডটির একাধিকবার করার দরকার পড়ে তবে এর জন্য আপনার কোনও ফাংশন বা ক্লাস করা উচিত।

এটি একটি মোটামুটি সুপরিচিত প্রোগ্রামিং ধারণা।

ড্যাম্প (বর্ণনামূলক এবং অর্থপূর্ণ বাক্যাংশ) আপনার ইউনিট পরীক্ষার জন্য। এখানে ধারণাটি হ'ল আপনার ইউনিট পরীক্ষার পদ্ধতির নামগুলি দীর্ঘ এবং বর্ণনামূলক হওয়া উচিত - কার্যকরভাবে সংক্ষিপ্ত বাক্য যা আপনি যা পরীক্ষা করছেন তা বর্ণনা করে।

উদাহরণ: testWhenIAddOneAndOneIShouldGetTwo() { .... }

আপনি যখন এইরকম একটি ডিএএমপি পদ্ধতির নামটি পড়েন, তখন আপনার পরীক্ষার লেখক পরীক্ষার কোডটি না পড়েও যা পরীক্ষা করতে চেয়েছিলেন তা হুবহু বুঝতে হবে (যদিও পরীক্ষার কোডটি অবশ্যই এই ধারণাটি যথাযথ শব্দযুক্ত ভেরিয়েবলের সাথে অনুসরণ করতে পারে, ইত্যাদি)।

এটি সম্ভব কারণ একটি ইউনিট পরীক্ষা পদ্ধতিতে খুব নির্দিষ্ট ইনপুট এবং প্রত্যাশিত আউটপুট থাকে, তাই ডিএএমপি নীতি তাদের পক্ষে ভাল কাজ করে। আপনার প্রধান অ্যাপ্লিকেশন কোডের পদ্ধতিগুলি এই জাতীয় নামগুলির জন্য ওয়ারেন্ট দেওয়ার পক্ষে যথেষ্ট সুনির্দিষ্ট হওয়ার সম্ভাবনা নেই, বিশেষত যদি আপনি এটি DRY নীতিটি মাথায় রেখে লিখেছেন।

ড্যাম্প এবং ডিআরওয়াই একে অপরের বিরোধিতা করে না - তারা আপনার কোডটি কীভাবে লিখিত হয় তার বিভিন্ন দিকগুলি আবরণ করে - তবে তবুও সেগুলি সাধারণত একসাথে ব্যবহার করা হয় না কারণ DRY নীতিটি মাথায় রেখে লেখা পদ্ধতিগুলি সাধারণ-উদ্দেশ্য এবং উপযুক্ত হওয়ার সম্ভাবনা কম unlikely অত্যন্ত নির্দিষ্ট পদ্ধতির নাম। সুতরাং সাধারণ হিসাবে, উপরে বর্ণিত হিসাবে, আপনার অ্যাপ্লিকেশন কোডটি DRY এবং আপনার ইউনিট পরীক্ষার কোড DAMP হওয়া উচিত।

আমি আশা করি এটি কিছুটা আরও ভাল ব্যাখ্যা করতে সহায়তা করে।


5

আমি ক্রিস এডওয়ার্ডসের সাথে একমত যে আপনার দুজনের মধ্যে ভারসাম্য বজায় রাখা দরকার। আরেকটি বিষয় লক্ষণীয় হ'ল যদি, সদৃশ অপসারণের প্রয়াসে আপনি নিজের ইউনিট পরীক্ষার কোডে (যেমন ডিআরওয়াইকে চূড়ান্ত করে তোলার সময়) প্রচুর অতিরিক্ত কাঠামো যুক্ত করে শেষ করেন তবে আপনি সেখানে বাগ প্রবর্তনের ঝুঁকিটি চালান। এ জাতীয় পরিস্থিতিতে আপনাকে হয় আপনার ইউনিট পরীক্ষাগুলি ইউনিট পরীক্ষা করতে হবে বা কাঠামোর বিটগুলি পরীক্ষা ছাড়াই ছেড়ে দিতে হবে।


0

আমি চেষ্টাটি এখানে নকল করতে চাই না, তবে আপনি পরীক্ষা নিতে পারেন যা ড্যাম্প তবে ডিআরওয়াইয়ের সুবিধা রয়েছে। ফ্লিপ দিকে, DRY পরীক্ষা কিছু ক্ষেত্রে DAMP পরীক্ষাগুলি সন্তুষ্ট করবে না।

আমি ডিআরওয়াই বনাম ড্যাম্প সম্পর্কে ব্লগ করেছি যার কয়েকটি উদাহরণ রয়েছে।

উভয়ই অ্যাপ্রোচ আপনার একমাত্র সমাধান হওয়া উচিত নয়, কখনও কখনও ড্যাম্প ওভারকিল হয়, অন্য সময় খুব সুন্দর সংযোজন।

সাধারণ নিয়ম হিসাবে আপনার তিনটি বিধি প্রয়োগ করা উচিত। আপনি যদি তৃতীয় বার সদৃশটি সন্ধান করেন তবে ডিএএমপি শৈলী পরীক্ষাগুলি লেখার পক্ষে এটি মূল্যবান হতে পারে তবে তারপরেও সমস্ত নকলটি খারাপ নয় । প্রসঙ্গ বিষয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.