লাভ:
- পরীক্ষার পিরামিড এবং কভার সীমা এবং ত্রুটির পরিস্থিতির পাশাপাশি সুখী পরিস্থিতি অনুসারে কৃত্রিম বুদ্ধিমত্তা সহ ইউনিট, ইন্টিগ্রেশন এবং UI পরীক্ষা তৈরি করার ক্ষমতা
- খালি/অপ্রয়োজনীয় পরীক্ষা এবং ফুলে যাওয়া কভারেজ বের করার ক্ষমতা যাচাই করে যে প্রতিটি পরীক্ষা আসলে একটি আচরণকে বৈধতা দেয়
- পরীক্ষায় বাগ ধরা পড়ে তা নিশ্চিত করা এবং AI-কে কোডের কী করা উচিত তা বলে বাগ সংশোধন করা থেকে বাধা দেয়
কোড লেখা অর্ধেক কাজ; প্রমাণ করা যে কোড সঠিকভাবে কাজ করে অন্য অর্ধেক। মোবাইল অ্যাপগুলি শত শত বিভিন্ন ডিভাইস, স্ক্রীনের আকার, অপারেটিং সিস্টেম সংস্করণ এবং ব্যবহারকারীর আচরণের সম্মুখীন হয়। ম্যানুয়ালি এই সব পরীক্ষা করা অসম্ভব; এই কারণেই স্বয়ংক্রিয় পরীক্ষা (কোড টেস্টিং কোড — পরীক্ষা যা মানুষের ক্লিক ছাড়াই চলে) মোবাইল মানের মেরুদণ্ড। AI পরীক্ষা লেখার ক্ষেত্রে অবিশ্বাস্যভাবে দক্ষ কারণ পরীক্ষাগুলি ঠিক সেই ধরনের প্যাটার্ন কাজ যা এটি পছন্দ করে: নির্দিষ্ট ইনপুটগুলির জন্য একটি নির্দিষ্ট আচরণ যাচাই করা। এই ইউনিটে, আমরা শিখব কিভাবে AI দিয়ে ইউনিট টেস্টিং, ইন্টারফেস টেস্টিং এবং অটোমেশনকে ত্বরান্বিত করা যায়, কিন্তু মানুষের চোখের মাধ্যমে পরীক্ষার মান নিশ্চিত করা যায়।
পরীক্ষা পিরামিড: কি পরীক্ষা এবং কত
একটি স্বাস্থ্যকর পরীক্ষার কৌশল একটি পিরামিডের অনুরূপ। বেসটিতে প্রচুর পরিমাণে ইউনিট পরীক্ষা রয়েছে (দ্রুত পরীক্ষা যা একটি একক ফাংশন বা ক্লাসকে বিচ্ছিন্নভাবে পরীক্ষা করে); তারা দ্রুত এবং সস্তা. মাঝখানে কম ইন্টিগ্রেশন টেস্টিং (একাধিক অংশ একসাথে কাজ করে কিভাবে পরীক্ষা করা হয়)। শীর্ষে রয়েছে ন্যূনতম UI/এন্ড-টু-এন্ড টেস্টিং (ব্যবহারকারীর মত স্ক্রিনে ক্লিক করে পরীক্ষা করা হয়); তারা বাস্তবসম্মত কিন্তু ধীর এবং ভঙ্গুর. AI প্রতিটি স্তরে সাহায্য করে, তবে সবচেয়ে বেশি মূল্য হল ভিত্তি: দ্রুত ব্যবসায়িক যুক্তির ইউনিট পরীক্ষা তৈরি করা।
পরীক্ষার ধরন
ব্যাপ্তি
গতি
এআই দক্ষতা
ইউনিট পরীক্ষা
একক ফাংশন/ক্লাস
খুব দ্রুত
খুব উচ্চ
ইন্টিগ্রেশন
ইন্টারলেয়ার
মাঝারি
উচ্চ
UI/এন্ড-টু-এন্ড
সমস্ত স্ক্রিন স্ট্রিম
ধীর
মাঝারি (ভঙ্গুর)
টিপ: যখন AI কে "এই ফাংশনের জন্য পরীক্ষাগুলি তৈরি করতে" বলুন, তখন স্পষ্টভাবে প্রান্তের ক্ষেত্রে জিজ্ঞাসা করুন: খালি ইনপুট, নাল, নেতিবাচক সংখ্যা, খুব বড় মান, নেটওয়ার্ক ত্রুটি৷ এআই সহজেই সুখী পথ তৈরি করে; আসল ভুলগুলি সীমানায় লুকিয়ে থাকে এবং আপনি যদি সেখানে না চান তবে ঝাঁপিয়ে পড়ে।
এআই দিয়ে পরীক্ষা লেখার ধাপ
- পরীক্ষা করার জন্য আচরণ সংজ্ঞায়িত করুন। "এই ফাংশনটি এই ইনপুটে এই আউটপুট দিতে হবে।"
- কাঠামো নির্দিষ্ট করুন। Android-এ JUnit + MockK, iOS-এ XCTest, Espresso (Android) বা UI-এর জন্য XCUITest (iOS)।
- সীমা রাজ্যের জন্য জিজ্ঞাসা করুন. শুভ দৃশ্যকল্প + ত্রুটি + ব্রেকপয়েন্ট।
- উপহাস বস্তু পরিচালনা করুন. বাহ্যিক নির্ভরতা যেমন নেটওয়ার্ক এবং ডাটাবেস পরীক্ষার জন্য অনুকরণ করা হয় (প্রকৃত পরিষেবার পরিবর্তে মক — নিয়ন্ত্রিত মক)।
- পরীক্ষা চালান এবং যাচাই করুন। পরীক্ষা পাস, এটা সত্যিই অর্থপূর্ণ কিছু নিশ্চিত করে?
পঞ্চম ধাপটি গুরুত্বপূর্ণ। এআই কখনও কখনও অকেজো পরীক্ষা তৈরি করে যা "সর্বদা পাস" হয়; উদাহরণস্বরূপ, একটি পরীক্ষা যা কিছু যাচাই করে না বা নিজের জাল ডেটা চেক করে না। একটি উত্তীর্ণ পরীক্ষা এবং একটি মূল্যবান পরীক্ষা ভিন্ন জিনিস।
সতর্কতা: শুধু এআই তৈরি করতে পারে তার মানে এই নয় যে পরীক্ষাটি সঠিক। কখনও কখনও AI কোডের বর্তমান (সম্ভবত ত্রুটিপূর্ণ) আচরণকে "সঠিক" হিসাবে গ্রহণ করে এবং সেই অনুযায়ী পরীক্ষা লেখে। এই ধরনের পরীক্ষা বাগ ধরার পরিবর্তে ঠিক করে। আপনি পরীক্ষা কি আশা করে তা নির্ধারণ করুন; AI কে বলুন এটি কী করা উচিত, কোডটি কী করে না।
পরীক্ষা কভারেজ পরিমাপ এবং ভুলভ্রান্তি
পরীক্ষার কভারেজ (কোডের কত শতাংশ পরীক্ষা দ্বারা চালিত হয়) একটি দরকারী কিন্তু বিভ্রান্তিকর মেট্রিক। 90% কভারেজ নির্দেশ করে যে কোডের 90% কার্যকর করা হয়েছে; কিন্তু এই লাইনগুলো সঠিকভাবে কাজ করছে কিনা তা যাচাই করা হয়নি। একটি পরীক্ষা যা একটি লাইন চালায় এবং ফলাফল পরীক্ষা করে না তা সুযোগ বাড়ায় কিন্তু নিরাপত্তা প্রদান করে না। লক্ষ্য উচ্চ সংখ্যা নয়, কিন্তু অর্থপূর্ণ বৈধতা. আপনি AI দিয়ে দ্রুত স্কেল করতে পারেন, তবে নিশ্চিত করুন যে প্রতিটি পরীক্ষা আসলে একটি আচরণ পরীক্ষা করে।
তিনটি মিনি কেস
কেস 1 - সীমান্ত পরিস্থিতি ধরা পড়েছে। AI কে একটি ব্যাঙ্কিং অ্যাপ্লিকেশনে অর্থ স্থানান্তর ফাংশনের জন্য পরীক্ষার জন্য বলা হয়েছিল এবং বিশেষভাবে "নেতিবাচক পরিমাণ" এবং "ব্যালেন্সের চেয়ে বেশি" পরিস্থিতি যুক্ত করা হয়েছিল। পরীক্ষায় জানা যায় যে স্থানান্তরটি নেতিবাচক পরিমাণে ব্লক করা হয়নি; এটি উৎপাদনে একটি প্রধান নিরাপত্তা দুর্বলতা হবে। একটি এক লাইন নিয়ন্ত্রণ যোগ করে বন্ধ. পাঠ: সীমানা পরীক্ষা হল সবচেয়ে মূল্যবান পরীক্ষা।
কেস 2 - জাল পরীক্ষা। একটি দল AI দ্বারা উত্পাদিত 40 ইউনিট পরীক্ষার মাধ্যমে কভারেজ 85% বৃদ্ধি করতে স্বস্তি পেয়েছে। পরিদর্শনের সময়, এটি দেখা গেছে যে বেশিরভাগ পরীক্ষাগুলি আসলে কোনও আউটপুট যাচাই করেনি, তারা কেবল ফাংশনটিকে কল করেছে এবং assertTrue(true) লিখেছে। কভারেজ বেশি ছিল কিন্তু সুরক্ষা ছিল শূন্য। পরীক্ষাগুলি ওভারহল করা হয়েছিল এবং বাস্তব বৈধতার সাথে পুনরায় লেখা হয়েছিল। পাঠ: কভারেজ নম্বর মিথ্যা হতে পারে।
কেস 3 — UI পরীক্ষা ত্বরান্বিত হয়েছে। একটি ই-কমার্স দল 20 মিনিটের মধ্যে এআই-এর সাথে অ্যাড-টু-কার্ট প্রবাহের একটি XCUITest স্ক্রিপ্ট লিখেছে; হাতে লিখলে অর্ধেক দিন লাগতো। এআই অনুমান করা স্ক্রিন উপাদান শনাক্তকারী; দলটি তাদের আসল কোডের সাথে মিলেছে এবং তাদের ঠিক করেছে। খসড়া গতি বাস্তব, কিন্তু সনাক্তকারী যাচাই মানুষের কাজ.
দুর্বল প্রম্পট / শক্তিশালী প্রম্পট
দুর্বল প্রম্পট: "এই ফাংশনের জন্য একটি পরীক্ষা লিখুন।"
শক্তিশালী প্রম্পট: "JUnit5 + MockK এর সাথে এই Kotlin ফাংশনের জন্য ইউনিট পরীক্ষা তৈরি করুন। ফাংশন: অর্থ স্থানান্তর (পরিমাণ, উত্স, লক্ষ্য)। পরীক্ষা করার আচরণ (কোডটি কী করা উচিত):- বৈধ স্থানান্তর অবশ্যই সফল হতে হবে- নেতিবাচক বা শূন্য পরিমাণ অবশ্যই প্রত্যাখ্যান করতে হবে- ব্যালেন্সের চেয়ে বেশি পরিমাণ অবশ্যই প্রত্যাখ্যান করতে হবে, শুধুমাত্র একটি সমস্যা ছাড়াই নেটওয়ার্ক পরীক্ষা করা উচিত। বর্ণনামূলক হওয়া উচিত, বাহ্যিক পরিষেবাকে উপহাস করা উচিত একটি খালি দাবি লিখবেন না।"
অনুলিপিযোগ্য টেমপ্লেট
ইউনিট পরীক্ষা টেমপ্লেট: "[ভাষার] জন্য এই ফাংশনের জন্য [JUnit/XCTest] ইউনিট পরীক্ষা তৈরি করুন। প্রত্যাশিত আচরণ: [কী করতে হবে]। অন্তর্ভুক্ত করুন: সুখী দৃশ্য, নাল ইনপুট, ব্রেকপয়েন্ট, ত্রুটির কেস। প্রতিটি পরীক্ষাকে একক আচরণ যাচাই করতে দিন; অর্থপূর্ণ দাবী ব্যবহার করুন; উপহাস। [কোড]"
UI টেস্টিং টেমপ্লেট: "[Espresso/XCUITest] এর সাথে নিম্নলিখিত প্রবাহের একটি UI পরীক্ষা লিখুন: [ব্যবহারকারীর প্রবাহ ধাপে ধাপে]। অ্যাক্সেসিবিলিটি আইডি সহ স্ক্রীন উপাদান নির্বাচন করুন, পাঠ্যের পরিবর্তে আইডি ব্যবহার করুন। অপেক্ষার কৌশল যোগ করুন। আসল কোডের সাথে উপাদান আইডি মিলাতে আমাকে মনে করিয়ে দিন।"
পরীক্ষা নিরীক্ষা টেমপ্লেট:"এই পরীক্ষাগুলি পরীক্ষা করুন: 1) তারা কি আসলেই একটি আউটপুট/আচরণ যাচাই করে নাকি তারা শূন্য? 2) তারা কি সীমা কেস কভার করে? 3) তারা কি বাগ সংশোধন করে বা সঠিক আচরণ আশা করে? দুর্বল পরীক্ষাগুলিকে পতাকাঙ্কিত এবং শক্তিশালী করে। [পরীক্ষা]"
কভারেজ অপ্টিমাইজেশান টেমপ্লেট: "এই শ্রেণীর অ-পরীক্ষিত অংশগুলি সনাক্ত করুন এবং অর্থপূর্ণ পরীক্ষার পরামর্শ দিন। শুধুমাত্র কভারেজের সংখ্যা নয়, প্রকৃত ঝুঁকি সহ পাথগুলিকে অগ্রাধিকার দিন। [কোড]"
সাধারণ ভুল
- শুধু সুখী দৃশ্যকল্প পরীক্ষা. ত্রুটি সীমা রাজ্যে সংরক্ষণ করা হয়; তাদের জন্য খোলাখুলি জিজ্ঞাসা করুন.
- একটি খালি/অকেজো পরীক্ষা গ্রহণ করা। assertTrue(true) টাইপের পরীক্ষাগুলি সুযোগ বৃদ্ধি করে এবং কোন সুরক্ষা প্রদান করে না।
- কোডটি কী করছে তা এআই যাচাই করে। পরীক্ষার কোডটি কি করা উচিত তা আশা করা উচিত; অন্যথায় এটি বাগ সংশোধন করে।
- উদ্দেশ্যে স্কোপ নম্বর ভুল করা. 90% কভারেজ মানে 90% নির্ভুলতা নয়।
- UI পরীক্ষায় পাঠ্যের সাথে লিঙ্ক করা। পাঠ্য পরিবর্তন হলে পরীক্ষাটি ভেঙে যায়; স্থিতিশীল শনাক্তকারী (আইডি) ব্যবহার করুন।
- ভুলভাবে উপহাস সেট আপ করা হচ্ছে। "ইউনিট পরীক্ষা" যা প্রকৃত পরিষেবাকে কল করে তা ধীর এবং ভঙ্গুর হবে৷
সংক্ষেপে
পরীক্ষা হল মোবাইল মানের মেরুদণ্ড, এবং AI এই ক্ষেত্রে খুব দক্ষ, বিশেষ করে ইউনিট টেস্টিংয়ে। পরীক্ষার পিরামিড অনুসরণ করুন: অনেক ইউনিট, মাঝারি একীকরণ, সামান্য UI পরীক্ষা। সুখী দৃশ্যের জন্য স্পষ্টভাবে AI কে জিজ্ঞাসা করুন সেইসাথে কেস এবং ত্রুটির পথ সীমিত করুন। নিশ্চিত করুন যে উত্পন্ন প্রতিটি পরীক্ষা আসলে একটি আচরণ বৈধ করে; খালি পরীক্ষা এবং স্ফীত কভারেজ বিভ্রান্তিকর. সবচেয়ে গুরুত্বপূর্ণভাবে, AI কে বলুন যে কোডটি কী করা উচিত, এটি কী করে তা নয়, তাই পরীক্ষাটি বাগটি ধরেছে, এটি ঠিক করে না।
আবেদন টাস্ক
একটি ব্যবসায়িক লজিক ফাংশনের জন্য "ইউনিট টেস্ট টেমপ্লেট" ব্যবহার করে AI থেকে পরীক্ষার অনুরোধ করুন (যেমন ডিসকাউন্ট গণনা বা ফর্মের বৈধতা) এবং স্পষ্টভাবে সীমা কেস (নাল, নেতিবাচক, খুব বড়) উল্লেখ করুন। জেনারেট করা পরীক্ষাগুলি চালান, তারপর একই পরীক্ষাগুলি "টেস্ট অডিট টেমপ্লেট" দিয়ে নিরীক্ষিত করুন৷ কমপক্ষে একটি দুর্বল পরীক্ষা খুঁজুন, এটিকে শক্তিশালী করুন এবং পরীক্ষাগুলি ফাংশনের একটি প্রকৃত ত্রুটি ধরছে কিনা তা পরীক্ষা করুন (একটি ছোট বাগ যোগ করে)।
চেকলিস্ট
- [ ] আমি পরীক্ষার পিরামিড (অগ্রাধিকার ইউনিট) জন্য উপযুক্ত স্তর নির্বাচন করেছি
- আমি সুখী দৃশ্যের পাশাপাশি সীমা এবং ত্রুটির ক্ষেত্রে চেয়েছিলাম
- [ ] আমি যাচাই করেছি যে প্রতিটি পরীক্ষায় একটি অর্থপূর্ণ দাবি রয়েছে৷
- [ ] আমি AI কে বলেছিলাম কোডের কি করা উচিত, এটা কি করে না
- [ ] আমি প্রকৃত ঝুঁকির পথগুলিতে ফোকাস করেছি, কভারেজের সংখ্যা নয়
- [ ] আমি UI পরীক্ষায় স্থিতিশীল শনাক্তকারী ব্যবহার করেছি, আমি পাঠ্যের সাথে আবদ্ধ হইনি