লাভ:
- AI এর সাথে ইউনিট টেস্টিং, এজ কেস এবং কভারেজ গ্যাপ বিশ্লেষণ তৈরি করার ক্ষমতা
- স্পেসিফিকেশনের উপর ভিত্তি করে পরীক্ষার প্রত্যাশা প্রিন্ট করার ক্ষমতা, কোডের বর্তমান আচরণ নয়
- একটি পরীক্ষা আসলে ইনজেকশন ত্রুটি দ্বারা রক্ষা করে কিনা তা পরীক্ষা করার ক্ষমতা
লেখার পরীক্ষাগুলি হল সবচেয়ে মূল্য-উৎপাদনকারী কাজগুলির মধ্যে একটি যা বেশিরভাগ বিকাশকারীরা বন্ধ করে দেন। একটি ভাল পরীক্ষা স্যুট প্রমাণ যে কোডটি প্রত্যাশিত হিসাবে কাজ করে এবং ভবিষ্যতের পরিবর্তনের জন্য একটি লাইফলাইন। সমস্যা হল পরীক্ষা লেখার পুনরাবৃত্তিমূলক এবং সময়সাপেক্ষ — ঠিক সেই ধরনের কাজ যেখানে AI জ্বলে। কিন্তু একটি ধরা আছে: AI প্রায়শই কোডের বিদ্যমান আচরণ পরীক্ষা করে, এটি হওয়া উচিত আচরণ নয়। এই পার্থক্য পরিচালনা করা এই ইউনিটের সারাংশ।
এই ইউনিটে, আপনি ইউনিট টেস্টিং শিখবেন (পরীক্ষা যা একটি ফাংশনকে একা পরীক্ষা করে, বিচ্ছিন্নভাবে), এজ কেস টেস্ট এবং AI দিয়ে টেস্ট ডেটা তৈরি করা; পরীক্ষা কভারেজ মধ্যে ফাঁক বন্ধ; এবং কেন এআই পরীক্ষায় অন্ধভাবে বিশ্বাস করা বিপজ্জনক।
পরীক্ষার দুটি দিক: ফিক্সিং আচরণ বনাম যাচাই
একটি পরীক্ষা দুটি ভিন্ন উদ্দেশ্য পরিবেশন করতে পারে। প্রথমটি যাচাইকরণ: এটি পরীক্ষা করে যে কোডটি সঠিক, এটি স্পেসিফিকেশন মেনে চলে। দ্বিতীয়টি হল রিগ্রেশন সুরক্ষা: এটি আজ কোডের আচরণকে হিমায়িত করে, তাই যদি কেউ ভুলবশত আগামীকাল এটি পরিবর্তন করে তবে পরীক্ষাটি ভেঙ্গে যাবে এবং বিজ্ঞপ্তি দেবে।
পরবর্তীতে এআই খুব ভালো; এটি কোডটি দেখে এবং কেস তৈরি করে যা পরীক্ষা করে "এটি এখন কী করছে।" তবে কোডটি শুরু থেকেই ভুল হলে, AI সেই ভুল আচরণটিকে "সঠিক" হিসাবে পিন করতে পারে। তাই আপনাকে অবশ্যই AI উত্পাদিত প্রতিটি পরীক্ষার দাবি পর্যালোচনা করতে হবে: "কোডটি 42 প্রদান করে এবং পরীক্ষাটি 42 আশা করে" এর অর্থ এই নয় যে 42 সঠিক উত্তর।
সতর্কতা: AI পরীক্ষায় উত্তীর্ণ হলে, এর অর্থ এই নয় যে কোডটি "কাজ করছে"; এর মানে হল "এটি AI আশানুরূপ আচরণ করে"। আপনি স্পেসিফিকেশন দেখে প্রত্যাশা সঠিক কিনা তা নির্ধারণ করুন।
ধাপে ধাপে: AI দিয়ে শক্তিশালী টেস্ট লেখা
- স্পেসিফিকেশন দিন, শুধু কোড নয়। আপনি যদি তথ্য যোগ করেন "এই ফাংশনটি এটি করা উচিত", AI সঠিক প্রত্যাশা লিখতে পারে; আপনি শুধুমাত্র কোড প্রদান করলে এটি বর্তমান আচরণ পরীক্ষা করবে।
- প্রান্ত কেস জন্য জিজ্ঞাসা করুন. খালি, শূন্য, শূন্য, নেতিবাচক, খুব বড়, খারাপ বিন্যাস, সঙ্গতি — স্পষ্টভাবে সুখী পথ বন্ধ দাবি করুন।
- পরীক্ষার কাঠামো এবং শৈলী নির্দিষ্ট করুন। "Pytest ব্যবহার করুন", "Arrange-Act-Assert pattern", "প্রতিটি পরীক্ষাকে একটি জিনিস পরীক্ষা করতে দিন" ইত্যাদি।
- প্রত্যাশা পরীক্ষা করুন (অনুমান)। প্রতিটি দাবী সঠিক মান পরীক্ষা করে যে স্পেসিফিকেশনের সাথে তুলনা করুন।
- সুযোগের ফাঁক বন্ধ করুন। বিদ্যমান পরীক্ষাগুলি দিন এবং জিজ্ঞাসা করুন "কোন শাখা এবং মামলাগুলি পরীক্ষা করা হয়নি?" আপনি জিজ্ঞাসা করুন; তারপর উত্পাদিত অতিরিক্ত পরীক্ষা যাচাই করুন.
তিনটি মিনি কেস
কেস 1 — 52% থেকে 85% পর্যন্ত কভারেজ। একটি পরিষেবা মডিউলের পরীক্ষার কভারেজ ছিল 52%। দলটি AI-কে বিদ্যমান পরীক্ষাগুলি খাওয়ায়, এটি অ-পরীক্ষিত শাখাগুলির তালিকা তৈরি করে এবং তাদের জন্য পরীক্ষা তৈরি করে। মানুষের পর্যালোচনার সাথে, কভারেজ বেড়ে 85% হয়েছে; প্রক্রিয়াটিতে, এআই একটি বাগ শাখায় একটি প্রকৃত বাগ (একটি পথ যা ভুল ত্রুটি কোড ফিরিয়ে দিয়েছে) উন্মোচন করেছে যা আগে কখনও পরীক্ষা করা হয়নি।
কেস 2 — মিথ্যা প্রত্যাশা নির্ধারণের ফাঁদ। একটি অর্থ রাউন্ডিং ফাংশন আসলে ভুল ছিল; 2.675 থেকে 2.67 রাউন্ডিং এর পরিবর্তে, এটি 2.68 এর পরিবর্তে 2.67 রাউন্ডিং ছিল। AI কোডটির দিকে তাকিয়ে লিখেছে assert round_money(2.675) == 2.67 — ত্রুটিটিকে "সত্য" হিসাবে জমা করে। বিকাশকারী যখন স্পেসিফিকেশনটি পড়েন, তখন তিনি প্রত্যাশা সংশোধন করেন এবং আসল বাগটি ধরেন। নিয়ম পরীক্ষা করা, কোড নয়, পার্থক্য তৈরি করেছে।
কেস 3 - এজ স্টেট বিস্ফোরণ। একটি তারিখ পরিসীমা ফাংশনের জন্য শুধুমাত্র "এজ কেস" এর জন্য AI জিজ্ঞাসা করার সময়; এটি 8টি কেস তৈরি করেছে যেমন স্টার্ট=এন্ড, রিভার্স ইন্টারভাল, লিপ ইয়ার 29 ফেব্রুয়ারী, বিভিন্ন সময় অঞ্চল এবং শূন্য ব্যবধান। এর মধ্যে দুটি (বিপরীত ব্যবধান এবং লিপ ইয়ার) আসলে ত্রুটির কারণ ছিল। এই ক্ষেত্রে ম্যানুয়ালি বিবেচনা করা প্রায়ই বাদ দেওয়া হয়; AI এখানে একটি "এজ-কেস ব্রেনস্টর্মিং" অংশীদার হয়ে উঠেছে।
চারটি অনুলিপিযোগ্য টেমপ্লেট
স্পেসিফিকেশন-ভিত্তিক পরীক্ষা প্রজন্ম:
ভূমিকা: একজন বিকাশকারী যিনি পরীক্ষা লেখেন। ফ্রেমওয়ার্ক: {{pytest/JUnit/Jest...}}. ফাংশনটি কী করতে হবে (নির্দিষ্টকরণ): {{rule}}নিম্নলিখিত ফাংশনের জন্য পরীক্ষা লিখুন। স্পেসিফিকেশন অনুযায়ী প্রত্যাশা লিখুন, কোডের বর্তমান আউটপুট নয়। শুভ পথ + কমপক্ষে 4টি প্রান্তের ক্ষেত্রে যোগ করুন। প্রতিটি পরীক্ষাকে একটি জিনিস পরীক্ষা করতে দিন, বর্ণনামূলক নাম ব্যবহার করুন। {{ফাংশন}}
এজ কেস ব্রেনস্টর্মিং:
এই ফাংশনের জন্য পরীক্ষা করা উচিত এমন এজ/ব্যর্থতার ক্ষেত্রে তালিকা করুন (নাল, নাল, ব্রেকপয়েন্ট, খারাপ ফর্ম্যাট, কনকারেন্সি, বাহ্যিক ত্রুটি)। প্রতিটি ক্ষেত্রে: ইনপুট, প্রত্যাশিত আচরণ। এখনও কোড লিখবেন না, শুধু তালিকা করুন।{{function}}
কভারেজ গ্যাপ বিশ্লেষণ:
নীচে ফাংশন এবং উপলব্ধ পরীক্ষা আছে. কোন শাখা, শর্ত এবং ক্ষেত্রে পরীক্ষা করা হয়নি? ঘাটতিগুলির তালিকা করুন এবং শুধুমাত্র ঘাটতির জন্য নতুন পরীক্ষা লিখুন। বিদ্যমানগুলির পুনরাবৃত্তি করবেন না। ফাংশন:{{function}}পরীক্ষা:{{existing_tests}}
টেস্ট ডেটা / মক অবজেক্ট জেনারেশন:
{{function/service}} পরীক্ষার জন্য বাস্তবসম্মত পরীক্ষার ডেটা তৈরি করুন: বৈধ নমুনা, সীমানা নমুনা এবং আলাদাভাবে অবৈধ নমুনা। বাহ্যিক নির্ভরতা {{X}} এর জন্য একটি সহজ উপহাস আচরণের পরামর্শ দিন৷ সত্য গোপনীয় ডেটা/পিআইআই ব্যবহার করা; জাল ডেটা জেনারেট করুন।
দুর্বল প্রম্পট / শক্তিশালী প্রম্পট
দুর্বল: "এই ফাংশনের জন্য একটি পরীক্ষা লিখুন।"
শক্তিশালী: "pytest-এর সাথে। ফাংশন apply_discount(total, percent) — নিয়ম: ডিসকাউন্ট অবশ্যই 0%–30% হতে হবে, সীমার বাইরে ValueError ফেলতে হবে, ফলাফল 2 দশমিকে রাউন্ড করা উচিত। এই RULE দ্বারা প্রত্যাশা লিখুন (কোড দ্বারা নয়)। সুখী পথ + এই প্রান্তের ক্ষেত্রে: 0%, 0% = 0%, মোট ত্রুটি, 0%, 0% =। [কোড]"
তিনি দৃঢ় মুক্তির নিয়ম দেন এবং বলেন "নিয়ম অনুযায়ী প্রত্যাশা লিখুন, কোড নয়"; এই একক বাক্যটি এআই ফিক্সিং খারাপ আচরণের ফাঁদ বন্ধ করে দেয়।
পরীক্ষার ধরন
এআই অবদান
মানুষের নিয়ন্ত্রণ
শুভ রাস্তা ইউনিট পরীক্ষা
দ্রুত কঙ্কাল
প্রত্যাশা কি সঠিক?
প্রান্ত মামলা
ব্যাপক বুদ্ধিমত্তা
অপ্রাসঙ্গিক দূর করুন
সুযোগ ফাঁক পূরণ
এড়িয়ে যাওয়া শাখা খুঁজে পায়
তাৎপর্য নিশ্চিত করুন
টেস্ট ডেটা/মক
বাস্তবসম্মত নমুনা উত্পাদন করে
PII নেই, বাস্তবতা নিয়ন্ত্রণ
পরীক্ষা গুণমান পরিচালনা করে, গ্যারান্টি দেয় না
উচ্চ পরীক্ষার কভারেজ আত্মবিশ্বাস দেয়, কিন্তু এটি বিভ্রান্তিকরও হতে পারে: 100 শতাংশ কভারেজ মানে "প্রতিটি লাইন চালানো হয়েছে," নয় "প্রতিটি লাইন সঠিক।" AI দিয়ে কভারেজ বাড়ানো সহজ; প্রকৃত মূল্য অর্থপূর্ণ প্রত্যাশা লিখতে হয়. একটি পরীক্ষার মান হল কোডটি ভেঙে গেলে আপনাকে সতর্ক করে দেওয়ার ক্ষমতা। এ কারণেই এআই-উত্পন্ন পরীক্ষাগুলি "কোড পরিবর্তন করার সময় কি সত্যিই ভেঙে যায়?" প্রশ্নের উপর ভিত্তি করে তৈরি করা হয়। প্রশ্ন দিয়ে পরীক্ষা করুন; ইচ্ছাকৃতভাবে একটি লাইন ভাঙা এবং পরীক্ষার বিরতি (মিউটেশন ধারণা) দেখা প্রমাণ যে পরীক্ষাটি কাজ করেছে।
টিপ: AI লিখিত পরীক্ষাটি কাজ করে কিনা তা দেখতে, কোডে একটি ছোট বাগ তৈরি করুন (যেমন a + থেকে a - পরিবর্তন করুন) এবং পরীক্ষাটি ভেঙে যায় কিনা দেখুন। যদি এটি ভেঙ্গে না যায়, তবে সেই পরীক্ষা আপনাকে রক্ষা করে না।
সাধারণ ভুল
- নিয়ম না দিয়ে পরীক্ষা দিতে বলছে। মডেল বর্তমান আচরণ জমা; ত্রুটিটিকে "সত্য" হিসাবে সংশোধন করে।
- সেগুলি না পড়ে প্রত্যাশা গ্রহণ করা। যদি আপনি চেক না করেন যে দাবীগুলি সঠিক মান পরীক্ষা করছে তবে পরীক্ষাটি বিভ্রান্তিকর।
- শুধু সুখী পথ পরীক্ষা. বাস্তব ত্রুটি মার্জিনে বাস; স্পষ্টভাবে প্রান্ত কেস জন্য জিজ্ঞাসা করুন.
- উদ্দেশ্য জন্য সুযোগ ভুল করা. একটি উচ্চ শতাংশ সঠিক আচরণের কোন গ্যারান্টি নয়।
- পরীক্ষার ডেটা হিসাবে বাস্তব/লুকানো ডেটা তৈরি করা। গ্রাহকের তথ্য বা গোপনীয়তা পরীক্ষা এবং স্টোরেজ প্রবেশ করা উচিত নয়; সিন্থেটিক ডেটা তৈরি করুন।
সংক্ষেপে
AI লিখিত পরীক্ষার অনেক পুনরাবৃত্তিমূলক বোঝা নিয়ে যায়: এটি দ্রুত কঙ্কাল, প্রান্তের ক্ষেত্রের বড় তালিকা এবং কভারেজ গ্যাপ বিশ্লেষণ তৈরি করে। কিন্তু সবচেয়ে গুরুত্বপূর্ণ বিষয় হল প্রত্যাশা: AI কোডের বর্তমান আচরণ পরীক্ষা করে, যেখানে টেস্টিং স্পেসিফিকেশন অনুযায়ী লেখা উচিত। নিয়ম দিন, প্রত্যাশাগুলি পরীক্ষা করুন, প্রান্তের ক্ষেত্রে প্রয়োগ করুন এবং পরীক্ষাগুলি আসলে একটি বাগ ইনজেকশনের মাধ্যমে রক্ষা করে কিনা তা পরীক্ষা করুন৷ টেস্ট কভারেজ একটি হাতিয়ার, লক্ষ্য নয়।
আবেদন টাস্ক
একটি ফাংশন নির্বাচন করুন এবং প্রথমে AI এর কোড দিয়ে একটি পরীক্ষা প্রিন্ট করুন; প্রত্যাশা নোট করুন. তারপর একই ফাংশনের জন্য স্পেসিফিকেশন (প্রয়োজনীয় আচরণ) প্রদান করে আবার পরীক্ষাটি প্রিন্ট করুন। দুটি পরীক্ষা সেটের প্রত্যাশার তুলনা করুন: সেখানে কি কোন পার্থক্য আছে, কোনটি একটি বাস্তব বাগ প্রকাশ করে? অবশেষে, কোডে একটি ইচ্ছাকৃত বাগ যোগ করে এবং পরীক্ষার বিরতি দেখে জেনারেট করা পরীক্ষাগুলির মধ্যে একটি কাজ করেছে তা যাচাই করুন।
চেকলিস্ট
- [ ] আমি পার্থক্য করি যে পরীক্ষাটি আচরণ ঠিক করা বা যাচাই করার জন্য।
- [ ] যখন আমি একটি পরীক্ষার অনুরোধ করি, তখন আমি নিয়ম (স্পেসিফিকেশন) দিই যা কোড নয়, জায়গায় থাকা উচিত।
- [ ] আমি স্পেসিফিকেশনের সাথে প্রতিটি উত্পন্ন দাবির তুলনা করি৷
- [ ] আমি স্পষ্টভাবে প্রান্ত এবং ব্যর্থতার ক্ষেত্রে অনুরোধ করছি৷
- [ ] আমি শতাংশ কভারেজকে একটি হাতিয়ার হিসেবে দেখি, লক্ষ্য নয়।
- [ ] আমি পরীক্ষা করি যে একটি পরীক্ষা আসলে ত্রুটিগুলি ইনজেকশনের মাধ্যমে রক্ষা করে কিনা।