تست ایجنتیک: به جای مسیر، مقصد رو بده
خلاصهٔ کاملتر
پائولو پرونه اول توضیح میده که هر تستی که تا حالا نگه داشتی در واقع یه ضبطه: یه بار کار رو انجام میدی، مسیر و نتیجهٔ مورد انتظار رو مینویسی و ماشین همون رو تا ابد تکرار میکنه. این ضبط فقط دوتا چیز نگه میداره: locator یعنی اسم چیزی که باید روش عمل بشه (یه data-testid، یه مسیر API) و oracle یعنی همون خطی که تصمیم میگیره جواب درست بوده یا نه. هر دوشون لحظهای که تایپشون میکنی فریز میشن.
مشکل هم دقیقاً همین فریز شدنه. یکی تو یه PR ظاهری اسم یه فیلد رو عوض میکنه و تست میشکنه، در حالی که خود فیچر سالمه. از اونور فلوهایی که کسی براشون تست ننوشته بیسروصدا ریلیز میشن. نویسنده میگه self-healing locator هم درمان نیست: خودش رو به هر المانی که الان اون کار رو انجام میده وصل میکنه، پس رگرسیونی که کار رو به المان دیگهای سپرده از چشمش میافته و سوئیت روی یه فیچر خراب سبز میشه.
تو تست ایجنتیک به جای پخش دوبارهٔ ضبط، هدف رو به ایجنت میدی و میذاریش تو یه حلقه: وضعیت فعلی رو بخون، کاری که به هدف نزدیکت میکنه رو انجام بده، دوباره بخون، تا وقتی هدف برقرار شه یا حرکتها تموم شه. سه کار دستشه: کاوش برای پیدا کردن حالتهای ارزش تست، تولید فایل تست خوانا، و تعمیر تست شکسته. هیچکدوم هم از روی عکس صفحه کار نمیکنه؛ روی وب درخت دسترسیپذیری (همون توصیف ساختاری که اسکرینریدر میخونه) خونده میشه و روی API، اسکیما.
عددهای واقعی تو مقاله جالبن. متا با TestGen-LLM روی اینستاگرام و فیسبوک سه فیلتر گذاشت: کامپایل شدن، پاس شدن پایدار، و بالا بردن پوشش. ۷۵٪ فیلتر اول رو رد کرد، ۵۷٪ دومی و فقط ۲۵٪ سومی؛ بعدش مهندسها ۷۳٪ از بازماندهها رو قبول کردن. اوبر با AutoCover حدود یکی از هر ۹ تست جدیدش رو همینجوری میسازه، با نرخ موفقیت ۲۰٪ تو Java، ۴۰٪ تو Go و ۸۰٪ تو Python. Airbnb هم نزدیک ۳۵۰۰ فایل تست رو تو شش هفته از Enzyme مهاجرت داد، جای برآورد یکسالونیمهٔ دستی.
بخش هشدارها مهمتره. به گفتهٔ نویسنده ایجنت تعمیرکار فرق یه تغییر بیخطر و یه رگرسیون رو نمیفهمه و هر دو رو وصله میزنه؛ اگه هم اصلاً نتونه، تست رو skip میکنه و ساکت میمونه. یه اجرای سبز هم چیزی رو ثابت نمیکنه: هر تست رو سه بار اجرا کن و به جای pass@k (یعنی حداقل یکی پاس شده) عدد pass^k (یعنی هر سه پاس شدن) رو گزارش بده. حرف آخرش اینه که ایجنت رو موقع نوشتن تست بذار، ولی مدل رو از CI بیرون نگه دار.
نکات کلیدی:
- تست اسکریپتی مسیر رو نگه میداره، تست ایجنتیک مقصد رو
- از خروجی TestGen-LLM متا: ۷۵٪ کامپایل شد، ۵۷٪ پایدار پاس شد، ۲۵٪ پوشش رو بالا برد
- AutoCover اوبر حدود یکی از هر ۹ تست جدید رو میسازه؛ نرخ موفقیتش ۲۰٪ تو Java و ۸۰٪ تو Python
- Airbnb حدود ۳۵۰۰ فایل تست رو تو ۶ هفته از Enzyme مهاجرت داد
- برای گیت ریلیز pass^k رو گزارش کن نه pass@k، و مدل رو از CI بیرون نگه دار




