স্পেক ডেট (Spec Debt) আপনি এটি সমাধান করলেও অদৃশ্য হয়ে যায় না। এটি স্থানান্তরিত হয়।
একটি সমস্যা সমাধান করলেই তা চিরতরে শেষ হয়ে যায় না। মাঝে মাঝে, আপনি কেবল এটিকে অন্য কোথাও সরিয়ে ফেলেন।
আমি সম্প্রতি স্পেক ডেট (spec debt) খোঁজার জন্য একটি প্রজেক্ট অডিট করেছি। এগুলো হলো নির্দেশনার এমন কিছু ঘাটতি যা বাগ (bug) বা এআই-এর (AI) ভুল আচরণের কারণ হয়ে দাঁড়ায়। আমি সাতটি নির্দিষ্ট সমস্যা সমাধান করেছি। সমাধানের পর টেস্টগুলো সফল হয়েছে। সবকিছু ঠিকঠাক (green) দেখাচ্ছিল।
কিন্তু সেই ডেট বা ঋণটি অদৃশ্য হয়নি। এটি ফিচার ফাইল (feature files) থেকে স্টেপ ডেফিনিশন (step definitions)-এ স্থানান্তরিত হয়েছে।
আমি এই সমস্যাগুলো সমাধান করার মাধ্যমে যা শিখেছি তা হলো:
- নির্ভুলতা গুরুত্বপূর্ণ। "রেসপন্সটি দ্রুত" বলার পরিবর্তে বলুন "অর্ডার সাবমিট করার ১২ সেকেন্ডের মধ্যে রেসপন্সটি ফিরে আসে।" এটি সময়সীমাকে নির্দিষ্ট করে দেয়।
- অস্পষ্টতা এড়িয়ে চলুন। "২ বার পুনরায় চেষ্টা করা হয়েছে" (Retried 2 times) বিষয়টি অস্পষ্ট। এর মানে কি মোট ২ বার চেষ্টা নাকি ৩ বার? নিশ্চিত হওয়ার জন্য "মোট ২ বারের বেশি চার্জ রিকোয়েস্ট নয়" ব্যবহার করুন।
- মেকানিজম বা প্রক্রিয়াটির নাম উল্লেখ করুন। "ইনভেন্টরি রিলিজ করা হয়েছে" বলাটা অস্পষ্ট। নির্দিষ্ট করে বলুন যে "ইনভেন্টরি সার্ভিসটি item X-এর জন্য একটি রিলিজ রিকোয়েস্ট পেয়েছে।"
- ভুল নিশ্চয়তা সরিয়ে ফেলুন। যদি কোনো ফিচার এখনও না থাকার কারণে একটি স্টেপ পাস হয়, তবে সেই স্টেপটি সরিয়ে ফেলুন। অস্তিত্বহীন কোনো ফ্লো-এর জন্য পাস হওয়া টেস্ট একটি মিথ্যা।
- "সঠিক" (correct)-এর সংজ্ঞা দিন। নির্দিষ্ট ভ্যালু ছাড়া কখনো "সঠিক" বা "উপযুক্ত" (proper) শব্দ ব্যবহার করবেন না। "সঠিক আইডি আছে" বলার পরিবর্তে "contains order_id 123" ব্যবহার করুন।
আমি এই সমস্যাগুলো খুঁজে বের করার জন্য একটি ফ্রেমওয়ার্ক তৈরি করেছি। প্রতিটি সিনারিওর (scenario) জন্য এই পাঁচটি প্রশ্ন করুন:
- এই সিনারিওর মালিক কে?
- এটি কোন সিদ্ধান্তগুলো অস্পষ্ট বা উন্মুক্ত রেখে দিচ্ছে?
- এখানে কি সব টার্ম বা শব্দাবলি সংজ্ঞায়িত করা হয়েছে?
- এটি কি আচরণ (behavior) নাকি ইমপ্লিমেন্টেশন (implementation) বর্ণনা করছে?
- এই বর্ণনায় কী কী বাদ পড়েছে?
সবচেয়ে বড় ফাঁদ হলো টেক্সট এবং কোডের মধ্যকার ব্যবধান। আপনি আপনার স্পেক-এ একটি নিখুঁত এবং নির্ভুল নির্দেশনা লিখতে পারেন। কিন্তু আপনার অন্তর্নিহিত কোড যদি সেই টেস্টটি পাস করার জন্য কোনো শর্টকাট ব্যবহার করে, তবে আপনার কাছে এখনও ডেট (debt) রয়ে গেছে।
স্পেক বলছে "API-এর মাধ্যমে একটি অর্ডার তৈরি করুন।" কিন্তু কোডটি আসলে সময় বাঁচাতে সরাসরি ডাটাবেসে একটি অর্ডার ইনজেক্ট করে দিচ্ছে। টেস্টটি পাস হয়, কিন্তু ডেটটি রিকোয়ারমেন্ট থেকে ইমপ্লিমেন্টেশনে স্থানান্তরিত হয়।
প্রথমবারেই নিখুঁত স্পেক লেখার চেষ্টা করবেন না। সেগুলো লিখুন, অডিট করুন এবং সংশোধন করুন।
উৎস: https://dev.to/diyaburman/spec-debt-doesnt-disappear-when-you-fix-it-it-migrates-d25
ঐচ্ছিক লার্নিং কমিউনিটি: https://t.me/GyaanSetuAi
