ایجنت کدنویس رو چطور وارد کدبیس قدیمی کنیم
خلاصهٔ کاملتر
ادی عثمانی تو این مقاله از کدبیسهای brownfield حرف میزنه، یعنی پروژههای قدیمی که خود کد دیگه توصیف کاملی از رفتار سیستم نیست. دانش شفاهی تیم، سرویسهای لگسی و انتظاراتی که تیمهای دیگه روش حساب کردن، بیرون از مخزن کد زندگی میکنن. به گفتهٔ نویسنده اگه ایجنت رو بینظارت بندازی وسط چنین کدی، چیزی میگیری که تستهاش سبزه ولی طراحی سیستمش غلط و تستهاش شکنندهست.
پیشنهاد اصلیش نقشهکشی ناحیهایه (zones). ناحیهٔ سبز جاییه که تست خوب و ایزولهسازی داره و ایجنت میتونه توش لوپ تند بزنه. زرد کیفیت مخلوط داره و اول باید براش تست characterization نوشته بشه. قرمز هم بخشهای حساسه، مثل احراز هویت، پرداخت، دسترسیها و حقوق و دستمزد، که بازنویسی بینظارت توش ممنوعه.
سه قاعده اینو از یه استعاره به یه رویهٔ کاری تبدیل میکنه: نقشه رو آدم میکشه نه ایجنت (چون ایجنت اگه به حال خودش رها بشه از ترسناکترین فایل شروع میکنه، آخه اسمهای جذابتری داره)، ناحیه فقط وقتی سبز میشه که تستها نوشته شده و مالک ماژول اولین تغییرهای ایجنت رو دیده باشه، و هر ناحیه فعل خودش رو داره.
نکتهٔ دومش اینه که ایجنتها نقشهٔ کد رو خودشون خوب میفهمن، پس لازم نیست برای همهچی فایل مارکداون بسازی. فقط چیزی رو بنویس که از کد درنمیاد: قواعد دامنه، دلیل تریدآفها، قیدهای بیرونی و تاریخچهٔ پیادهسازیهای خلافانتظار. برای کار زرد و قرمز هم یه پاس فقطخواندنی جدا بذار که یه memo کوتاه بسازه (نقطههای ورود، مالکها، صداکنندهها، تستها، سیگنالهای production) وگرنه سشن بعدی همین کاوش رو از صفر تکرار میکنه.
شروع رو از کار بیریسک بذار: اول رفتار امروز رو با تست characterization قفل کن، یعنی تستی که کار فعلی ماژول رو با همهٔ زشتیهاش ثبت میکنه، چون تو سیستم قدیمی همون رفتار زشت چیزیه که کسبوکار روش میچرخه. نویسنده تأکید میکنه همون سشنی که تستها رو پاس میکنه نباید تنها نویسندهٔ تستها باشه. نتفلیکس همین ایده رو تو مهاجرت GraphQL خودش با replay و shadow traffic و مقایسهٔ پاسخ مسیر قدیم و جدید اجرا کرد.
مهاجرت هم به نظر او وقتی تمومه که مسیر جدید کار کنه و وابستگی قدیمی واقعاً حذف شده باشه؛ مهاجرت نیمهکاره ایجنت رو گیج میکنه چون هر دو الگو رو بهعنوان الگوی درست میبینه. نویسنده به یه بنچمارک اشاره میکنه که از ۵۲۰ اجرای ایجنت فقط ۲۸ تا از ممیزی مهاجرت و تست رفتاری سالم بیرون اومدن. حرف آخرش هم سادهست: چیزی که بین شرکتها منتقل میشه ساختاریه که دور ایجنت میسازی، نه خود ایجنت.
نکات کلیدی:
- تو ناحیهٔ قرمز (احراز هویت، پرداخت، دسترسیها) بازنویسی بینظارت ممنوعه؛ زرد فقط بعد از تست characterization باز میشه
- تو SWE Refactor Bench از ۵۲۰ اجرای ایجنت فقط ۲۸ تا ممیزی مهاجرت و تست رفتاری رو رد کردن
- یه مطالعهٔ کنترلشدهٔ VB6 به C# روی فیچرهای ساده ۹۲٪ و روی پیچیدهها ۴۷٪ همارزی رفتاری داد
- پورت Zig به Rust در Bun روی ۵۳۵ هزار خط کد حدود ۵۰ ورکفلو در ۱۱ روز برد، با دو ریویوئر سختگیر روی هر واحد
- آسانا بکلاگ چندسالهٔ Enzyme رو در دو هفته و با حدود ۱۲ هزار دلار هزینهٔ مدل و زیرساخت بست
- هر کامنت ریویویی که تکرار میشه باید به lint rule، hook، تایپ یا تست تبدیل بشه، نه اینکه بیصدا دیف رو تعمیر کنی
- برای سنجش، به جای تعداد خط تولیدشده، دقایق ریویو، دخالت انسانی، رولبک و وابستگیهای لگسی حذفشده رو بشمار




