কোড কভারেজ কী এবং আপনি কীভাবে এটি পরিমাপ করবেন?


275

কোড কভারেজ কী এবং আপনি কীভাবে এটি পরিমাপ করবেন?

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

উত্তর:


241

কোড কভারেজ হ'ল স্বয়ংক্রিয় পরীক্ষাগুলি চলাকালীন আপনার কোডের কতগুলি লাইন / ব্লক / আরক কার্যকর করা হয় তার পরিমাপ।

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

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

আপনি যদি সি ++ শপ হন, ইন্টেলের কিছু সরঞ্জাম রয়েছে যা উইন্ডোজ এবং লিনাক্সের জন্য চালিত হয়, যদিও আমি সেগুলি ব্যবহার করি নি। আমি শুনেছি জিসিসির জন্য gcov সরঞ্জাম আছে তবে আমি এ সম্পর্কে কিছুই জানি না এবং আপনাকে একটি লিঙ্ক দিতে পারি না।

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

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


40
"মান নিশ্চিত করতে কোড কভারেজ সহ আপনার অন্যান্য মেট্রিক ব্যবহার করা উচিত।" আপনি বলতে পারেন এই অন্যান্য মেট্রিক কি?
ট্রুপাররা

আপনি টেস্টওয়েল সিটিসি ++ ব্যবহার করতে পারেন , এটি সি, সি ++, সি # এবং জাভা
বিপিআরইউর

1
@ আবদুল যখন আপনি কোড কভারেজ পরিমাপ করেন, আপনার উভয় ধরণের পরীক্ষা চালানো উচিত এবং তাদের জন্য পৃথকভাবে কোড কভারেজ পরিমাপ করা উচিত। হিসাবে "কোডের আরকস" - সেগুলি কোড সম্পাদনকারী শাখাগুলি, যদি / তারপরে।
ফ্রেঞ্চি পেনভ

1
@ মাভারিক বেশিরভাগ লোকেরা কোড কভারেজের কথা বললে ইউনিট টেস্টিং গ্রহণ করে তবে মাইক্রোসফ্টে আমরা ইউনিট পরীক্ষা এবং ইন্টিগ্রেশন টেস্ট উভয় থেকেই কোড কভারেজ পরিমাপ করছিলাম।
ফ্রেঞ্চি পেনোভ

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

189

কোড কভারেজটি মূলত টেস্ট করে যে আপনার কোডের কত অংশ পরীক্ষার আওতায় রয়েছে। সুতরাং, যদি আপনার 90% কোডের কভারেজ থাকে তবে এর মানে হল 10% কোড রয়েছে যা পরীক্ষার আওতায় আসে না। আমি জানি আপনি হয়ত ভাবছেন যে 90% কোডটি কভার করা হয়েছে তবে আপনাকে অন্য একটি কোণ থেকে দেখতে হবে। 100% কোড কভারেজ পেতে আপনাকে কী থামছে?

একটি ভাল উদাহরণ এটি হবে:

if(customer.IsOldCustomer()) 
{
}
else 
{
}

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

কোড কভারেজ পরিমাপ করার জন্য এনকোভার একটি ভাল সরঞ্জাম।


5
সবচেয়ে ভাল উত্তর, প্রায় 10 বছর আগে! অভিশাপ! :)
নিকস

4
সহজ এবং অর্থপূর্ণ উত্তর :)
পারভিন

হ্যাঁ. একমাত্র যে জ্ঞান তৈরি। যদিও আমি নীচে স্ক্রোল চালিয়ে যেতে বিরতও করি নি। এখানেই থেমেছি। ভুক্ত।
TheRealChx101

64

কেবল মনে রাখবেন, "100% কোড-কভারেজ" থাকার অর্থ এই নয় যে সমস্ত কিছু সম্পূর্ণভাবে পরীক্ষিত হয় - যদিও এর অর্থ কোডের প্রতিটি লাইন পরীক্ষা করা হয়, এর অর্থ এই নয় যে সেগুলি প্রতিটি (সাধারণ) পরিস্থিতিতে পরীক্ষা করা হয় ..

কোডের বিটগুলি হাইলাইট করার জন্য আমি কোড-কভারেজ ব্যবহার করব যার জন্য আমার সম্ভবত পরীক্ষাগুলি লিখতে হবে। উদাহরণস্বরূপ, যদি কোড-কভারেজের যেকোনও সরঞ্জাম আমার বর্তমান ইউনিট-পরীক্ষা চালানোর সময় myImportantFunction () সম্পাদন না করে তবে সম্ভবত তাদের উন্নতি করা উচিত।

মূলত, 100% কোড-কভারেজের অর্থ আপনার কোডটি নিখুঁত। আরও ব্যাপক (ইউনিট-) পরীক্ষা লেখার জন্য এটি গাইড হিসাবে ব্যবহার করুন।


1
- "১০০% কোড-কভারেজ" এর অর্থ এই নয় যে সমস্ত কিছু পুরোপুরি পরীক্ষিত হয় - যদিও এর অর্থ কোডের প্রতিটি লাইন পরীক্ষা করা হয়, এর অর্থ এই নয় যে সেগুলি প্রতিটি (সাধারণ) পরিস্থিতিতে পরীক্ষা করা হয় ..- "প্রতিটি (সাধারণ) এর অধীনে পরিস্থিতি "এটি কি ডেটা ইনপুট এবং পরামিতিগুলির ক্ষেত্রে? আমার যদি সবকিছু পরীক্ষা করা হয় তা বুঝতে অসুবিধা হচ্ছে, এটি সম্পূর্ণরূপে পরীক্ষা করার সমতুল্য নয়।
আব্দুল

20
আপনার কোডগুলির প্রতিটি লাইন আপনার পরীক্ষাগুলির কোনও পর্যায়ে চালিত হওয়ার কারণে, এর অর্থ এই নয় যে আপনি কোডের অধীনে চলতে পারে এমন প্রতিটি সম্ভাব্য দৃশ্যের পরীক্ষা করেছেন। আপনি যদি সবেমাত্র একটি ফাংশন নিয়ে xএসেছিলেন এবং ফিরে এসেছিলেন x/xএবং আপনি my_func (2) ব্যবহার করে পরীক্ষাটি চালিয়েছিলেন তবে আপনার 100% কভারেজ থাকবে (ফাংশনের কোডটি চালিত হবে) তবে 0 পরামিতি হওয়ার পরে আপনি একটি বিশাল সমস্যা মিস করেছেন। অর্থাৎ আপনি 100% কভারেজ সহ সমস্ত প্রয়োজনীয় পরিস্থিতি পরীক্ষা করেননি
স্টিভ

ইউনিট পরীক্ষার মামলাগুলি সমস্ত পদ্ধতির জন্য লিখিত না হলে আপনি কি দয়া করে এই পরিস্থিতিটি সন্ধান করতে পারেন? কোড কভারেজটি এখনও 100% থাকবে? stackoverflow.com/questions/43395968/…
শচীন কুমার

52

পূর্ববর্তী উত্তরগুলির কয়েকটিতে কয়েকটি পয়েন্ট পরিপূরক:

কোড কভারেজ অর্থ, আপনার পরীক্ষার সেটটি আপনার উত্স কোডটি কতটা ভালভাবে কাভার করছে। উদাহরণস্বরূপ, পরীক্ষার কেসগুলির সেট দ্বারা উত্স কোডটি কতটা আচ্ছাদিত।

উপরের উত্তরে উল্লিখিত হিসাবে, বিভিন্ন কভারেজের মানদণ্ড রয়েছে, যেমন পথ, শর্ত, কার্যাবলী, বিবৃতি ইত্যাদি But

  1. শর্ত কভারেজ: সত্য এবং মিথ্যা জন্য মূল্যায়ন করা সমস্ত বুলিয়ান অভিব্যক্তি।
  2. সিদ্ধান্তের কভারেজ: একবারেই সত্য এবং মিথ্যা জন্য মূল্যায়ন করার জন্য বুলিয়ান এক্সপ্রেশনগুলি নয়, পরবর্তী সমস্ত যদি-অন্যরকম-অন্যরকম শরীরকে coverেকে দেয়।
  3. লুপ কভারেজ: এর অর্থ, প্রতিটি সম্ভাব্য লুপটি একবারে কার্যকর হয়েছে এবং একাধিকবার এবং শূন্য বার। এছাড়াও, যদি আমাদের সর্বাধিক সীমা সম্পর্কে ধারনা থাকে, তবে, যদি সম্ভব হয় তবে সর্বাধিক সীমা বারের ও একবার পরীক্ষা করুন limit
  4. প্রবেশ এবং প্রস্থান কভারেজ: সমস্ত সম্ভাব্য কল এবং এর ফেরতের মানের জন্য পরীক্ষা Test
  5. প্যারামিটার মান কভারেজ (পিভিসি)। প্যারামিটারের জন্য সমস্ত সম্ভাব্য মান পরীক্ষা করা হয়েছে কিনা তা পরীক্ষা করতে। উদাহরণস্বরূপ, স্ট্রিং এগুলির মধ্যে যে কোনও একটি হতে পারে: ক) নাল, খ) খালি, গ) সাদা স্থান (স্থান, ট্যাব, নতুন লাইন), ঘ) বৈধ স্ট্রিং, ই) অবৈধ স্ট্রিং, চ) একক-বাইট স্ট্রিং, জি ) ডাবল বাইট স্ট্রিং। প্রতিটি সম্ভাব্য পরামিতি মান পরীক্ষা করতে ব্যর্থতা একটি ত্রুটি ছেড়ে যেতে পারে। এর মধ্যে একটিরও পরীক্ষার ফলে প্রতিটি লাইন আচ্ছাদিত হওয়ায় 100% কোডের কভারেজ হতে পারে, তবে মাত্র সাতটি বিকল্পের মধ্যে একটির পরীক্ষার অর্থ, প্যারামিটার মানটির কেবলমাত্র 14.2% কভারেজ রয়েছে।
  6. উত্তরাধিকারী কাভারেজ: অবজেক্ট ওরিয়েন্টেড উত্সের ক্ষেত্রে, বেস শ্রেণি দ্বারা উল্লিখিত কোনও উত্পন্ন বস্তুকে ফেরত দেওয়ার সময়, ভাইবোন বস্তুটি ফিরে আসলে, মূল্যায়ন করার জন্য কভারেজটি পরীক্ষা করা উচিত।

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


2
অন্যান্য উত্তরের জন্য এখানে দুর্দান্ত সংযোজন
এইচডিএভ

14

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

কোড কভারেজ নির্ধারণের জন্য আমরা তিনটি সরঞ্জাম ব্যবহার করেছি।

  1. জেস্টেস্ট - জুনিটের উপরে নির্মিত একটি মালিকানা সরঞ্জাম। (এটি ইউনিট পরীক্ষাও উত্পন্ন করে))
  2. কোবার্টুরা - একটি ওপেন সোর্স কোড কভারেজ টুল যা সহজেই রিপোর্ট তৈরি করতে JUnit পরীক্ষার সাথে মিলিত হতে পারে।
  3. এমা - অন্য - এটি ইউনিট পরীক্ষার চেয়ে আমরা কিছুটা ভিন্ন উদ্দেশ্যে ব্যবহার করেছি। ওয়েব-অ্যাপ্লিকেশন শেষ-ব্যবহারকারীদের দ্বারা অ্যাক্সেস করা হলে এটি কভারেজ প্রতিবেদন তৈরি করতে ব্যবহৃত হয়। ওয়েব পরীক্ষার সরঞ্জামগুলির সাথে মিলিত (উদাহরণ: ক্যানো) আপনাকে খুব দরকারী কভারেজ প্রতিবেদন দিতে পারে যা আপনাকে জানায় যে সাধারণত শেষ ব্যবহারকারীর ব্যবহারের সময় কত কোড কভার করা থাকে।

আমরা এই সরঞ্জামগুলি ব্যবহার করি

  • পর্যালোচনা করুন যে বিকাশকারীরা ভাল ইউনিট পরীক্ষা লিখেছেন
  • ব্ল্যাক-বাক্স পরীক্ষার সময় সমস্ত কোড বিভ্রান্ত হয়েছে তা নিশ্চিত করুন

6

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

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


5

পার্লের জন্য এখানে দুর্দান্ত ডেভেল :: কভার মডিউল যা আমি নিয়মিত আমার মডিউলগুলিতে ব্যবহার করি।

যদি বিল্ড এবং ইনস্টলেশন মডিউল :: বিল্ড দ্বারা পরিচালিত হয় তবে আপনি কেবল ./Build testcoverএকটি দুর্দান্ত এইচটিএমএল সাইট পেতে ছুটে যেতে পারেন যা আপনাকে সাব, লাইন এবং শর্ত অনুযায়ী প্রতি কভারেজ বলে, কোন রঙের পথটি আচ্ছন্ন হয়নি তা সহজেই দেখায় with


1

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

রেফারেন্স লিংক:

https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/07-code_coverage.html

https://medium.com/zendesk-engineering/code-coverage-and-xcode-6b2fb8756a51

উভয়ই এক্সকোডের সাথে কোড কভারেজ শেখার এবং অন্বেষণের জন্য সহায়ক লিঙ্ক links


0

পিএইচপি-র জন্য আপনাকে সেবাস্তিয়ান বার্গম্যান থেকে গিথুব একবার দেখে নেওয়া উচিত

পিএইচপি কোড কভারেজ তথ্যের জন্য সংগ্রহ, প্রক্রিয়াকরণ এবং রেন্ডারিং কার্যকারিতা সরবরাহ করে।

https://github.com/sebastianbergmann/php-code-coverage

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