ইন্টিগ্রেশন টেস্টগুলি কীভাবে ডিজাইনের সমালোচনা করে?


38

আমি জেবি রেইনসবার্গারের ব্লগ পোস্টে ইন্টিগ্রেটেড পরীক্ষাগুলিতে একটি পঠন করছি এবং আশ্চর্য হয়েছি যে কোন উপায়ে একটি ইন্টিগ্রেশন পরীক্ষা আমাদের ডিজাইনের সাথে আরও কঠোর?

আমরা আরও সংহত পরীক্ষাগুলি লিখি, যা বড় এবং মাইক্রোটেস্টগুলির মতো আমাদের নকশাকে কঠোরভাবে সমালোচনা করে না


3
প্রশ্নটি বিভ্রান্তিকর। "কোন উপায়ে ইন্টিগ্রেশন টেস্ট আরও কঠোর" ... "ইন্টিগ্রেটেড টেস্ট, যা বড় এবং আমাদের ডিজাইনের কঠোরতার সমালোচনা করে না" - এখন কী?
AnoE


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

উত্তর:


46

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

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

আপডেট : রেইনসবার্গার নীচের নোট হিসাবে, তিনি ইউনিট পরীক্ষার সমার্থক হিসাবে মাইক্রোটেষ্টগুলি চাননি। তিনি একটি বিস্তারিত উত্তরও সরবরাহ করেছেন যা আপনাকে ঠিক কী কথোপকথন করছিল তা গভীরতর অন্তর্দৃষ্টি দিতে পারে।


2
আমি নীতিগতভাবে আপনার উত্তরটির সাথে একমত, তবে আপনি যেভাবে তা বলছেন তা নয়। যে কেউ এই নির্দিষ্ট প্রশ্নটি জিজ্ঞাসা করছেন তার "বিদ্রূপ," "সংযুক্তি" এবং "সংহতি" শব্দটির অর্থ কী তা জানা অসম্ভব এবং আপনি নিজের উত্তরে এই শর্তাদি সংজ্ঞায়িত করেননি।
রবার্ট হার্ভে

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

10
সবশেষে, "মাইক্রো-টেস্টস" পছন্দসই শব্দ নয়। ব্লগাররা যখন তাদের নিজস্ব প্রযুক্তিগত শর্তগুলি তৈরি করে তখন আমি এটি পছন্দ করি।
রবার্ট হার্ভে


5
দয়া করে "মাইক্রোটেস্ট" এবং "ইউনিট পরীক্ষা" সমীকরণ করবেন না (কিছু বিবরণের জন্য আমার উত্তর দেখুন); অন্যথায়, আমি আপনাকে বর্ণনা করার চেষ্টা করেছি বলে বুঝতে পেরেছি বলে মনে হচ্ছে।
জেবি রেইনসবার্গার

28

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

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

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

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

বড় পরীক্ষার (যেমন সংহত পরীক্ষাগুলির) সাহায্যে প্রোগ্রামাররা বেশিরভাগ throughালু সমস্যার মধ্যে পড়ার ঝোঁক থাকে: তাদের জটযুক্ত কোড লেখার পর্যাপ্ত স্বাধীনতা রয়েছে যা কোনওভাবে পরীক্ষায় পাস করে, তবে সেই কোডটি সম্পর্কে তাদের বোঝার পরের মুহুর্তে তারা পরবর্তী কাজটিতে যাওয়ার মুহুর্তটি দ্রুত বিবর্ণ হয়ে যায় quickly , এবং অন্যদের জট ডিজাইন পড়তে অযথা অসুবিধা হয়। এর মধ্যে সংহত পরীক্ষাগুলির উপর নির্ভর করার ঝুঁকি রয়েছে। ছোট টেস্টগুলির সাথে (মাইক্রোস্টেস্টের মতো) প্রোগ্রামাররা বেশিরভাগ ক্ষেত্রে অতিরিক্ত-স্পেসিফিকেশনের মাধ্যমে সমস্যায় পড়তে ঝোঁক হন: তারা অপ্রাসঙ্গিক বিবরণ যুক্ত করে সাধারণত পরীক্ষাগুলি সীমাবদ্ধ করে রাখেন, সাধারণত পূর্ববর্তী পরীক্ষা থেকে অনুলিপি / পেস্ট করে এবং এগুলি করার ফলে তারা তুলনামূলকভাবে দ্রুত নিজেকে আঁকেন একটি কোণে। ভাল খবর: আমি লেখার কয়েক ঘন্টা বা কয়েক দিন পরে পরীক্ষাগুলি থেকে বহিরাগত বিবরণগুলি সরিয়ে ফেলা অনেক সহজ এবং নিরাপদ বলে মনে করি এটি লেখার কয়েক মাস পর বছর ধরে জটলা প্রডাকশন কোডকে আলাদা করে রাখতে। ভুলগুলি চলার সাথে সাথে অতিরিক্ত-নির্দিষ্টকরণ আরও এবং আরও স্পষ্টত ক্ষতিগুলি দ্রুত করে এবং সতর্কতা প্রোগ্রামার আগে দেখেছিল যে তাদের জিনিস ঠিক করতে হবে। আমি এটিকে একটি শক্তি হিসাবে বিবেচনা করি: আমি সমস্যাগুলি আগে দেখেছি এবং সেই সমস্যাগুলি বৈশিষ্ট্যগুলি যুক্ত করার জন্য আমাদের ক্ষমতাকে শঙ্কিত করার আগে সেগুলি ঠিক করেছি।


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

@ জ্যানলিনাক্স আমি এ সম্পর্কে দৈর্ঘ্যে লিখেছি। এখানেই শুরু করুন: blog.thecodewhisperer.com/series#integrated-tests-are-a-scam
জেবি রেইনসবার্গার

9

তার মানে হল যে ভাল সফ্টওয়্যার ডিজাইনটি ইন্টিগ্রেশন পরীক্ষার চেয়ে ইউনিট পরীক্ষার মাধ্যমে আরও ভালভাবে জানানো হয়।

কারণটা এখানে. লিখন ইউনিট পরীক্ষাগুলি আপনাকে ইউনিট-টেস্টেবলের কোডটি লিখতে বাধ্য করে। ইউনিট-টেস্টেবল কোডটি এমন একক কোডের চেয়ে আরও ভাল ডিজাইনের হতে থাকে যা ইউনিট পরীক্ষা করে না।

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

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