টেস্ট জেনারেশনের জন্য AI: যেখানে এটি সাহায্য করে এবং যেখানে এটি বিভ্রান্ত করে

AI দ্রুত টেস্ট লিখতে পারে। এটি এমন টেস্টও লিখে যা দেখতে আসল মনে হয় কিন্তু ভুল জিনিস যাচাই করে। আপনি হয়তো আপনার কোড কভারেজ বাড়তে দেখবেন, কিন্তু আপনার কোডটি ত্রুটিপূর্ণই থেকে যাবে।

AI নির্দিষ্ট কিছু কাজের জন্য দারুণ। এটি ব্যবহার করুন:

  • একটি ভালো উদাহরণ থেকে ধারণা নেওয়া। আপনি যদি একটি নিখুঁত টেস্ট লেখেন, তবে AI আপনার হুবহু স্টাইলে আরও দশটি লিখতে পারে।
  • একই ধরণের টাইপিংয়ের কাজ সামলানো। এটি setup blocks, teardown এবং factory helpers-এর জন্য ব্যবহার করুন।
  • প্রাথমিক স্কাফোল্ডিং (scaffolding) তৈরি করা। একটি খালি ফাইলের চেয়ে এটি আপনাকে দ্রুত এডিটরে নিয়ে যাবে।

বিপদ তখনই শুরু হয় যখন আপনি AI-কে "কন্ট্রাক্ট" (contract) নির্ধারণ করতে দেন।

আপনি যদি AI-কে একটি ফাংশন দেন এবং টেস্ট করতে বলেন, তবে এটি কোডটি পড়ে এবং কোডটি বর্তমানে যা করছে তা-ই টেস্ট করে। এটি কোডটি যা করা উচিত তা টেস্ট করে না। এটি একটি বদ্ধ লুপ (closed loop) তৈরি করে। AI একটি ধারণা করে নেয়, কোড লেখে এবং তারপর সেই একই ধারণার সাথে মিলে যায় এমন টেস্ট লেখে।

যখন প্রোডাকশনে বাগ (bug) আসে, তখন তা আসে কারণ টেস্ট স্যুটটি বাগের পক্ষেই ছিল।

এই তিনটি ফাঁদ থেকে সাবধান থাকুন:

  1. ইমপ্লিমেন্টেশন-নির্ভর টেস্ট (Implementation-shaped tests) AI প্রায়ই বিজনেস রুলসের পরিবর্তে লজিক পাথগুলো টেস্ট করে। আপনি যদি একটি ছোট অভ্যন্তরীণ পরিবর্তন করেন, তবে ফলাফল সঠিক হওয়া সত্ত্বেও টেস্টগুলো ভেঙে যায়। এটি রিফ্যাক্টরিং (refactoring)-কে দুঃস্বপ্নে পরিণত করে।

  2. অগভীর এজ কেস (Shallow edge cases) AI null, empty string এবং শূন্য (zero) টেস্ট করতে দক্ষ। এগুলো খুবই সাধারণ। এটি "ডোমেইন এজ" (domain edges) খুঁজে পেতে পারে না। এটি আপনার নির্দিষ্ট টাইমজোন বাগ, ডাটাবেস সংক্রান্ত জটিলতা বা আপনার অনন্য বিজনেস রুলস সম্পর্কে জানে না।

  3. ভঙ্গুর মক (Brittle mocks) AI সবকিছু মক (mock) করতে পছন্দ করে। এটি দুটি সমস্যার সৃষ্টি করে:

  • মকটি ভুল। এটি একটি API-এর নকল সংস্করণ তৈরি করে যা বাস্তবতার সাথে মেলে না।
  • মকটি ইমপ্লিমেন্টেশনকে আটকে দেয়। এটি চূড়ান্ত ফলাফলের পরিবর্তে আপনার কোড কীভাবে অন্যান্য ফাংশন কল করছে তা টেস্ট করে।

AI সঠিকভাবে ব্যবহার করার উপায়:

"উদ্দেশ্য" বা "intent"-কে AI-এর নাগালের বাইরে রাখুন।

  • প্রথমে কন্ট্রাক্ট লিখুন। প্রতিটি টেস্টের জন্য সাধারণ ইংরেজিতে একটি বাক্য লিখুন। উদাহরণস্বরূপ: "Expired codes must return the original amount।"
  • সেই বাক্যগুলো AI-কে দিন। এটিকে অ্যাসারশন (assertions) লিখতে দিন, কিন্তু অর্থ বা মানে আপনি প্রদান করুন।
  • বাউন্ডারিতে মক করুন। শুধুমাত্র এক্সটার্নাল API বা ডাটাবেস মক করুন। আপনার নিজস্ব ইন্টারনাল মডিউলগুলোর আসল সংস্করণ ব্যবহার করুন।
  • একটি ডোমেইন এজ কেস হাতে লিখুন। প্রতিবার যখন আপনি একটি ফাংশন শেষ করবেন, তখন যে বিষয়টি আপনাকে চিন্তিত করে তা লিখে রাখুন। এটিকে AI-এর জন্য প্রম্পট হিসেবে ব্যবহার করুন।

AI একটি প্রোডাক্টিভিটি টুল, চিন্তাশক্তির বিকল্প নয়। টেস্টের বডি লেখার জন্য এটি ব্যবহার করুন, কিন্তু টেস্টটি কীসের জন্য তা নির্ধারণ করতে কখনোই একে ছেড়ে দেবেন না।

উৎস: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm

ঐচ্ছিক লার্নিং কমিউনিটি: https://t.me/GyaanSetuAi