ইউনিট পরীক্ষায় "ইউনিট" এর অধীনে কী বোঝা যায়


9

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

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

উত্তর:


11

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

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

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

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

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

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

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

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

আমি মনে করি ধর্ম এই বিষয়ে intoুকছে, সুতরাং আপনি এখন 'আচরণ-চালিত' এবং 'পরীক্ষা-চালিত' বিকাশ হিসাবে পরিচিত বলে তাত্পর্যটি দেখেন - ইউনিট পরীক্ষার মূল ধারণাটি ছিল আচরণ চালিত বিকাশের জন্য।


10

একটি ইউনিট সাধারণত " একটি অ্যাপ্লিকেশন ক্ষুদ্রতম টেস্টেবল অংশ " হিসাবে সংজ্ঞায়িত করা হয় । না প্রায়শই না, হ্যাঁ, এর অর্থ একটি পদ্ধতি। এবং হ্যাঁ, এর অর্থ হ'ল আপনার নির্ভরশীল পদ্ধতির ফলাফল পরীক্ষা করা উচিত নয়, তবে কেবল সেই পদ্ধতিটি বলা হয় (এবং তারপরে কেবল একবার সম্ভব হলে সম্ভব হয়, সেই পদ্ধতির প্রতিটি পরীক্ষায় নয়)।

আপনি এই ভঙ্গুর কল। আমি মনে করি এটি ভুল is নাজুক পরীক্ষাগুলি হ'ল যা সম্পর্কহীন কোডের সামান্যতম পরিবর্তনের অধীনে ভেঙে যায়। অর্থাৎ, যাঁরা কোডের উপর নির্ভর করেন যা পরীক্ষার কার্যকারিতা থেকে অপ্রাসঙ্গিক।

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

আচরণ-চালিত বিকাশ এবং বিশেষত গ্রহণযোগ্যতা-পরীক্ষা-চালিত বিকাশের সমাধান হ'ল এটিই সমস্যা । কিন্তু এটি ইউনিট পরীক্ষা / পরীক্ষা-চালিত বিকাশের প্রয়োজনীয়তা অপসারণ করে না; এটি কেবল এটি পরিপূর্ণ করে।


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

@ ইডসা: আপনার সংজ্ঞা দিয়ে আমি কিছুটা হারিয়েছি। আচরণের পরীক্ষাগুলি ইন্টিগ্রেশন টেস্ট, নির্দিষ্ট হিসাবে আচরণের একটি অংশকে পরীক্ষা করে। আপনার আসল প্রশ্নটি পড়ে মনে হচ্ছে আপনি যখন রাষ্ট্র পরীক্ষা করেন, আপনি একই জিনিসটি বোঝায়।
পিডিআর

রাষ্ট্র দ্বারা আমি পরীক্ষার অর্থ যা রাষ্ট্রকে যাচাই করে, কিছু ফাংশনের ফলাফল; আচরণের দ্বারা আমি পরীক্ষার অর্থ যা ফলাফলটি যাচাই করে না, তবে কিছু ফাংশন বলা হয়েছিল
সাইবারিয়ানগুই

@ ইডসা: সেক্ষেত্রে আমি পুরোপুরি একমত নই। আপনি যা রাষ্ট্রীয় পরীক্ষা বলছেন, আমি একীকরণ কল। আপনি যে আচরণটি ডাকছেন, আমি ইউনিট কল। তাদের খুব সংজ্ঞা দ্বারা ইন্টিগ্রেশন টেস্টগুলি আরও ভঙ্গুর। গুগল "ইন্টিগ্রেশন টেস্ট ইউনিট ভঙ্গুর" এবং আপনি দেখতে পাবেন যে আমি একা নই।
pdr

পরীক্ষা সম্পর্কে নিবন্ধগুলির লগ রয়েছে তবে তাদের মধ্যে কোনটি আপনার মতামতটি ভাগ করে দেয়?
সাইবেরিয়ানগুই

2

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

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


1
মোটেও তা নয়, ইউনিট কোনও বিচ্ছিন্ন বিষয়, কেবলমাত্র স্বয়ংক্রিয় সরঞ্জামগুলি কোনও পদ্ধতির চিকিত্সা পছন্দ করে কারণ এটি এটি তৈরি করে না, বা এটি সর্বোত্তমকে তৈরি করে না। 'বিচ্ছিন্ন' এখানে মূল চাবিকাঠি। এমনকি যদি আপনি পদ্ধতিগুলি পরীক্ষা করেন তবে আপনার ব্যক্তিগতটিও পরীক্ষা করা উচিত।
gbjbaanb

1

আমার থাম্বের নিয়ম: কোডের ক্ষুদ্রতম একক যা এখনও বাগগুলি ধারণের জন্য যথেষ্ট জটিল।

এটি কোনও পদ্ধতি বা শ্রেণি বা উপ-সিস্টেম নির্দিষ্ট কোডের উপর নির্ভর করে, কোনও সাধারণ নিয়ম দেওয়া যায় না।

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

অন্যান্য ক্ষেত্রে একটি একক পদ্ধতি কিছু জটিল গণনা সম্পাদন করতে পারে যা বিচ্ছিন্নতায় পরীক্ষা করার জন্য মূল্যবান।

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

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