৪.২ পরীক্ষা কভারেজ ও পরীক্ষা কার্যকারিতা
সারসংক্ষেপ এবং প্রেরণা
পরীক্ষা কভারেজ একটি পরীক্ষা স্যুট দ্বারা কার্যকর করা কোডের শতাংশ পরিমাপ করে: লাইন কভারেজ, শাখা কভারেজ, বা কঠোরতর পথ কভারেজ। এটি এই সম্পূর্ণ বইয়ে সবচেয়ে ব্যাপকভাবে ট্র্যাক করা মেট্রিকগুলোর একটি, গণনা করা সস্তা, একটি একক শতাংশ হিসেবে কল্পনা করা সহজ, এবং ফলস্বরূপ সবচেয়ে ঘন ঘন কারচুপি করা মেট্রিকগুলোর একটি, ঠিক বিষয় ১.২ যে কোনো মেট্রিক একটি লক্ষ্য হয়ে ওঠার জন্য ভবিষ্যদ্বাণী করে সেভাবে। একটি পরীক্ষা স্যুট প্রায় অর্থপূর্ণ কিছু যাচাই না করেই উচ্চ কভারেজ অর্জন করতে পারে, কারণ কভারেজ পরিমাপ করে কোড একটি পরীক্ষা চালানোর সময় কার্যকর হয়েছিল কিনা, পরীক্ষাটি প্রকৃতপক্ষে কোডটি সঠিকভাবে আচরণ করেছে কিনা তা পরীক্ষা করেছে কিনা তা নয়।
কভারেজ ও প্রকৃত পরীক্ষা কার্যকারিতার মধ্যে এই ফাঁকটি একটি ছোট পাদটীকা নয়; এটি এই বিষয়ের কেন্দ্রীয় উদ্বেগ। একটি পরীক্ষা যা একটি ফাংশন কল করে এবং এর ফলাফল সম্পর্কে কিছু নিশ্চিত করে না প্রান্ত ক্ষেত্র জুড়ে ফাংশনের আচরণ পুঙ্খানুপুঙ্খভাবে যাচাই করে এমন একটি পরীক্ষার সাথে অভিন্নভাবে কভারেজ বাড়ায়। এই বিষয়ের সুপারিশকৃত সমাধান, মিউটেশন পরীক্ষা, ইচ্ছাকৃতভাবে কোডে ছোট, কৃত্রিম ত্রুটি প্রবর্তন করে এবং পরীক্ষা করে পরীক্ষা স্যুটটি প্রকৃতপক্ষে সেগুলো ধরে কিনা, এই ফাঁকের সরাসরি উত্তর, এবং এই বিষয় এটিকে কভারেজের প্রয়োজনীয় পরিপূরক হিসেবে বিবেচনা করে, একটি ঐচ্ছিক অতিরিক্ত নয়।
বড় দলের জন্য, কভারেজ লক্ষ্য প্রায়ই একটি গুণমান গেট হিসেবে প্রতিষ্ঠান-ব্যাপী গৃহীত হয়, ঠিক সেই ধরনের উৎসাহিত, উচ্চ-দৃশ্যমান মেট্রিক যার বিরুদ্ধে বিষয় ১.২ সতর্ক করে যে এটি কারচুপির প্রতি সবচেয়ে বেশি প্রকাশিত। এন্টারপ্রাইজ ও সরকারি প্রতিষ্ঠান যারা একটি জোড়া কার্যকারিতা পরীক্ষা ছাড়া একটি ঢালাও কভারেজ শতাংশ প্রয়োজনীয়তা নির্ধারণ করে, প্রকৃতপক্ষে, ঠিক এই বই বর্ণনা করা প্রান্তিক-কারচুপি প্যাটার্ন উৎসাহিত করছে: শুধু একটি সংখ্যায় পৌঁছাতে লেখা তুচ্ছ পরীক্ষা, প্রকৃত ত্রুটি প্রতিরোধে কোনো সংশ্লিষ্ট উন্নতি ছাড়াই।
মূল নীতিসমূহ
- কভারেজ কার্যকরকরণ পরিমাপ করে, যাচাইকরণ নয়। একটি পরীক্ষা দ্বারা চালানো একটি লাইন এটি সম্পর্কে অর্থপূর্ণ কিছু পরীক্ষা করেছিল কিনা তা নিয়ে কিছু বলে না।
- কোনো কার্যকারিতা পরীক্ষা ছাড়া একটি কভারেজ লক্ষ্য একটি পাঠ্যপুস্তক গুডহার্টের সূত্র স্থাপনা (বিষয় ১.২): সংখ্যাটি উন্নত হয় যখন প্রকৃত গুণমান হয় না।
- মিউটেশন পরীক্ষা কভারেজের প্রয়োজনীয় পরিপূরক, একটি প্রতিস্থাপন নয়; উভয়ই একসাথে ব্যবহার করুন।
- কভারেজ সর্বাধিক করার জন্য একটি লক্ষ্যের চেয়ে একটি মেঝে হিসেবে বেশি দরকারী। একটি নিম্ন সংখ্যা প্রকৃতপক্ষে অপরীক্ষিত কোড প্রকাশ করে; ১০০% তাড়া করা প্রায়ই হ্রাসমান বা নেতিবাচক রিটার্ন উৎপাদন করে।
- সমালোচনামূলক-পথ কভারেজ অভিন্ন, ঢালাও কভারেজের চেয়ে বেশি গুরুত্বপূর্ণ। সব কোড ব্যর্থ হলে সমান ঝুঁকি বহন করে না।
সুপারিশসমূহ
অপরীক্ষিত কোড খুঁজে পেতে কভারেজ ব্যবহার করুন, সর্বাধিক করার একটি লক্ষ্য হিসেবে নয়
একটি কভারেজ প্রতিবেদনকে প্রধানত কোনো পরীক্ষা মোটেও নেই এমনের একটি মানচিত্র হিসেবে বিবেচনা করুন, যা প্রকৃতপক্ষে দরকারী তথ্য, ১০০%-এর দিকে ঠেলে দেওয়ার একটি স্কোর হিসেবে নয়। শূন্য কভারেজসহ কোড বন্ধ করার যোগ্য একটি প্রকৃত ফাঁক; কভারেজকে ৮৫% থেকে ৯৫%-এ ঠেলে দেওয়ার প্রান্তিক মূল্য সাধারণত অনেক কম এবং প্রায়ই এটি নিতে যে প্রচেষ্টা লাগে তার যোগ্য নয়, বিশেষত যদি সেই প্রচেষ্টা শুধু উচ্চতর সংখ্যায় পৌঁছাতে নিম্ন-মূল্যের পরীক্ষা উৎপাদন করে।
প্রতিটি কভারেজ লক্ষ্যকে মিউটেশন পরীক্ষার সাথে জোড়া দিন
মিউটেশন পরীক্ষা টুল স্বয়ংক্রিয়ভাবে আপনার কোডে ছোট ত্রুটি প্রবর্তন করে, একটি তুলনা অপারেটর উল্টে, একটি সীমানা শর্ত পরিবর্তন করে, এবং তারপর প্রতিটি মিউটেটেড সংস্করণের বিরুদ্ধে আপনার পরীক্ষা স্যুট চালায়। একটি পরীক্ষা স্যুট যা বেশিরভাগ মিউট্যান্ট “নিধন করে” (এর বিরুদ্ধে ব্যর্থ হয়) প্রকৃতপক্ষে আচরণ যাচাই করছে; একটি উচ্চ লাইন কভারেজসহ কিন্তু নিম্ন মিউট্যান্ট-নিধন হারসহ একটি পরীক্ষা স্যুট অর্থপূর্ণভাবে এটি পরীক্ষা না করেই কোড কার্যকর করছে। এই জোড়াকরণ কভারেজ-লক্ষ্য কারচুপির বিরুদ্ধে একক সবচেয়ে কার্যকর গার্ডরেল, এবং এই বই এটিকে মান অনুশীলন হিসেবে সুপারিশ করে, একটি উন্নত বা ঐচ্ছিক কৌশল নয়।
প্রথমে সমালোচনামূলক পথে কভারেজ ও মিউটেশন পরীক্ষা অগ্রাধিকার দিন
সব কোড সমান ঝুঁকি বহন করে না। একটি পেমেন্ট-প্রক্রিয়াকরণ পথ, একটি প্রমাণীকরণ পরীক্ষা, বা একটি উপাত্ত-মাইগ্রেশন স্ক্রিপ্ট একটি কদাচিৎ ব্যবহৃত প্রশাসনিক প্রতিবেদনের চেয়ে অনেক বেশি কঠোর পরীক্ষার যোগ্য। একটি সম্পূর্ণ কোডবেস জুড়ে অভিন্ন কভারেজ অনুসরণ করার বদলে, আপনার সর্বোচ্চ-ঝুঁকি, সর্বোচ্চ-পরিণতি কোড পথ চিহ্নিত করুন এবং সেখানে প্রথমে উভয় কভারেজ ও মিউটেশন পরীক্ষা প্রচেষ্টা কেন্দ্রীভূত করুন, প্রকৃতপক্ষে নিম্ন-ঝুঁকির কোডে নিম্ন কভারেজকে একটি ইচ্ছাকৃত, অবগত বিনিময় হিসেবে গ্রহণ করে একটি তদারকির বদলে।
নির্দিষ্ট কভারেজ-কারচুপি প্যাটার্নের জন্য দেখুন
একবার এটি একটি লক্ষ্য হয়ে উঠলে কভারেজ কারচুপি হওয়ার সবচেয়ে সাধারণ উপায়ে অন্তর্ভুক্ত: পরীক্ষা যা একটি ফাংশন কল করে কিন্তু ফলাফল সম্পর্কে অর্থপূর্ণ কিছু নিশ্চিত করে না (এই মেট্রিকে প্রয়োগ করা বিষয় ১.২-এর প্রান্তিক কারচুপি), অন্তর্নিহিত সমস্যা ঠিক করার বদলে ব্যর্থ পরীক্ষা নিষ্ক্রিয় বা মুছে ফেলা, এবং কেন এটি পরীক্ষা করা কঠিন তা সমাধান করার বদলে কভারেজ গণনা থেকে সম্পূর্ণভাবে পরীক্ষা-করা-কঠিন কোড বাদ দেওয়া। শুধু কভারেজ শতাংশে বিশ্বাস করার বদলে পর্যায়ক্রমিকভাবে পরীক্ষার একটি নমুনা সরাসরি নিরীক্ষা করুন, তাদের প্রকৃত নিশ্চিতকরণ পড়ে।
আপনার CI পাইপলাইনে একটি কভারেজ সিলিং নয়, একটি কভারেজ মেঝে নির্ধারণ করুন
আপনার বিল্ড পাইপলাইন কনফিগার করুন প্রতিগমন প্রতিরোধ করে নতুন কোডের জন্য একটি সম্মত মেঝের নিচে কভারেজ পড়লে ব্যর্থ হতে, প্রতিটি পরিবর্তনকে সামগ্রিক সংখ্যা উচ্চতর ঠেলে দেওয়ার প্রয়োজন করার বদলে। এই পার্থক্যটি গুরুত্বপূর্ণ: একটি মেঝে একই নিরলস উর্ধ্বমুখী চাপ তৈরি না করে পিছিয়ে পড়ার বিরুদ্ধে রক্ষা করে যা সংখ্যাটি আরও এগিয়ে নেওয়ার জন্য শুধু লেখা নিম্ন-মূল্যের পরীক্ষা উৎপাদন করে।
মূল্যবিচার: ভালো ও মন্দ দিক
| পদ্ধতি | ভালো দিক | মন্দ দিক |
|---|---|---|
| একা কভারেজ শতাংশ | সস্তা, সরল, টুলিং দ্বারা ব্যাপকভাবে সমর্থিত | সহজে কারচুপি করা যায়; যাচাইকরণ নয়, কার্যকরকরণ পরিমাপ করে |
| মিউটেশন পরীক্ষাসহ কভারেজ | পরীক্ষা প্রকৃতপক্ষে আচরণ পরীক্ষা করে তা যাচাই করে, কারচুপি প্রতিরোধ করে | আরও গণনাগতভাবে ব্যয়বহুল; টুলিং বিনিয়োগ প্রয়োজন |
| কোডবেস জুড়ে অভিন্ন কভারেজ লক্ষ্য | বলা ও প্রয়োগ করা সহজ | নিম্ন-ঝুঁকির কোডে প্রচেষ্টা অপচয় করে; অন্য কোথাও প্রকৃতপক্ষে সমালোচনামূলক পথে অতি-কম বিনিয়োগ করে |
| ঝুঁকি-ভিত্তিক, সমালোচনামূলক-পথ-প্রথম কভারেজ | এটি সবচেয়ে গুরুত্বপূর্ণ যেখানে সেখানে প্রচেষ্টা কেন্দ্রীভূত করে | প্রকৃতপক্ষে সমালোচনামূলক পথ সঠিকভাবে চিহ্নিত করতে বিচার প্রয়োজন |
কেন্দ্রীয় টানাপোড়েন হলো সরলতা বনাম সততা। একটি একক কভারেজ শতাংশ প্রতিবেদন করা সহজ এবং একটি লক্ষ্য হিসেবে নির্ধারণ করা সহজ, কিন্তু সেই সরলতাই ঠিক যা এটিকে একবার একটি উৎসাহিত সংখ্যা হয়ে ওঠার পরে এত সহজে কারচুপি করার যোগ্য করে তোলে। একটি সৎ সংকেতের খরচ হিসেবে মিউটেশন পরীক্ষা ও ঝুঁকি-ভিত্তিক অগ্রাধিকারের যোগ করা জটিলতা গ্রহণ করে, এবং আপনার দলের কাছে স্পষ্টভাবে যোগাযোগ করে কেন একটি নিম্নতর সামগ্রিক কভারেজ সংখ্যা, সমালোচনামূলক পথে সঠিকভাবে কেন্দ্রীভূত ও একটি শক্তিশালী মিউট্যান্ট-নিধন হার দ্বারা সমর্থিত, একটি উচ্চতর, আরও অভিন্নভাবে বিতরণকৃত কিন্তু কম কার্যকরভাবে যাচাইকৃত একটির চেয়ে বেশি মূল্যবান, টানাপোড়েন সমাধান করুন।
আপনার দলের সাথে আলোচনার প্রশ্ন
১. আমাদের সর্বোচ্চ-ঝুঁকির কোড পথে আমাদের মিউট্যান্ট-নিধন হার কী, এবং এটি একই কোডে আমাদের কভারেজ শতাংশের সাথে কীভাবে তুলনা করে? একটি উচ্চ কভারেজ সংখ্যা ও একটি নিম্ন মিউট্যান্ট-নিধন হারের মধ্যে একটি বড় ফাঁক সম্ভাব্য সবচেয়ে স্পষ্ট চিহ্ন যে একা কভারেজ আপনাকে যা মনে করেন তা বলছে না।
২. আমরা কি কখনও এটি কী যাচাই করা উচিত সে সম্পর্কে সামান্য প্রকৃত চিন্তাসহ প্রধানত একটি কভারেজ সংখ্যা বাড়াতে একটি পরীক্ষা লিখেছি? এখানে সৎ হোন; এটি দল স্বীকার করতে পছন্দ করে তার চেয়ে বেশি ঘন ঘন ঘটে, বিশেষত সময়সীমার চাপে যখন একটি কভারেজ গেট একটি মার্জ ব্লক করছে।
৩. আমাদের কভারেজ প্রচেষ্টা কি আমাদের সর্বোচ্চ-ঝুঁকির কোড পথে কেন্দ্রীভূত, নাকি সেই কোড ব্যর্থ হলে পরিণতি নির্বিশেষে অভিন্নভাবে ছড়ানো? আপনার কোডবেসের একটি সৎ ঝুঁকি মূল্যায়নের বিরুদ্ধে আপনার বর্তমান কভারেজ বিতরণ ম্যাপ করুন এবং অমিলের জন্য দেখুন।
৪. আমরা কি কখনও এটি প্রকাশ করা অন্তর্নিহিত সমস্যা ঠিক করার বদলে একটি ব্যর্থ পরীক্ষা নিষ্ক্রিয় বা মুছে ফেলেছি? এটি কভারেজ কারচুপির সবচেয়ে ক্ষতিকর রূপগুলোর একটি, কারণ এটি সক্রিয়ভাবে প্রকৃত সুরক্ষা অপসারণ করে যখন প্রতিবেদিত কভারেজ সংখ্যা খুব কমই সরে।
৫. আমাদের CI পাইপলাইন কি নতুন কোডের জন্য একটি কভারেজ মেঝে প্রয়োগ করে, নাকি হ্রাসমান রিটার্ন নির্বিশেষে একটি ক্রমবর্ধমান উচ্চতর সিলিংয়ের জন্য ঠেলে দেয়? আলোচনা করুন আপনার বর্তমান গেট নকশা সঠিক উৎসাহ তৈরি করে, প্রতিগমনের বিরুদ্ধে রক্ষা করে, নাকি ভুল, নিরলস উর্ধ্বমুখী চাপ যা নিম্ন-মূল্যের পরীক্ষা প্যাডিং পুরস্কৃত করে।
৬. আমাদের কোডবেসে কোন কোড কভারেজ গণনা থেকে বাদ দেওয়া হয়েছে, এবং সেই বর্জন ন্যায্য নাকি এটি একটি প্রকৃত পরীক্ষা ফাঁক লুকাচ্ছে? আপনার প্রকৃত বর্জন কনফিগারেশন পর্যালোচনা করুন; সময়ের সাথে এই তালিকা নীরবে বাড়া সাধারণ কেউ প্রতিটি বর্জন এখনও ন্যায্য কিনা তা পুনর্বিবেচনা না করে।
ক্ষেত্র লেন্স
স্টার্টআপ। এই প্রাথমিক পর্যায়ে আনুষ্ঠানিক কভারেজ লক্ষ্য প্রায়ই অপ্রয়োজনীয়; এখনও দ্রুত পরিবর্তিত এবং যাই হোক শীঘ্রই যথেষ্ট পুনর্লিখিত হতে পারে এমন একটি কোডবেস জুড়ে একটি ঢালাও শতাংশ অনুসরণ করার বদলে সরাসরি আপনার ঝুঁকিপূর্ণ, সবচেয়ে ব্যবসায়িক-সমালোচনামূলক কোড পথে (সাধারণত পেমেন্ট বা মূল-কর্মপ্রবাহ যুক্তি) পরীক্ষা-লেখার প্রচেষ্টা ফোকাস করুন।
ছোট ব্যবসা। বেশিরভাগ CI প্ল্যাটফর্ম ন্যূনতম সেটআপ খরচে স্বয়ংক্রিয়ভাবে কভারেজ প্রতিবেদন করে; একটি নির্দিষ্ট লক্ষ্য শতাংশ তাড়া করার বদলে সম্পূর্ণভাবে অপরীক্ষিত সমালোচনামূলক কোড খুঁজে পেতে প্রধানত এটি ব্যবহার করুন, এবং শুধুমাত্র একবার আপনার এটি প্রকাশ করে তার উপর কাজ করার প্রকৌশল ক্ষমতা থাকলে মিউটেশন পরীক্ষা বিবেচনা করুন।
এন্টারপ্রাইজ। এই মাত্রায় ঢালাও, প্রতিষ্ঠান-ব্যাপী কভারেজ লক্ষ্য একটি সাধারণ ও তাৎপর্যপূর্ণ ভুল, যেহেতু এগুলো একসাথে ডজন ডজন দল জুড়ে ঠিক এই বিষয় বর্ণনা করা কারচুপি উৎসাহিত করে। পরিষেবা সমালোচনামূলকতা অনুযায়ী ভিন্ন ঝুঁকি-ভিত্তিক কভারেজ প্রত্যাশা প্রতিষ্ঠা করুন, এবং নির্দিষ্টভাবে আপনার সর্বোচ্চ-ঝুঁকির সিস্টেমের জন্য মিউটেশন পরীক্ষা অবকাঠামোয় বিনিয়োগ করুন।
সরকার। কভারেজ প্রয়োজনীয়তা কখনও কখনও গুণমান নিশ্চয়তার জন্য একটি ভোঁতা, সহজে নির্দিষ্ট প্রক্সি হিসেবে ক্রয় বা সম্মতি নথিতে প্রদর্শিত হয়। যেখানে সম্ভব, চুক্তিগত উৎসাহ অনিচ্ছাকৃতভাবে এই বিষয় সতর্ক করা নিম্ন-মূল্যের পরীক্ষা প্যাডিং পুরস্কৃত না করে তা নিশ্চিত করতে যে কোনো চুক্তিগতভাবে প্রয়োজনীয় কভারেজ শতাংশকে একটি মিউটেশন-পরীক্ষা বা ত্রুটি-ভিত্তিক কার্যকারিতা প্রয়োজনীয়তার সাথে জোড়া দিন।
উদাহরণ
এন্টারপ্রাইজ। একটি ই-কমার্স প্ল্যাটফর্মের নেতৃত্ব সব নতুন কোডের জন্য একটি কোম্পানি-ব্যাপী ৯৫% কভারেজ প্রয়োজনীয়তা নির্ধারণ করেছিল, একটি কঠোর CI গেট হিসেবে প্রয়োগ করা। দুই বছর পরে একটি নিরীক্ষা, নাকি ভালোভাবে-পরীক্ষিত কোডে উৎপাদন ত্রুটির একটি ঢেউ দ্বারা প্ররোচিত, কোডবেসের বেশিরভাগ জুড়ে ৪০%-এর নিচে একটি মিউট্যান্ট-নিধন হার পেয়েছিল: দলগুলো এমন পরীক্ষা লিখছিল যা তাদের আচরণ সম্পর্কে অর্থপূর্ণভাবে নিশ্চিত না করেই কোড পথ কার্যকর করেছিল, শুধুমাত্র সময়সীমার চাপে গেট সন্তুষ্ট করতে। কোম্পানিটি ঢালাও কভারেজ প্রয়োজনীয়তা একটি ঝুঁকি-স্তরযুক্ত নীতি দিয়ে প্রতিস্থাপন করেছিল: পেমেন্ট ও প্রমাণীকরণ কোডের জন্য কঠোর কভারেজ প্লাস ৮০% নিধন-হার প্রান্তিকের উপরে বাধ্যতামূলক মিউটেশন পরীক্ষা, এবং নিম্ন-ঝুঁকির অভ্যন্তরীণ টুলিংয়ের জন্য একটি অনেক হালকা কভারেজ মেঝে, যা উভয়ই অপচয়িত পরীক্ষা প্রচেষ্টা কমিয়েছিল এবং প্রকৃতপক্ষে সমালোচনামূলক পথে ত্রুটির হার পরিমাপযোগ্যভাবে উন্নত করেছিল।
সরকার। একটি পাবলিক স্বাস্থ্য সংস্থার সুবিধা-যোগ্যতা সিস্টেম এর উন্নয়ন বিক্রেতা চুক্তির অধীনে চুক্তিগতভাবে ৯০% পরীক্ষা কভারেজ বজায় রাখতে বাধ্য ছিল। কভারেজ প্রয়োজনীয়তা পূরণ করা সত্ত্বেও সরবরাহ করা একটি উল্লেখযোগ্য যোগ্যতা-গণনা ত্রুটির পরে একটি ঘটনা-পরবর্তী পর্যালোচনা পেয়েছিল দায়ী নির্দিষ্ট ফাংশনটি বৈধ ইনপুটসহ ফাংশনটি কল করা কিন্তু কখনও সীমানা শর্ত বা অবৈধ ইনপুট পরীক্ষা না করা পরীক্ষার মাধ্যমে সম্পূর্ণভাবে এর কভারেজ অর্জন করেছিল, ঠিক যেখানে ত্রুটিটি ঘটেছিল। সংস্থার সংশোধিত বিক্রেতা চুক্তি এখন যে কোনো যোগ্যতা-গণনা কোডের জন্য কভারেজের পাশাপাশি একটি নথিভুক্ত মিউটেশন-পরীক্ষা স্কোর প্রয়োজন করে, নির্দিষ্ট ফাঁক বন্ধ করে যা সম্মত কিন্তু অকার্যকর পরীক্ষাকে চুক্তি সন্তুষ্ট করতে দিয়েছিল।
ব্যবসায়িক যুক্তি: প্রেরণা, ROI, এবং TCO
মিউটেশন পরীক্ষার সাথে কভারেজ জোড়া করার রিটার্ন হলো এটি একটি উৎপাদন ত্রুটির খরচ হওয়ার আগে আপাত ও প্রকৃত পরীক্ষা গুণমানের মধ্যে ফাঁক ধরা। উপরের ই-কমার্স উদাহরণ প্যাটার্নটি স্পষ্টভাবে দেখায়: একা একটি কভারেজ প্রয়োজনীয়তা একটি মিথ্যা নিরাপত্তা বোধ উৎপাদন করেছিল যা অবশেষে ত্রুটির একটি ঢেউ প্রকাশ করেছিল মিউটেশন-পরীক্ষা বিনিয়োগের চেয়ে অনেক বেশি খরচে যা ফাঁকটি আগে ধরত।
মোট মালিকানা খরচে মিউটেশন পরীক্ষার গণনাগত খরচ অন্তর্ভুক্ত, যা সরল কভারেজ ইনস্ট্রুমেন্টেশনের চেয়ে চালাতে বেশি ব্যয়বহুল এবং তাই সাধারণত একটি সম্পূর্ণ কোডবেসের বদলে সমালোচনামূলক-পথ কোডের জন্য সংরক্ষিত, প্লাস ফলাফল ব্যাখ্যা করা ও এর উপর কাজ করার প্রকৌশল সময়। সেই খরচ নির্দিষ্টভাবে সর্বোচ্চ-ঝুঁকির কোডের জন্য ন্যায্যতাপ্রাপ্ত, যেখানে পরীক্ষা কার্যকারিতায় একটি অজ্ঞাত ফাঁকের খরচ সর্বোচ্চ।
বিরোধী প্যাটার্ন এবং ফাঁদ
- কভারেজ শতাংশকে একটি সরাসরি গুণমান রায় হিসেবে বিবেচনা করা: এটি যাচাইকরণ নয়, কার্যকরকরণ পরিমাপ করে।
- প্রধানত একটি কভারেজ গেট সন্তুষ্ট করতে পরীক্ষা লেখা: ঠিক বিষয় ১.২ সতর্ক করা নিম্ন-মূল্যের, প্রান্তিক-কারচুপি প্যাটার্ন উৎপাদন করে।
- অন্তর্নিহিত সমস্যা ঠিক করার বদলে ব্যর্থ পরীক্ষা নিষ্ক্রিয় বা মুছে ফেলা: প্রতিবেদিত সংখ্যাকে খুব কমই প্রভাবিত করার সময় প্রকৃত সুরক্ষা অপসারণ করে।
- কোড ঝুঁকি নির্বিশেষে একটি অভিন্ন কভারেজ লক্ষ্য প্রয়োগ করা: নিম্ন-ঝুঁকির কোডে প্রচেষ্টা অপচয় করে এবং প্রকৃতপক্ষে সমালোচনামূলক পথে অতি-কম বিনিয়োগ করে।
- সময়ের সাথে নীরবে একটি বর্জন তালিকা বাড়ানো: একটি প্রযুক্তিগতভাবে সঠিক কিন্তু বিভ্রান্তিকর কভারেজ চিত্রের পেছনে প্রকৃত পরীক্ষা ফাঁক লুকায়।
- একটি কভারেজ মেঝের বদলে একটি কভারেজ সিলিং অনুসরণ করা: নিরলস উর্ধ্বমুখী চাপ তৈরি করে যা প্রকৃত যাচাইকরণের উপর পরীক্ষা প্যাডিং পুরস্কৃত করে।
পরিপক্বতা মডেল
- স্তর ১, শুরু: কভারেজ পরিমাপ করা হয় না, বা কোনো মেঝে, লক্ষ্য, বা কার্যকারিতা পরীক্ষা ছাড়া অসামঞ্জস্যপূর্ণভাবে পরিমাপ করা হয়।
- স্তর ২, উন্নয়ন: একটি কভারেজ লক্ষ্য বিদ্যমান ও ট্র্যাক করা হয়, কিন্তু কোনো মিউটেশন পরীক্ষা বা ঝুঁকি-ভিত্তিক অগ্রাধিকার প্রচেষ্টা কীভাবে বরাদ্দ করা হয় তা অবহিত করে না।
- স্তর ৩, মানসম্মতকরণ: কভারেজ মেঝে CI-তে সামঞ্জস্যপূর্ণভাবে প্রয়োগ করা হয়, ঝুঁকি-ভিত্তিক অগ্রাধিকার কভারেজ প্রচেষ্টা কোথায় কেন্দ্রীভূত হয় তা নির্দেশ করে।
- স্তর ৪, ব্যবস্থাপনা: সমালোচনামূলক-পথ কোডে মিউটেশন পরীক্ষা চলে, কভারেজের পাশাপাশি পূরণ করতে হবে এমন একটি ট্র্যাক করা নিধন-হার প্রান্তিকসহ, এবং বর্জন তালিকা পর্যায়ক্রমিকভাবে নিরীক্ষা করা হয়।
- স্তর ৫, সমন্বয়: প্রতিষ্ঠান মিউটেশন-পরীক্ষা-অবহিত অগ্রাধিকারে ফিরে খুঁজে পাওয়া নির্দিষ্ট ত্রুটি হ্রাস নির্দেশ করতে পারে, এবং কভারেজ ও কার্যকারিতা উপাত্ত একসাথে সরাসরি পরীক্ষা বিনিয়োগ সিদ্ধান্ত অবহিত করে।
আলোচনার জন্য ধারণা
১. আমাদের একক সবচেয়ে সমালোচনামূলক কোড পথে আমাদের মিউট্যান্ট-নিধন হার কী, এবং আমরা কি এটি জানি? ২. আমরা কি কখনও শুধুমাত্র একটি কভারেজ গেট সন্তুষ্ট করতে একটি নিম্ন-মূল্যের পরীক্ষা লিখেছি? ৩. আমাদের বর্তমান কভারেজ প্রচেষ্টা কি যেখানে ঝুঁকি সর্বোচ্চ সেখানে কেন্দ্রীভূত, নাকি অভিন্নভাবে ছড়ানো? ৪. বর্তমানে কোন কোড কভারেজ গণনা থেকে বাদ দেওয়া হয়েছে, এবং সেই বর্জন কি এখনও ন্যায্য? ৫. আমাদের সর্বোচ্চ-ঝুঁকির সিস্টেমে একটি মিউটেশন-পরীক্ষা বিনিয়োগ কি এর গণনাগত খরচের যোগ্য হবে?
মূল বিষয়সমূহ
- পরীক্ষা কভারেজ কার্যকরকরণ পরিমাপ করে, যাচাইকরণ নয়; একটি আচ্ছাদিত লাইন এটি অর্থপূর্ণভাবে পরীক্ষা করা হয়েছিল কিনা তা নিয়ে কিছু বলে না।
- পরীক্ষা প্রকৃতপক্ষে শুধু কোড চালায় তা নয় প্রকৃত ত্রুটি ধরে তা যাচাই করতে কভারেজকে মিউটেশন পরীক্ষার সাথে জোড়া দিন।
- একটি সম্পূর্ণ কোডবেস জুড়ে অভিন্ন কভারেজ অনুসরণ করার বদলে সমালোচনামূলক, উচ্চ-ঝুঁকির পথে পরীক্ষা প্রচেষ্টা কেন্দ্রীভূত করুন।
- নিরলসভাবে সর্বাধিক করার একটি সিলিং নয়, প্রতিগমনের বিরুদ্ধে রক্ষা করার একটি মেঝে হিসেবে কভারেজ ব্যবহার করুন।
- নির্দিষ্ট কভারেজ-কারচুপি প্যাটার্নের জন্য দেখুন: নিম্ন-মূল্যের পরীক্ষা, নিষ্ক্রিয় করা ব্যর্থ পরীক্ষা, এবং নীরবে বেড়ে ওঠা বর্জন তালিকা।
তথ্যসূত্র এবং অতিরিক্ত পাঠ
- Feathers, Michael. Working Effectively with Legacy Code. Prentice Hall, 2004.
- Jia, Yue, and Mark Harman. “An Analysis and Survey of the Development of Mutation Testing.” IEEE Transactions on Software Engineering, 2011.
- Meszaros, Gerard. xUnit Test Patterns: Refactoring Test Code. Addison-Wesley, 2007.
- Forsgren, Nicole, Jez Humble, and Gene Kim. Accelerate: The Science of Lean Software and DevOps. IT Revolution Press, 2018.