ব্যর্থ ইউনিট পরীক্ষায় চেক করার মান কী?


13

ইউনিট পরীক্ষাগুলি কার্যকর করা থেকে বিরত রাখার উপায় রয়েছে, ইউনিট পরীক্ষায় ব্যর্থতা পরীক্ষা করে দেখার কী মূল্য?

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

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

কেউ যদি কোডটি ঠিক করতে না পারে ততক্ষণ বাগের অনুশীলনকারী ইউনিট পরীক্ষাগুলিতে যাচাইয়ের মূল্য কী?

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

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


এই পরীক্ষার কভারেজ সংখ্যা বাড়ানোর এক উপায়।
জেফো

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

উত্তর:


17

আমি ভাঙা unittests মত নয় চেক ইন না কারণ তারা অপ্রয়োজনীয় শব্দ উত্পাদন। প্রতিটি ইউনিটেস্টের পরে আমাকে সমস্ত ব্যর্থ সমস্যা (লাল) পরীক্ষা করতে হবে। এটি কি লাল কারণ এখানে কোনও নতুন সমস্যা আছে বা এটি করার / ঠিক করার জন্য একটি পুরানো উন্মুক্ত রয়েছে। 20 টিরও বেশি ইউনিটসেট থাকলে এটি ঠিক নয়।

পরিবর্তে আমি ব্যবহার

  • [Ignore("Reason")]বৈশিষ্ট্য যা ফলাফলকে হলুদ করে তোলে বা
  • throw new NotImplementedException()ফল ধূসর করে তোলে

দ্রষ্টব্য: আমি .NET এর জন্য NUnit ব্যবহার করছি। আমি নিশ্চিত নই যে "গ্রে" বৈশিষ্ট্যটি অন্য ইউনিটেস্ট ফ্রেমওয়ার্কগুলিতে আছে কিনা।

সুতরাং আমি ইউনিট পরীক্ষার ফলাফলের নিম্নলিখিত অর্থটি পছন্দ করি।

  • সবুজ: সব শেষ
  • ধূসর: পরিকল্পনা করা নতুন বৈশিষ্ট্য যা করা দরকার তবে কম অগ্রাধিকার সহ
  • হলুদ: বাগগুলি এখনও ঠিক হয়নি। শীঘ্রই স্থির করা উচিত
  • লাল: নতুন বাগ। অবিলম্বে স্থির করা উচিত

"লাল" বাদে সমস্ত কিছু চেক ইন করা যায়।

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


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

4
will probably never be fixedআপনি যদি স্বয়ংক্রিয় পরীক্ষায় এফর্ড ব্যয় করতে চান বা না চান তবে এটি একটি রাজনৈতিক সিদ্ধান্ত। "উপেক্ষা করা পরীক্ষা" দিয়ে আপনার সেগুলি ঠিক করার সুযোগ রয়েছে। "উপেক্ষা করা পরীক্ষা" দূরে সরিয়ে দেওয়ার অর্থ "আর কিছু না হওয়া পর্যন্ত স্বয়ংক্রিয় পরীক্ষাগুলি ত্যাগ করুন"
বি

8

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

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


5
তবে আপনার কখনই একটি ব্যর্থ পরীক্ষা পরীক্ষা করা উচিত নয়, কারণ আপনার বিল্ড সার্ভারটি কোনও ভাঙা পরীক্ষা দিয়ে কোনও প্রকল্প তৈরি করা উচিত নয়।
ক্যাফগীক

@ চ্যাড: বিল্ডিং এবং টেস্টিং একটি স্বয়ংক্রিয় পদক্ষেপের দুটি পৃথক টুকরা। বিল্ডিং নিশ্চিত করে যে সবকিছু সংকলন করে। পরীক্ষাটি নিশ্চিত করে যে বিল্ডের ফলাফলটি বৈধ। আমার প্রশ্নের ব্যাখ্যাটি ছিল না, "আমাকে কি কোডটি চেক করা উচিত যা সংকলন করে না?" পরিবর্তে এটি ছিল, "আমি জানি যে পরীক্ষায় ব্যর্থ হব তা কি পরীক্ষা করা উচিত?"
আনহোলিস্যাম্প্লার

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

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

প্রশ্নটি পরিষ্কার হওয়া উচিত ছিল। এটি পরীক্ষাটি সংকলন করা উচিত, তবে প্রত্যাশিত ফলাফলটি ব্যর্থ হবে।

6

ব্যর্থ ইউনিট পরীক্ষাগুলি নির্দিষ্টকরণের সাথে সম্মত হওয়ার জন্য কী করা উচিত তা বিকাশকারী দলের দৃশ্যমানতা দেয়।

সংক্ষেপে, ব্যর্থ ইউনিট পরীক্ষাগুলি দলকে একটি "TODO" তালিকা দেয়।

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

[* শর্তযুক্ত যে ইউনিট পরীক্ষাগুলি আসলে দরকারী কিছু পরীক্ষা করে]


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

6

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

লিগ্যাসি কোড সহ কার্যকরভাবে কাজ করার অধ্যায় 13 এর শুরু থেকে এখানে একটি অনুচ্ছেদ রয়েছে :

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


3

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

দ্রষ্টব্য: আপনার প্রকল্পটি যদি বিল্ড সার্ভারে নির্মিত না হয় সেট করতে হবে, যদি আপনার বিল্ড সার্ভারটি বিল্ড ভাঙা চেকিনগুলিকে বাধা দেয় (ধরে নিবেন যে আপনি একটি ভাঙ্গা বিল্ডকে এমন একটি হিসাবে সংজ্ঞায়িত করেন যেখানে সমস্ত পরীক্ষা পাস হয় না)


+1 যদিও চেক ইন করার জন্য কোনও উত্তর নেই বা না থাকলে এখানে গুরুত্বপূর্ণ যুক্তি রয়েছে: সার্ভারটি তৈরি করুন
k3b

আমি বরং একটি পৃথক প্রকল্পে স্থানান্তরিত করার পরিবর্তে এ জাতীয় পরীক্ষা চিহ্নিত করার জন্য একটি বৈশিষ্ট্য ব্যবহার করব।
কোডসইনচওস

2

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

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

ইউনিট পরীক্ষার বিন্দুটি 100% সাফল্য নয়, পয়েন্টটি কোডটিতে বাগগুলি সন্ধান এবং ঠিক করা to পরীক্ষা না করা 100% সাফল্যের সহজ উপায়, তবে এটি প্রকল্পের পক্ষে খুব উপকারী নয়।


ওহো ... "ইউনিট টেস্টিংয়ের পয়েন্টটি 100% সাফল্য অর্জন করা উচিত নয়", আপনি কি বলছেন যে তাদের সবার পাস করার দরকার নেই !?
ক্যাফগিকে

2
@ চ্যাড: মুল বক্তব্যটি হ'ল পরীক্ষাগুলি চালানো ভাল যা আপনি জানেন যে ব্যর্থ হবে, তবে কেবল পরীক্ষায় না আসার পরিবর্তে একটি সত্যিকারের সমস্যা প্রদর্শন করছে যাতে আপনি রাত্রি বিল্ড / পরীক্ষার শেষে সবুজ চেকমার্ক রাখতে পারেন।
unholysampler

8
@ ইউনোলিস্প্যাম্পলার, কখনই ভাঙ্গা পরীক্ষা করবেন না, যদি না তাদের পরিষ্কারভাবে "ভাঙ্গা" হিসাবে চিহ্নিত করা (অন্য কোনও প্রকল্পে থাকার মাধ্যমে) চিহ্নিত করা হয়। অন্যথায়, তারা গোলমাল হয়ে যায়, এবং কখনই কোন পরীক্ষার উত্তীর্ণ হওয়া উচিত ছিল তা ভেঙে যায়। এটি অবিচ্ছিন্ন একীকরণ এবং
ইউনিট টেস্ট

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

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

1

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


-3

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


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