فاز 14 · درس 51

نوشتن مشخصات فنی بدون سلب قدرت قضاوت از ایجنت

نوع
مفهومی و ساختنی
زمان
حدود 75 دقیقه
زبان‌ها
Python (stdlib)
طرح شماتیک یک میز کار مهندسی که روی آن حصارهای مرزی شفاف و قفل‌های مکانیکی متصل به بلوک‌های ساختاری چیده شده‌اند
فهرست مطالب
  1. اهداف یادگیری
  2. دو سر طیف نامطلوب
  3. سه حالت تصمیم‌گیری
  4. مشخص‌کردن رفتار از طریق نمونه‌ها
  5. تناسب شواهد با ادعا
  6. حفظ آگاهانه‌ی نادانسته‌ها
  7. پیاده‌سازی
  8. تمرین‌ها
  9. برای مطالعه‌ی بیشتر
  10. چه چیزی برایتان می‌ماند

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

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

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

اهداف یادگیری

  • تفکیک خروجی، پایدارها، نمونه‌ها، اهداف نامربوط و اثبات.
  • دسته‌بندی تصمیم‌ها به حالت‌های قفل‌شده، محدودشده یا واگذارشده.
  • حفظ قدرت تصمیم‌گیری ایجنت در مواردی که انتخاب‌ها کم‌هزینه و بازگشت‌پذیرند.
  • الزام چک‌پوینت‌های انسانی در صورت تغییر رفتارهای عمومی سیستم یا پیامدها.

دو سر طیف نامطلوب

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

نقطه‌ی تعادل کارآمد، یک قرارداد اجرایی است:

سطح قرارداد هدف
خروجی (Outcome) نتیجه‌ی قابل‌مشاهده
پایدارها (Invariants) شرط‌هایی که همیشه باید برقرار بمانند
نمونه‌ها (Examples) حالت‌های ملموس برای شفاف‌کردن نیت
اهداف نامربوط (Non-goals) رفتارهای هم‌جواری که عمداً کنار گذاشته شده‌اند
سیاست تصمیم‌گیری (Decision policy) تعیین نوع تصمیم‌ها: قفل‌شده، محدودشده یا واگذارشده
اثبات (Proof) شواهد لازم پیش از اعلام اتمام کار

سه حالت تصمیم‌گیری

  • قفل‌شده (Locked): ایجنت حق انتخاب ندارد. این حالت را برای سازگاری عمومی، اختیارات، امنیت، هزینه‌های بازگشت‌ناپذیر یا تعهدات محصول به کار ببرید.
  • محدودشده (Bounded): ایجنت فقط در چارچوب محدودیت‌های صریح حق انتخاب دارد. این حالت را برای سقف بودجه‌ی جست‌وجو، تعداد تلاش‌های مجدد، وابستگی‌های مجاز یا مجموعه‌ای مشخص از رابط‌ها به کار ببرید.
  • واگذارشده (Delegated): تصمیم‌گیری کاملاً بر عهده‌ی ایجنت است و باید دلیل انتخابش را توضیح دهد. این حالت را برای ساختار محلی کد، نام‌گذاری‌ها، بازآرایی‌های بازگشت‌پذیر و جزئیات پیاده‌سازی به کار ببرید.
پیامد بالامحدوده امن شناخته‌شدهکم‌هزینه و برگشت‌پذیرتصمیم‌گیریپیامد و برگشت‌پذیریقفل‌شدهمحدودشدهواگذارشدهچک‌پوینت انسانیایجنت در چارچوب حدود پیشنهاد می‌دهدایجنت پیاده‌سازی و اثبات می‌کند

مشخص‌کردن رفتار از طریق نمونه‌ها

نمونه‌ها نیت را بسیار بهتر از صفت‌ها فشرده و منتقل می‌کنند. واژه‌هایی مثل «مفید»، «مقاوم» و «آماده‌ی محیط پروداکشن» جنبه‌ی اجرایی ندارند. ارائه‌ی مجموعه‌ی کوچکی از نمونه‌های عادی، مرزی، شکست و ممنوع، مبنایی ملموس در اختیار سازنده و مدل اعتبارسنج می‌گذارد.

البته نمونه‌ها جایگزین پایدارها نمی‌شوند؛ موفقیت در یک سناریو هرگز نمی‌تواند یک قاعده‌ی ایمنی کلی را اثبات کند.

تناسب شواهد با ادعا

  • تست واحد (Unit test) قرارداد یک تابع محلی را اثبات می‌کند.
  • تست سیم (Wire test) رفتار سریال‌سازی و بستر انتقال را اثبات می‌کند.
  • مسیر مرورگر (Browser journey) مسیر تعامل با رابط کاربری را اثبات می‌کند.
  • مجموعه‌ی بازپخش (Replay set) رفتار سیستم را در نمونه‌های شاخص نشان می‌دهد.
  • لاگ بازرسی (Audit log) اثبات می‌کند که مرزهای اختیارات حفظ شده‌اند.

هرگز شواهد لایه‌های پایین‌تر را به‌عنوان اثبات ادعاهای لایه‌های بالاتر قبول نکنید.

حفظ آگاهانه‌ی نادانسته‌ها

اگر در مشخصات فنی بنویسید «پیاده‌سازی می‌تواند از هر منبع فقط‌خواندنی که در سقف زمانی پاسخ دهد استفاده کند»، این کار ابهام نیست؛ بلکه یک تصمیم واگذارشده‌ی آگاهانه است که مرز و روش اثبات مشخصی دارد.

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

پیاده‌سازی

این آزمایشگاه تک‌تک سطوح قرارداد را اعتبارسنجی می‌کند، حالت‌های تصمیم‌گیری را می‌سنجد و فایل outputs/executable-specification.json را خروجی می‌دهد.

python3 code/main.py
python3 -m unittest discover code/tests -v

تصمیم نوشتن روی پروداکشن را از حالت قفل‌شده به واگذارشده تغییر دهید. توضیح دهید که چرا این مقدار از نظر اسکیمای داده معتبر است اما از دید ریسک محصول پذیرفتنی نیست.

تمرین‌ها

  1. یکی از تیکت‌های بک‌لاگ را به این شش سطحِ مشخصات فنی تبدیل کنید.
  2. سه دستور پیاده‌سازی را حذف و به‌جای آن‌ها یک پایدار و دو نمونه جایگزین کنید.
  3. همه‌ی تصمیم‌ها را دسته‌بندی کنید و دلیل هر انتخاب قفل‌شده یا محدودشده را بیاورید.
  4. برای هر پایدار، یک رسید اثبات تعیین کنید.
  5. قیدی را که فاقد شواهد یا توجیه منطقی ریسک است حذف کنید.

برای مطالعه‌ی بیشتر

چه چیزی برایتان می‌ماند

فایل outputs/executable-specification.json را نگه دارید. این فایل به همان قراردادی تبدیل می‌شود که ایجنت‌های کدنویسی و بازبین‌های انسانی بر سر آن اشتراک دارند.

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درسحد وسطِ مفید میان مشخص‌سازیِ ناکافی (under-specification) و بیش‌از‌حد (over-specification) چیست؟
  2. حین درسکدام تصمیم معمولاً باید قفل (تثبیت) شود؟
  3. حین درستصمیم مرزبندی‌شده (bounded decision) چیست؟
  4. حین درسچرا باید مثال‌ها را با پایدارها (invariants) جفت کرد؟
  5. پس از درسچه مدرکی با یک ادعای مبتنی بر سفر کاربر (user-journey) همخوانی دارد؟
  6. پس از درسچرا باید منطقِ پشت تصمیمات قفل‌شده را ثبت کرد؟

سؤالات متداول

سه حالت تصمیم‌گیری در مشخصات فنی ایجنت چیستند؟

حالت‌های قفل‌شده (Locked) که مدل اصلاً حق تغییر آن را ندارد، محدودشده (Bounded) که در چارچوب قیود مجاز انتخاب می‌کند، و واگذارشده (Delegated) که انتخاب آن کاملاً بر عهده‌ی خود ایجنت است.

چرا نمونه‌ها نمی‌توانند جایگزین پایدارها (Invariants) شوند؟

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

تفاوت مشخصات مبهم با تصمیم واگذارشده چیست؟

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

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.