প্রতিটি টেস্ট পাস হয়েছে। তবুও ব্যবহারকারী গেমটি খেলতে পারলেন না
"API 200 OK রিটার্ন করছে!"
আমি আমার প্রথম ইঞ্জিনিয়ারিং চাকরিতে থাকাকালীন একটি বড় সমস্যা দেখেছিলাম। আমার সিনিয়ররা ড্যাশবোর্ড পছন্দ করতেন। তারা উচ্চ কোড কভারেজ (code coverage) পছন্দ করতেন। তারা ভাবতেন যে টেস্টগুলো যদি গ্রিন (green) হয়, তবে প্রোডাক্টটি কাজ করছে।
তারা ভুল ছিলেন।
কোড কাজ করা এবং একজন মানুষ তার প্রয়োজনীয় জিনিসটি পাওয়া—এই দুটি সম্পূর্ণ আলাদা বিষয়। একটি বাটন সফলতার কোড (success code) রিটার্ন করতে পারে, অথচ ব্যবহারকারীকে একটি ত্রুটিপূর্ণ স্ক্রিনে আটকে রাখতে পারে।
আমি অ্যাপটি না চালিয়েই এই ধরণের UX dead-ends খুঁজে বের করার একটি উপায় তৈরি করেছি। আমি একে বলি 'two-agent static walkthrough'। এটি লুপে কথা বলা দুটি AI এজেন্ট ব্যবহার করে।
- এজেন্ট A হলো ব্যবহারকারী। এই এজেন্টের একটি নির্দিষ্ট লক্ষ্য আছে। এটি জেদি। এটি একটি ভুলের পর হাল ছাড়ে না। এটি বিভিন্ন পথ চেষ্টা করতে থাকে।
- এজেন্ট B হলো অ্যাপ। এর কাছে আসল সোর্স কোড পড়ার অ্যাক্সেস আছে। এটি প্রতিটি ইউজার অ্যাকশনের কোড পাথ (code path) অনুসরণ করে। কোডটি ঠিক কী করছে তা এটি রিপোর্ট করে। এটি ফাইল এবং লাইন নম্বর উল্লেখ করে। কোডে যা নেই, তা এটি কল্পনা করতে পারে না।
আমি একটি ত্রুটিপূর্ণ AI মিনি-গেম জেনারেটরের ওপর এটি পরীক্ষা করেছি। যা ঘটেছিল তা নিচে দেওয়া হলো:
টার্ন ১: বাটনটি ব্যর্থ হয়েছে। ব্যবহারকারী "Generate" ক্লিক করেছেন। কোডটি নতুন এন্ডপয়েন্টের পরিবর্তে একটি পুরনো, মৃত এন্ডপয়েন্টে রিকোয়েস্ট পাঠিয়েছিল। টেস্টগুলো পাস হয়েছিল কারণ পুরনো API তখনও কাজ করছিল।
টার্ন ২: ক্লিক করা যায় না এমন শূন্যতা। ব্যবহারকারী রেজাল্টে ক্লিক করার চেষ্টা করেছিলেন। কোডটি টেক্সটটিকে একটি সাধারণ বক্সের মধ্যে রেখেছিল যেখানে কোনো ক্লিক হ্যান্ডলার (click handler) ছিল না। কিছুই ঘটেনি।
টার্ন ৩: মিথ্যা আশীর্বাদ। ব্যবহারকারী ত্রুটিটি ঠিক করার চেষ্টা করেছিলেন। একটি মিসিং ID-র কারণে ব্যাকএন্ড ব্যর্থ হয়েছিল। সিস্টেমটি অচল হয়ে গেলেও স্ক্রিনে একটি সবুজ সাকসেস মেসেজ দেখাচ্ছিল।
টার্ন ৪: অপূর্ণ আশা। ব্যবহারকারী ম্যানুয়ালি কোডটি কপি করার চেষ্টা করেছিলেন। API টেক্সটটিকে মাঝপথে কেটে ফেলেছিল। কোডটি ভেঙে গিয়েছিল।
ব্যবহারকারী হাল ছেড়ে চলে গেলেন।
বেশিরভাগ ইউনিট টেস্ট কেবল একটি এন্ডপয়েন্ট 200 রিটার্ন করছে কি না তা পরীক্ষা করে। ব্যবহারকারী আসলে তার লক্ষ্যে পৌঁছাতে পারছেন কি না, তা তারা পরীক্ষা করে না।
এটি কীভাবে ব্যবহার করবেন:
- ইউজার এজেন্টকে জেদি করে তুলুন। আসল বাগগুলো প্রথম ভুলের আড়ালে লুকিয়ে থাকে।
- অ্যাপ এজেন্টকে আসল কোডের ওপর ভিত্তি করে তৈরি করুন। এটি রোল-প্লে-কে একটি প্রকৃত বাগ রিপোর্টে রূপান্তরিত করে।
- আপনার টেস্টগুলোর পরিপূরক হিসেবে এটি ব্যবহার করুন। এটি সেই ফাঁকগুলো খুঁজে বের করে যেখানে আপনার লজিক বাস্তবের মুখোমুখি হয়।
এই পদ্ধতিটি স্ট্যাটিক এবং সাশ্রয়ী। এমনকি একটি টেস্ট ফিক্সচার (test fixture) লেখার আগেই এটি চালানো যায়। এটি "কোড কাজ করছে" থেকে "ব্যবহারকারী সফল হচ্ছেন" এ রূপান্তরিত করে।
উৎস: https://dev.to/terum/every-test-passed-the-user-still-couldnt-play-the-game-388o
ঐচ্ছিক লার্নিং কমিউনিটি: https://t.me/GyaanSetuAi
