একটি AI এজেন্ট আপনার কফি শেষ করার সময়ের মধ্যেই একটি সম্পূর্ণ ফিচার ব্রাঞ্চ তৈরি করে দিতে পারে। একটি সুপরিকল্পিত প্রম্পটের পর হাজার হাজার লাইন কোড চলে আসে। এই গতি একটি মৌলিক সত্যকে পরিবর্তন করে না: আপনার রিপোজিটরিতে প্রবেশ করা কোডের জন্য এখনও মানুষের বিচারবুদ্ধির প্রয়োজন। রিভিউ কোনো পলিশ করার ধাপ নয়। এটি কার্যকর সফটওয়্যার এবং নিঃশব্দে বাড়তে থাকা টেকনিক্যাল ডেটের (technical debt) মধ্যে একটি দেয়াল।
কাজের ধরন বদলে গেছে। আমরা আগে এডিটরে লাইন বাই লাইন লজিক টাইপ করতে মানসিক শক্তি ব্যয় করতাম। এখন সেই কগনিটিভ লোড (cognitive load) স্থানান্তরিত হয়েছে। এখন কোড লেখা আর কঠিন কাজ নয়। আসল কাজ হলো সেটি পড়া, প্রশ্ন করা এবং এটি আপনার সিস্টেমে সত্যিই মানানসই কি না তা সিদ্ধান্ত নেওয়া।
এই পরিবর্তনের জন্য কোড রিভিউতে একটি ভিন্ন দৃষ্টিভঙ্গি প্রয়োজন। দলগুলো কীভাবে মানিয়ে নিতে পারে তা নিচে দেওয়া হলো।
অন্য কেউ দেখার আগেই কোডের দায়িত্ব নিন
আপনাকে AI-জেনারেটেড কোড এমনভাবে রিভিউ করতে হবে যেন কোনো অপরিচিত ব্যক্তি আপনার ব্রাঞ্চে কোডটি পুশ করেছে। এই পার্থক্যটি গুরুত্বপূর্ণ। যখন আপনি প্রতিটি লাইন হাতে লিখতেন, তখন আপনি স্বাভাবিকভাবেই প্রেক্ষাপট বা কনটেক্সটটি জানতেন। আপনি জানতেন কেন সেই লুপটি শূন্যের পরিবর্তে এক থেকে শুরু হয়েছে। এখন আপনি অনেকটা একজন টেক লিডের মতো, যিনি একজন অতি-উৎসাহী কন্ট্রাক্টরকে গাইড করছেন, যে অবিশ্বাস্য দ্রুত কাজ করে কিন্তু কখনও কোনো স্পষ্টীকরণ প্রশ্ন করে না।
এটি সেলফ-রিভিউকে আপনার প্রক্রিয়ার সবচেয়ে গুরুত্বপূর্ণ ধাপ হিসেবে তৈরি করে। এমনকি একটি পুল রিকোয়েস্ট (pull request) তৈরি করার আগেই, একটু থেমে কঠিন কিছু প্রশ্ন করুন।
কোডটি কি আপনার আর্কিটেকচার মেনে চলছে? জেনারেটেড কোড প্রায়শই ট্রেনিং ডেটা থেকে এমন প্যাটার্ন ইমপোর্ট করে যা আপনার কনভেনশনের সাথে মেলে না। আপনার টিম যদি লজিকটি মনোলিথে (monolith) রাখার সিদ্ধান্ত নিয়ে থাকে, তবুও এটি একটি নতুন সার্ভিস তৈরি করে ফেলতে পারে, অথবা এটি আপনার ইন্টারনাল লগিং স্ট্যান্ডার্ড উপেক্ষা করে সাধারণ প্রিন্ট স্টেটমেন্ট ব্যবহার করতে পারে।
এটি কি সঠিক সমস্যাটি সমাধান করছে? AI মডেলগুলো প্রম্পট শেষ করার জন্য অপ্টিমাইজ করা থাকে, টিকিটের এজ কেসগুলো (edge cases) বোঝার জন্য নয়। যদি আপনার ইস্যুটিতে আংশিক রিফান্ড (partial refund) হ্যান্ডেল করার কথা বলা থাকে, তবে জেনারেটেড কোডটি শুধুমাত্র 'হ্যাপি পাথ' (happy path) কভার করতে পারে এবং রিকনসিলিয়েশন ফেইলর বা সমন্বয়জনিত ব্যর্থতাকে ব্যবহারকারীর জন্য ফেলে রাখতে পারে।
একই কাজ কি কম কোড দিয়ে করা সম্ভব? AI সাধারণত অতিরিক্ত কোড লেখার (verbosity) প্রবণতা দেখায়। এটি এমন সব ডিফেন্সিভ র্যাপার (defensive wrappers), অপ্রয়োজনীয় কমেন্ট এবং জটিল এরর হ্যান্ডলিং লেখে যা আসল লজিককে আড়াল করে ফেলে। এমন মেথড খুঁজুন যা কাঠামো পুনরাবৃত্তি করে, এমন ইমপোর্ট যা কোনো কাজে আসে না, বা এমন ভেরিয়েবল যা কখনও পরিবর্তিত হয় না। অপ্রয়োজনীয় অংশগুলো বাদ দিন। আপনি যদি এজেন্টকে সিম্পলিফাই এবং রিফ্যাক্টর (refactor) করতে বলেন, তবে আপনি এটি কীভাবে পরিচালনা করতে হয় তাও শিখবেন। আপনি আবিষ্কার করবেন কোন সীমাবদ্ধতাগুলো অপ্রয়োজনীয়তা দূর করে। এই ধাপে ধাপে আরও নিখুঁত করার প্রক্রিয়াটি এখন আপনার কাজের অংশ। পুল রিকোয়েস্টের ওপর আপনার নাম লেখা আছে। প্রতিটি লাইনের জন্য আপনিই দায়ী।
মেশিনকে স্ক্যান করতে দিন, কিন্তু নিজের মস্তিষ্ক সচল রাখুন
অটোমেটেড রিভিউ টুলগুলো আপনার CI পাইপলাইনে থাকা উচিত। আধুনিক AI-চালিত রিভিউয়াররা ইনজেকশন ভালনারেবিলিটির (injection vulnerabilities) মতো সিকিউরিটি রিস্ক চিহ্নিত করতে পারে, আনহ্যান্ডেলড এজ কেসগুলো ধরতে পারে এবং প্রোডাকশনে যাওয়ার আগেই পুরনো ডিপেন্ডেন্সিগুলো (stale dependencies) শনাক্ত করতে পারে। এগুলো খুব সহজেই স্কেল করা যায় এবং এগুলো ক্লান্ত হয় না।
এগুলো ব্যবহার করুন। কিন্তু এদের পূজা করবেন না।
এই টুলগুলোর বিজনেস কনটেক্সট বা ব্যবসায়িক প্রেক্ষাপটের অভাব রয়েছে। একটি অটোমেটেড রিভিউয়ার একটি ডাটাবেস কুয়েরিকে ঝুঁকিপূর্ণ হিসেবে চিহ্নিত করতে পারে কারণ এটি স্ট্রিং কনক্যাটেনেশন (string concatenation) ব্যবহার করছে, অথচ সে জানে না যে আপনার মিডলওয়্যার ইতিমধ্যে অন্য একটি লেয়ারে স্যানিটাইজেশন (sanitization) সম্পন্ন করেছে। এটি একটি কাস্টম অ্যালগরিদমকে লাইব্রেরি কলে রূপান্তর করার পরামর্শ দিতে পারে, কিন্তু এটি জানে না যে আপনি যে লাইব্রেরি ভার্সনটি ব্যবহার করছেন তাতে একটি ব্রেকিং চেঞ্জ (breaking change) রয়েছে। এই পরামর্শগুলো মূলত প্যাটার্নের ওপর ভিত্তি করে কিছু অনুমান মাত্র, আপনার প্রোডাক্ট সম্পর্কে কোনো বাস্তব জ্ঞান নয়।
সর্বদা ফিডব্যাকটি মনোযোগ দিয়ে পড়ুন, তারপর সিদ্ধান্ত নিন। অটোমেটেড কমেন্টগুলোকে সংকেত হিসেবে বিবেচনা করুন, আদেশ হিসেবে নয়।
এছাড়াও একটি ব্যবহারিক
