জ্ঞাত ত্রুটিগুলির জন্য আমার ইউনিট পরীক্ষা করা উচিত?


37

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


6
আমার মনে হয় না, আমি ইউনিট পরীক্ষা সম্পর্কে বিশেষভাবে জিজ্ঞাসা করি
মার্টিজন

3
জ্ঞাত ত্রুটিগুলির জন্য পরীক্ষাগুলি রিগ্রেশন টেস্ট হিসাবে পরিচিত , ইউনিট পরীক্ষার সাথে এগুলির কোনও যোগসূচি নেই ... সুনির্দিষ্টভাবে বলতে গেলে, পরবর্তীকটি বিকাশকারীদের মতামতের উপর নির্ভর করে - আপনার প্রশ্ন সম্ভবত সর্বোপরি সদৃশ নয়, বরং মতামতের জন্য একটি পোল। এটা বিশেষ করে বিশিষ্ট যে উত্তর আপনাকে স্বীকার করেছে শব্দ "ইউনিট পরীক্ষা" এ সব ব্যবহার করেন না, কিন্তু এর পরিবর্তে মোটামুটি যুক্তিসঙ্গতভাবে এই ভিন্নভাবে "নামে পরিচিত ব্যর্থ পরীক্ষার" কল
মশা

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

3
@ গ্যাनेट: সত্যই, আইএমএইচও-র বিষয়গুলি আমরা এখানে টেস্টগুলিকে "ইউনিট" বা "রিগ্রেশন" পরীক্ষা বলিলেও কিছু যায় আসে না - আপনি যে প্রশ্নটি যুক্ত করেছেন তার আলাদা ফোকাস রয়েছে এবং সেখানে উত্তরগুলি এখানে প্রয়োগ হয় না।
ডক ব্রাউন

উত্তর:


51

উত্তর হ্যাঁ, আপনার এগুলি লেখা উচিত এবং এগুলি চালানো উচিত।

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

কৌতূহলীভাবে, একটি ব্যর্থ পরীক্ষা যা হঠাৎ করে পাস করে এমন একটি উত্তীর্ণ পরীক্ষার মতোই আকর্ষণীয় হতে পারে যা অপ্রত্যাশিতভাবে ব্যর্থ হয়।


7
পাইথন ইউনিটেস্ট ফ্রেমওয়ার্কে উপরের বৈশিষ্ট্যটির একটি উদাহরণ: ডকস.পিথন.অর্গ.৩.৩
জেস ব্রাউনিং

5

আমি মনে করি আপনার বর্তমান আচরণ এবং মন্তব্যে একটি ইউনিট পরীক্ষা করা উচিত, সঠিক পরীক্ষা এবং সঠিক আচরণ যুক্ত করুন। উদাহরণ:

@Test
public void test() {
  // this is wrong, it should be fixed some time
  Assert.assertEquals(2, new Calculator().plus(2,2));
  // this is the expected behaviour, replace the above test when the fix is available
  // Assert.assertEquals(4, new Calculator().plus(2, 2));
}

এইভাবে, যখন ফিক্স পাওয়া যায়, তখন বিল্ডটি ব্যর্থ হবে, আপনাকে ব্যর্থ পরীক্ষার দিকে লক্ষ্য করে। আপনি যখন পরীক্ষার দিকে নজর রাখবেন, তখন আপনি জানবেন যে আপনি আচরণটি পরিবর্তন করেছেন এবং পরীক্ষাটি আপডেট করতে হবে।

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

এটি করার একটি আরও ভাল উপায় হ'ল বর্তমান পরীক্ষার নকল করা, ক্লোনটি সঠিক জিনিসটিকে দৃsert় করে তোলে এবং @Ignoreএটি একটি বার্তা সহ, উদাহরণস্বরূপ

@Test
public void test() {
  Assert.assertEquals(2, new Calculator().plus(2,2));
}

@Ignore("fix me, Calculator is giving the wrong result, see ticket BUG-12345 and delete #test() when fixed")
@Test
public void fixMe() {
  Assert.assertEquals(4, new Calculator().plus(2, 2));
}

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


1
এটা খারাপ পরামর্শ। কেউ কখনও এটি সংশোধন করার চেষ্টা করবে না। সংকলনের সমস্যা বা পরীক্ষার ব্যর্থতা থাকলে লোকেরা কেবল পুরানো ইউনিট পরীক্ষা খুলতে চলেছে।
ক্যাপ্টেন ম্যান

@ ক্যাপ্টেনম্যান আমি সম্মত, আমি বিলটি ব্যর্থ না করে দেব দলের ত্রুটি সম্পর্কে সচেতন হওয়ার আরও ভাল উপায় সরবরাহ করার জন্য আমার উত্তর আপডেট করেছি। আপনার ডাউনটোটটি 3 বছর আগে পোস্ট করা মূল উত্তরটির জন্য ন্যায্য ছিল, আমি বিশ্বাস করি বর্তমান উত্তরটি আরও উপযুক্ত। আপনি এটি অন্যভাবে করতে চান?
সিলভিউ বুর্সিয়া

বিরল ঘটনাগুলিতে আমি প্রায় ঠিক এটিই করি কারণ আমি কোনও কারণে এখন বাগটি ঠিক করতে পারি না। আপনি পরিস্থিতিটি কীভাবে পরিচালনা করবেন তা শুনতে আমি পছন্দ করি
@

@ রাবারডাক এখানে সত্যিকার অর্থে কোন আদর্শ পরিস্থিতি নেই (বাগ এখন ঠিক করে ফেলা ব্যতীত হা হা)। আমার কাছে, কমপক্ষে পরীক্ষার ফলাফলগুলি দেখে "10 উত্তীর্ণ হয়েছে, 0 ব্যর্থ হয়েছে, 1 এড়িয়ে গেছে" কমপক্ষে কিছু ইঙ্গিত যা কিছু এটির সাথে পরিচিত না তাদের কাছে মাছ ধরা is আমি @Ignoreপদ্ধতির পছন্দ । কেবল একটি মন্তব্য ব্যবহার করার কারণটি আমার কাছে ভাল ধারণা বলে মনে হচ্ছে না কারণ আমি মনে করি না লোকেরা প্রায়শই তাদের পরীক্ষা করার জন্য ইউনিট পরীক্ষা খুলবে (যদি না তারা ব্যর্থ হয়, বা (আশা করি) তারা যখন ভেবে দেখে যে কেন কিছু উপেক্ষা করা হচ্ছে? )।
ক্যাপ্টেন ম্যান

@ রাবারডাক এখানে সত্যিকার অর্থে কোন আদর্শ পরিস্থিতি নেই (বাগ এখন ঠিক করে ফেলা ব্যতীত হা হা)। আমার কাছে, কমপক্ষে পরীক্ষার ফলাফলগুলি দেখে "10 উত্তীর্ণ হয়েছে, 0 ব্যর্থ হয়েছে, 1 এড়িয়ে গেছে" কমপক্ষে কিছু ইঙ্গিত যা কিছু এটির সাথে পরিচিত না তাদের কাছে মাছ ধরা is আমি @Ignoreপদ্ধতির পছন্দ । কেবল একটি মন্তব্য ব্যবহার করার কারণটি আমার কাছে ভাল ধারণা বলে মনে হচ্ছে না কারণ আমি মনে করি না লোকেরা প্রায়শই তাদের পরীক্ষা করার জন্য ইউনিট পরীক্ষা খুলবে (যদি না তারা ব্যর্থ হয়, বা (আশা করি)) কেন তারা কিছু ভাবতে ব্যর্থ হচ্ছে তা ভেবে অবাক হয় )।
ক্যাপ্টেন ম্যান

3

পরীক্ষার সরঞ্জামের উপর নির্ভর করে আপনি কোনও omitবা pendফাংশন ব্যবহার করতে পারেন ।

রুবি উদাহরণ:

gem 'test-unit', '>= 2.1.1'
require 'test/unit'

MYVERSION = '0.9.0' #Version of the class you test 


class Test_omit < Test::Unit::TestCase
  def test_omit
    omit('The following assertion fails - it will be corrected in the next release')
    assert_equal(1,2)
  end

  def test_omit_if
    omit_if(MYVERSION < '1.0.0', "Test skipped for version #{MYVERSION}")
    assert_equal(1,2)
  end

end

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

আমার উদাহরণের ফলাফল:

Loaded suite test
Started
O
===============================================================================
The following assertion fails - it will be corrected in the next release [test_omit(Test_omit)]
test.rb:10:in `test_omit'
===============================================================================
O
===============================================================================
Test skipped for version 0.9.0 [test_omit_if(Test_omit)]
test.rb:15:in `test_omit_if'
===============================================================================


Finished in 0.0 seconds.

2 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 2 omissions, 0 notifications
0% passed

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


2

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


1

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

আমার বিশ্বে আমাদের একটি ম্যানুয়াল পরীক্ষার কেস থাকবে যা বাগ ঠিক না হওয়া অবধি QE গুলি ব্যর্থ হয়েছে। এবং আমাদের বিকাশকারীরা ম্যানুয়াল ব্যর্থ হওয়া টিসি এবং বাগ ট্র্যাকারের মাধ্যমে এটি সম্পর্কে সচেতন হবে।

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


0

আমি মনে করি উত্তরটি সত্যই, এটি নির্ভর করে। এটি সম্পর্কে বাস্তববাদী হন। এটি এখন আপনার লাভ কি? এটা মনে মনে তাজা?

বাগ সংশোধন করার সময়, ত্রুটিটি প্রকাশ করে এমন একক পরীক্ষা লিখে এটি প্রমাণ করার উপযুক্ত ধারণা তৈরি করে। এর পরে আপনি বাগটি ঠিক করুন এবং ইউনিট পরীক্ষাটি পাস করা উচিত।

আপনার এখনই ব্যর্থ ইউনিট পরীক্ষা লেখার জন্য কি সময় আছে? আরও কি টিপুন বৈশিষ্ট্য বা বাগ রয়েছে যা লিখতে / ঠিক করা দরকার।

ধরে নেওয়া যাক আপনি বাগ এটা অবশ্যই লগ ইন করতে সঙ্গে উপযুক্ত বাগ ট্র্যাকিং সফ্টওয়্যার, সত্যিই ব্যর্থ ইউনিট পরীক্ষা লিখতে কোন প্রয়োজন নেই ডান এখন

ত্রুটিযুক্তভাবে আপনি কোনও রিলিজের আগে ব্যর্থ ইউনিট পরীক্ষার পরিচয় করিয়ে দিলে আপনি কিছু বিভ্রান্তির পরিচয় দিতে পারেন।


0

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

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