بدهی مشخصات (Spec Debt) با اصلاح شدن ناپدید نمی‌شود؛ بلکه جابه‌جا می‌شود.

حل یک مشکل همیشه به معنای ریشه‌کن کردن آن نیست. گاهی اوقات، شما فقط آن را به جای دیگری منتقل می‌کنید.

اخیراً پروژه‌ای را برای یافتن بدهی مشخصات (spec debt) بازرسی کردم. این‌ها شکاف‌هایی در دستورالعمل‌ها هستند که منجر به باگ یا رفتار نادرست هوش مصنوعی می‌شوند. من هفت مورد خاص را اصلاح کردم. پس از اصلاحات، تست‌ها با موفقیت انجام شدند. همه چیز سبز (pass) به نظر می‌رسید.

اما بدهی ناپدید نشد. بلکه از فایل‌های ویژگی (feature files) به تعاریف مراحل (step definitions) منتقل شد.

در اینجا آنچه از اصلاح این موارد آموختم آورده شده است:

  • دقت اهمیت دارد. به جای گفتن «پاسخ سریع است»، بگویید «پاسخ ظرف ۱۲ ثانیه پس از ثبت سفارش بازگردانده می‌شود». این کار زمان‌بندی را تثبیت می‌کند.
  • از ابهام بپرهیزید. عبارت «۲ بار تلاش مجدد انجام شد» نامشخص است. آیا منظور ۲ تلاش کل است یا ۳ تلاش؟ برای اطمینان از عبارت «در مجموع نه بیشتر از ۲ درخواست شارژ» استفاده کنید.
  • مکانیزم را نام ببرید. گفتن اینکه «موجودی آزاد می‌شود» مبهم است. مشخص کنید که «سرویس موجودی (inventory service)، یک درخواست آزادسازی برای کالای X دریافت می‌کند».
  • تضمین‌های کاذب را حذف کنید. اگر مرحله‌ای به این دلیل پاس می‌شود که آن ویژگی هنوز وجود ندارد، آن مرحله را حذف کنید. پاس شدن تستی برای یک جریان (flow) که وجود خارجی ندارد، یک دروغ است.
  • «درست بودن» را تعریف کنید. هرگز از کلماتی مانند «درست» یا «مناسب» بدون مقادیر مشخص استفاده نکنید. به جای «شامل شناسه درست است»، از «شامل order_id 123 است» استفاده کنید.

من چارچوبی برای یافتن این مشکلات ساخته‌ام. برای هر سناریو این پنج سوال را بپرسید:

  • مالک این سناریو کیست؟
  • این سناریو چه تصمیماتی را باز (بدون تعیین) باقی می‌گذارد؟
  • آیا تمام اصطلاحات در اینجا تعریف شده‌اند؟
  • آیا این توصیف‌کننده رفتار است یا پیاده‌سازی؟
  • چه چیزی در این توصیف کم است؟

بزرگترین تله، شکاف بین متن و کد است. شما می‌توانید یک دستورالعمل بی‌نقص و دقیق در مشخصات خود بنویسید. اما اگر کد زیرساختی شما برای پاس کردن آن تست از یک میان‌بر استفاده کند، همچنان با بدهی مواجه هستید.

در مشخصات آمده است: «یک سفارش از طریق API ایجاد کنید». اما در واقع کد برای صرفه‌جویی در زمان، فقط یک سفارش را مستقیماً در پایگاه داده تزریق (inject) می‌کند. تست پاس می‌شود، اما بدهی از بخش الزامات به بخش پیاده‌سازی منتقل شده است.

سعی نکنید در اولین تلاش، مشخصات بی‌نقصی بنویسید. آن‌ها را بنویسید، بازرسی کنید و اصلاح کنید.

Source: https://dev.to/diyaburman/spec-debt-doesnt-disappear-when-you-fix-it-it-migrates-d25

Optional learning community: https://t.me/GyaanSetuAi