পরীক্ষা কভারেজ কোড মানের একটি পর্যাপ্ত পরিমাপ?


20

আমার কাছে যদি এমন কিছু কোড থাকে যার ৮০% পরীক্ষার কভারেজ থাকে (সমস্ত পরীক্ষায় উত্তীর্ণ হয়) তবে এটি কি ন্যায়বিচারের সাথে বলা যায় যে এটি কোনও পরীক্ষার কভারেজ নেই এমন কোডের চেয়ে উচ্চ মানের?

নাকি এটিকে আরও রক্ষণাবেক্ষণযোগ্য বলাটা কি ন্যায্য?


2
100% কভারেজের অর্থ এই নয় যে এটি ভাল পরীক্ষা করা হয়েছে। তবে 0% এর অর্থ হল এটি মোটেও পরীক্ষা করা হয়নি।
mouviciel

1
প্রযুক্তিগতভাবে না। ব্যবহারিকভাবে, হ্যাঁ অভিজ্ঞতা প্রচুর সফটওয়্যার ইঞ্জিনিয়ার এবং পরীক্ষককে শিখিয়েছে যে কোড কভারেজ যখন প্রায় ৮০% এর কাছাকাছি পৌঁছে যায়, তখন যে ধরণের ত্রুটিগুলির জন্য ইউনিট পরীক্ষা করা পর্যাপ্ত পর্যায়ে শুরু হয়। এটা পেরেটো নীতি। মূলত একবার আপনি যখন আপনার পরীক্ষার গুণমান নির্বিশেষে কোডটির 80% আচ্ছাদিত করে পৌঁছে যান, আপনি সম্ভবত 20% কোডটি পরীক্ষা করেছেন যা বেশিরভাগ সম্ভাব্য সমস্যাগুলির পুরোপুরি মোটামুটিভাবে পুরোপুরি কারণ হয়ে দাঁড়ায়। এটি নিরঙ্কুশ নয়, বরং প্রচলিত জ্ঞান। জীবন যদি আপনার পরীক্ষার উপর নির্ভর করে তবে আপনাকে আরও নিখুঁত হতে হবে।
ক্যালফুল

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

1
@AndresF। এ কারণেই আমি বলেছিলাম "প্রযুক্তিগতভাবে না, ব্যবহারিকভাবে হ্যাঁ"। লোকেরা বোকা হয় না (সাধারণত)। তারা (সাধারণত) কেবল কোনও মস্তিষ্কের ক্ষেত্রে পরীক্ষা করে না। সুতরাং, অভিজ্ঞতার ভিত্তিতে , অনেকগুলি দোকান প্রায় 80% কভারেজের কাছাকাছি কোথাও থেমে যায় (এই ধারণাটি মোটামুটি নিরাপদে) তাদের লোকেরা মরন নয়।
ক্যালফুল

উত্তর:


24

কঠোর অর্থে টেস্ট স্যুটটির মান প্রতিষ্ঠিত না হওয়া পর্যন্ত কোনও দাবি করা মোটেও ন্যায়সঙ্গত নয়। পরীক্ষাগুলির 100% পাস করা অর্থবহ নয় যদি বেশিরভাগ পরীক্ষাগুলি একে অপরের সাথে তুচ্ছ বা পুনরাবৃত্তি হয়।

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

আপনার পরীক্ষার নকশা উন্নত করতে, আপনি (1) হোয়াইটবক্স কৌশল, (2) ব্ল্যাকবক্স কৌশল এবং (3) মিউটেশন টেস্টিং ব্যবহার করতে পারেন।

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

  • প্রতিটি ফাংশন বলা হয়? [কার্যকরী কভারেজ]
  • প্রতিটি বিবৃতি কার্যকর করা হয়? [বিবৃতি কভারেজ - উভয় কার্যকরী কভারেজ এবং বিবৃতি কভারেজ খুব বেসিক, তবে কিছুই চেয়ে ভাল]
  • প্রতিটি সিদ্ধান্তের জন্য (যেমন ifবা while), আপনার কি এমন একটি পরীক্ষা আছে যা এটিকে সত্য হতে বাধ্য করে এবং অন্যটি এটি মিথ্যা হতে বাধ্য করে? [সিদ্ধান্তের কভারেজ]
  • সংমিশ্রণ (ব্যবহার &&) বা সংশ্লেষ (ব্যবহার ||) প্রতিটি শর্তের জন্য, প্রতিটি subexpression এর একটি পরীক্ষা আছে যেখানে এটি সত্য / মিথ্যা? [শর্ত কভারেজ]
  • লুপ কভারেজ: আপনার কি এমন একটি পরীক্ষা আছে যা 0 টি পুনরাবৃত্তি, 1 পুনরাবৃত্তি, 2 পুনরাবৃত্তিকে বাধ্য করে?
  • প্রতিটি breakলুপ থেকে আচ্ছাদিত?

(২) ব্ল্যাকবক্স কৌশলগুলি প্রয়োজনীয়তাগুলি উপলভ্য হলে ব্যবহৃত হয়, তবে কোডটি নিজেই নয়। এগুলি উচ্চ মানের পরীক্ষার দিকে নিয়ে যেতে পারে:

  • আপনার ব্ল্যাকবক্স পরীক্ষাগুলি কি একাধিক পরীক্ষার লক্ষ্যকে অন্তর্ভুক্ত করে? আপনি আপনার পরীক্ষাগুলি "চর্বি" হতে চাইবেন: তারা কেবল এক্স বৈশিষ্ট্যটি পরীক্ষা করে না, তবে তারা ওয়াই এবং জেডও পরীক্ষা করে different বিভিন্ন বৈশিষ্ট্যের ইন্টারঅ্যাকশনটি বাগগুলি খুঁজে পাওয়ার দুর্দান্ত উপায়।
  • আপনি যখন "ত্বক" পরীক্ষা করতে চান না কেবল তখনই আপনি যখন ত্রুটির শর্তটি পরীক্ষা করছেন। উদাহরণস্বরূপ, অবৈধ ব্যবহারকারী ইনপুট জন্য পরীক্ষা করা। যদি আপনি একাধিক অবৈধ ইনপুট পরীক্ষার লক্ষ্য অর্জনের চেষ্টা করে থাকেন (উদাহরণস্বরূপ, একটি অবৈধ জিপ কোড এবং একটি অবৈধ রাস্তার ঠিকানা) এটি সম্ভবত একটি ক্ষেত্রে অন্যটিকে মাস্কিং করছে।
  • ইনপুট প্রকারগুলি বিবেচনা করুন এবং ইনপুটগুলির ধরণের জন্য "সমতা শ্রেণি" গঠন করুন। উদাহরণস্বরূপ, যদি আপনার কোডটি ত্রিভুজ সমান্তরাল কিনা তা পরীক্ষা করে দেখায়, যে পরীক্ষার পক্ষের (1, 1, 1) ত্রিভুজ ব্যবহার করে সম্ভবত পরীক্ষার ডেটা (2, 2, 2) এবং একই ধরণের ত্রুটি খুঁজে পেতে পারে (3, 3, 3) পাবেন। অন্যান্য ক্লাসের ইনপুট সম্পর্কে চিন্তা করে আপনার সময় ব্যয় করা ভাল। উদাহরণস্বরূপ, যদি আপনার প্রোগ্রামটি ট্যাক্স পরিচালনা করে তবে আপনি প্রতিটি ট্যাক্স বন্ধনীটির জন্য একটি পরীক্ষা চান। [একে সমতুল্য পার্টিশন বলা হয়।]
  • বিশেষ ক্ষেত্রে প্রায়শই ত্রুটির সাথে যুক্ত থাকে। আপনার পরীক্ষার ডেটাতেও সীমানা মান থাকতে হবে, যেমন সমতুল্য টাস্কের উপরের বা নীচে। উদাহরণস্বরূপ, বাছাই করা অ্যালগরিদম পরীক্ষা করার সময়, আপনি খালি অ্যারে, একটি একক উপাদান অ্যারে, দুটি উপাদান সহ একটি অ্যারে এবং তারপরে খুব বড় অ্যারে দিয়ে পরীক্ষা করতে চান। আপনার সীমানা ক্ষেত্রে কেবল ইনপুট নয়, পাশাপাশি আউটপুটও বিবেচনা করা উচিত। [এটি কল সীমানা-মান বিশ্লেষণ।]
  • আরেকটি কৌশল হ'ল "অনুমান করার সময় ত্রুটি।" আপনি যদি এমন কোনও বিশেষ সংমিশ্রণ চেষ্টা করেন যা আপনি আপনার প্রোগ্রামটি ভাঙ্গতে পারেন তবে আপনার কী অনুভূতি রয়েছে? তাহলে শুধু চেষ্টা করে দেখুন! মনে রাখবেন: আপনার লক্ষ্যটি বাগের সন্ধান করা, প্রোগ্রামটি বৈধ কিনা তা নিশ্চিত করার জন্য নয় । কিছু লোকের ত্রুটি অনুমান করার জন্য নকশ রয়েছে।

(3) পরিশেষে, ধরুন আপনার কাছে ইতিমধ্যে হোয়াইটবক্সের কভারেজের জন্য প্রচুর দুর্দান্ত পরীক্ষা আছে এবং ব্ল্যাকবক্স কৌশল প্রয়োগ রয়েছে। তুমি আর কি করতে পারো? আপনার টেস্ট পরীক্ষা করার সময় এসেছে । আপনি যে কৌশলটি ব্যবহার করতে পারেন তা হ'ল মিউটেশন টেস্টিং।

মিউটেশন পরীক্ষার অধীনে, আপনি একটি ত্রুটি তৈরির আশায় আপনার প্রোগ্রামে (একটি অনুলিপি) পরিবর্তন করতে পারেন। একটি রূপান্তর হতে পারে:

একটি ভেরিয়েবলের একটি রেফারেন্সকে অন্য ভেরিয়েবলে পরিবর্তন করুন; অ্যাবস () ফাংশন sertোকান; এর চেয়ে কম-বেশিতে পরিবর্তন করুন; একটি বিবৃতি মুছুন; একটি ধ্রুবক সঙ্গে একটি পরিবর্তনশীল প্রতিস্থাপন; একটি ওভাররাইড পদ্ধতি মুছুন; একটি সুপার পদ্ধতির একটি রেফারেন্স মুছুন; যুক্তির ক্রম পরিবর্তন করুন

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


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

আপনি যতক্ষণ স্থির হারে ত্রুটিগুলি খুঁজে পাচ্ছেন ততক্ষণ পরীক্ষার প্রচেষ্টা অবশ্যই চালিয়ে যেতে হবে। কেবলমাত্র নতুন বাগের হারের হ্রাস যখন পাওয়া যায় তখনই আপনার আত্মবিশ্বাস থাকা উচিত যে আপনি উন্নয়নের সেই পর্যায়ে ভাল পরীক্ষার প্রচেষ্টা করেছেন।


7

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

যাইহোক, কোডটি ইউনিট পরীক্ষায় পাস করার অর্থ এই নয় যে এটি অভ্যন্তরীণভাবে উচ্চ মানের। কোডটি এখনও অপ্রাসঙ্গিক মন্তব্য এবং অনুপযুক্ত ডেটা স্ট্রাকচারের সাথে খারাপভাবে ফর্ম্যাট করা যেতে পারে তবে এটি এখনও পরীক্ষায় উত্তীর্ণ হতে পারে।

আমি জানি যে আমি কোন কোড বজায় রাখতে এবং প্রসারিত করতে পছন্দ করব।


7

একেবারে কোনও পরীক্ষার সহ কোড অত্যন্ত উচ্চমানের, পাঠযোগ্য, সুন্দর এবং দক্ষ (বা মোট জাঙ্ক) হতে পারে, তাই না, এটি বলা মোটেও উপযুক্ত নয় যে ৮০% পরীক্ষার কভারেজ সহ কোডটি কোনও পরীক্ষার কভারেজ নেই এমন কোডের চেয়ে উচ্চমানের।

এটা বলা ঠিক হবে যে ভাল পরীক্ষার সাথে 80% কোড আবৃত সম্ভবত গ্রহণযোগ্য মানের, এবং সম্ভবত তুলনামূলকভাবে রক্ষণাবেক্ষণযোগ্য। তবে এটি সত্যিই সামান্য গ্যারান্টি দেয়।


3

আমি এটিকে আরও প্রত্যাবর্তনযোগ্য বলব। কোডটি প্রচুর পরীক্ষায় isাকা থাকলে রিফ্যাক্টরিং অত্যন্ত সহজ হয়ে যায়।

এটিকে আরও রক্ষণাবেক্ষণযোগ্য বলা ভাল হবে।


2

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

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


-2

"শর্ত কভারেজ" সম্পর্কিত আমি নিজেকে কিছুদিন ধরে এই প্রশ্নটি জিজ্ঞাসা করছি। অতএব অ্যাটলিক ডট কম থেকে এই পৃষ্ঠাটি সম্পর্কে কীভাবে "কোড কভারেজ বিশ্লেষণ কেন?"

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

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

একটি আকর্ষণীয় নেকার কিউব চেঞ্জ-অফ ভিউতে, পরীক্ষার কোডটি এখন পরীক্ষার অধীনে কোড দ্বারা পরীক্ষা করা হচ্ছে!


-3

গ্যারান্টি দেওয়ার অনেকগুলি উপায় রয়েছে যে কোনও প্রোগ্রাম আপনি যা চান তা করে এবং পরিবর্তনগুলি কোনও অনিচ্ছাকৃত প্রভাব বহন করবে না তা নিশ্চিত করার জন্য।

পরীক্ষা এক। তথ্যের রূপান্তর এড়ানো অন্য একটি। সুতরাং একটি টাইপ সিস্টেম। বা আনুষ্ঠানিক যাচাই।

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


এটি কি কেবল আপনার মতামত বা আপনি কোনওভাবে এটি ব্যাক আপ করতে পারেন?
gnat

2
পরীক্ষা কোনও প্রোগ্রামের গ্যারান্টি দেওয়ার উপায় নয় যা আপনি ইচ্ছা করেন তা করে।
আন্দ্রেস এফ।

1
তারপরে আমি পরীক্ষার কী তা অবাক করেই ফেলেছি
Andrea

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

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