প্যারামিটারাইজড পরীক্ষা - আপনি কখন এবং কেন সেগুলি ব্যবহার করেন?


15

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

আমি এখন পর্যন্ত যা যা দেখেছি তা হ'ল পরীক্ষাগুলি হ'ল কমপক্ষে ग्रहণের মধ্যে জুনিয়ট ব্যবহার করা:

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

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


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

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

উত্তর:


4

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

ধারণাটি হ'ল, যদিও আপনি নিখুঁতভাবে পরীক্ষা করছেন না, বেশিরভাগ ত্রুটি বিচ্ছিন্ন বিন্দু ত্রুটির পরিবর্তে "ফল্ট অঞ্চল" ঘটায়। ডিওই ফ্যাডকে অরথোগোনাল অ্যারে নমুনাগুলি ব্যবহার করে প্যারামিটার স্পেসটি সমস্ত সম্ভাব্য ত্রুটিযুক্ত অঞ্চলগুলিতে মারার জন্য যথেষ্ট পরিমাণে ব্যবহার করে approach

বিচ্ছিন্ন ত্রুটিগুলি সম্ভবত চিহ্নিত করা যাবে না, তবে এগুলি সাধারণত ফল্ট অঞ্চলগুলির চেয়ে কম হয়।

ডিওই পন্থা আপনাকে প্যারামিটারের মানগুলি পরিবর্তনের জন্য পদ্ধতিগত উপায় দেয়।


প্রদত্ত লিঙ্কটি নষ্ট হয়ে গেছে।
জোশ গুস্ট

1
@ জোশগাস্ট গুগল ব্যবহার করে সহজেই ঠিক করা হয়েছে। সতর্ক থাকুন জন্য ধন্যবাদ।
পিটার কে।

4

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


2

প্যারামিটারাইজড টেস্টের কমপক্ষে দুটি স্বাদ রয়েছে, কমপক্ষে JUnit 4.8 এ। সেগুলি হ'ল: প্যারামিটারাইজড টেস্ট ( @RunWith(Parameterized.class)) যার জন্য একটি ডেটা উত্স প্রয়োজন যা পূর্বনির্ধারিত প্যারামিটার কনফিগারেশনগুলি তৈরি করে / পড়ে এবং থিওরিগুলি ( @RunWith(Theories.class)) দেয়, যেগুলি যুক্তি ধরণের প্রতি এক বা একাধিক সেট দেওয়া প্রদত্ত পদ্ধতিগুলির স্পেসিফিকেশন অনুশীলন করতে পারে। এটিকে আরও কম দেখায়:

  • @DataPointsস্ট্রিং আর্গুমেন্টের জন্য কিছু সম্ভাব্য মান ( ) নির্দিষ্ট করুন (যেমন null, খালি স্ট্রিং, খালি খালি স্ট্রিং, সত্যই দীর্ঘ স্ট্রিং)
  • কিছু সম্ভাব্য মান উল্লেখ ( @DataPointsপ্রাণী বর্গ আর্গুমেন্ট (যেমন জন্য) null, Dogউদাহরণস্বরূপ, Catউদাহরণস্বরূপ, Birdউদাহরণস্বরূপ)
  • @Theoryএকটি Stringপরামিতি এবং একটি Animalপরামিতি গ্রহণ করে যা প্রস্তুত । এটি সম্ভাব্য প্যারামিটার মানগুলির প্রতিটি সম্ভাব্য সংমিশ্রণে কার্যকর করা হবে (প্রদত্ত উদাহরণে 4x4 = 16 সংমিশ্রণ হবে ( null, null) সহ )
  • যদি পরীক্ষার অধীনে পদ্ধতিটি কিছু সংমিশ্রণ গ্রহণ করতে না পারে, Assume.assumeThatঅবৈধ সংমিশ্রণগুলি ফিল্টার করার জন্য স্ট্যাটিক আমদানি ব্যবহার করুন (উদাহরণস্বরূপ আপনি যখন শূন্য নক্ষত্রের জন্য পদ্ধতির আচরণ পরীক্ষা করতে চান, প্রথম লাইনটির একটি হবে "ধরে নিবেন যে এটি বাতিল নয়")

আগে যেমন লেখা ছিল - প্রতিটি পদ্ধতির প্রতিটি সম্ভাব্য সংমিশ্রণটি পরীক্ষা করার কোনও মানে নেই (এটি পরীক্ষার সেটগুলি বিস্ফোরিত করে, 5 টি প্যারামিটার সহ কোনও পদ্ধতির পরীক্ষা করার কল্পনা করুন, যার প্রত্যেকেই 5 টি সম্ভাব্য মান রয়েছে: 5 ** 5 -> 3000 এরও বেশি পরীক্ষার রান রয়েছে) !) তবে মিশন-সমালোচনামূলক পদ্ধতির জন্য (এপিআই পদ্ধতিগুলির মতো) আমি এটিকে উত্সাহিত করেছি, কেবল নিরাপদ দিকে থাকতে ...


1

সাধারণ উদাহরণ:

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

  • বিভিন্ন আর্গুমেন্টে একই দৃশ্য প্রয়োগ করুন। আমরা একটি দৃশ্যকল্প যে সঙ্গে কাজ করে Animalবস্তু এবং যেমন উপশ্রেণী অনেক আছে Dog, Cat, Bird। উপলভ্য প্রাণীদের একটি তালিকা তৈরি করুন এবং তাদের উপর দৃশ্যের পরীক্ষা করুন।

ওয়েবসার্ভিসের জন্য কংক্রিট:

  • উপরের স্ট্রিং আর্গুমেন্ট থেকে উদাহরণ। একই ধরণের তবে বিভিন্ন মানের বিভিন্ন আর্গুমেন্ট দিয়ে কী ঘটে তা পরীক্ষা করুন।

0

আপনি যখন বিভিন্ন ধরণের ইনপুট পরীক্ষা করতে চান তখন সাধারণ ইনপুট থাকে এমন ফাংশন / বৈশিষ্ট্যগুলি পরীক্ষা করার জন্য প্যারামিটারাইজড টেস্টগুলি ভাল কাজ করে।

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


1
কম কোড লেখার সুবিধার্থে প্যারামিটারগুলি কেন ব্যবহার করা উচিত নয় ? একটি বৃহত (ইশ) পরীক্ষার কেস সেটগুলির সম্পূর্ণ তালিকা সরবরাহ করার পক্ষে কোনও বড় গুণ নেই।
জোনাথন ইউনিস

1
আপনার উত্তরটি অন্য 5 টির উত্তরের চেয়ে আরও কীভাবে তথ্য সরবরাহ করে?
অ্যাডাম জুকারম্যান

-2

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

তবে আমি প্যারামিটারাইজড পরীক্ষার কয়েকটি ভয়াবহতা দেখেছি। না, ভার্জিনিয়া, আপনার টেস্ট স্যুটটির নিজস্ব ইউনিট পরীক্ষা করা উচিত নয়।


1
আদর্শভাবে প্যারামিটাইজড পরীক্ষাগুলি ফর্মের হওয়া উচিত "প্রত্যাশিত আউটপুটে ম্যাচ আইটেমের (n) আসল আউটপুট ম্যাচ আইটেম (n)" বা অনুরূপ, এবং সেই ক্ষেত্রে কোনও পরীক্ষার প্রয়োজন হয় না। তবে আরও জটিল যে কোনও কিছুর জন্য আমি নিজের হাতের পরীক্ষার ক্ষেত্রে "আমার (পরীক্ষার কোডটি অবশ্যই স্পষ্টতই সঠিক") এর চেয়ে একটি পরিষ্কার প্যারামিটাইজড পরীক্ষা বা দুটি তাদের নিজস্ব পরীক্ষার ক্ষেত্রে দেখতে পছন্দ করি। যদি এটি সত্য হয় তবে আপনি পরীক্ষার মামলাগুলি লেখবেন না। স্পষ্টতই জটিলতার সাথে ওভারবোর্ডে যাওয়া সম্ভব এবং আমি যুক্তি দিচ্ছি না যে কোনও লাইন নেই, তবে আমি মনে করি এমন পরীক্ষাগুলি রয়েছে যা পরীক্ষাগুলি একটি ভাল ধারণা।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.