تست جهش برای کدهای نوشته شده توسط عامل‌ها (Mutation Testing)

مجموعه‌ تست‌های تولیدشده توسط LLM می‌توانند به ۱۰۰٪ پوشش خط و شاخه برسند، اما مطالعه‌ای اخیر نشان می‌دهد که آن‌ها در تست جهش تنها ۴٪ امتیاز کسب می‌کنند؛ موضوعی که شکافی در قابلیت اطمینان را آشکار می‌کند که ممکن است توسعه‌دهندگان در بازبینی‌های اسپرینت نادیده بگیرند.

محققان مجموعه‌ تست‌های تولیدشده توسط عامل‌های کدنویسیِ مدل‌های زبانی بزرگ را در بنچمارک HumanEval-Java ارزیابی کردند. یک مجموعه تست، تمام خطوط کد را پوشش داده و تمام شاخه‌های شرطی را اجرا کرده بود. اما زمانی که همان مجموعه با تست جهش (تکنیکی که خطاهای کوچک را برای بررسی اینکه آیا تست‌ها آن‌ها را شناسایی می‌کنند یا خیر، تزریق می‌کند) مواجه شد، تنها بخش بسیار کوچکی از باگ‌های تزریق‌شده را شناسایی کرد.

پوشش خوب به نظر می‌رسد، اما واقعاً به چه معناست؟

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

در این مطالعه، مجموعه‌ تست با پوشش ۱۰۰٪ تقریباً تمام جهش‌یافته‌ها را از دست داد، از جمله خطاهای منطقی ساده مانند مدیریت نادرست تاریخ‌های سال کبیسه. امتیاز جهش ۴٪ به این معناست که این مجموعه تست تنها تعداد انگشت‌شماری از باگ‌های واقعی را شناسایی می‌کند.

چرا این موضوع برای توسعه به کمک هوش مصنوعی اهمیت دارد

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

دیدگاه مقابل: پوشش بی‌فایده نیست

پوشش همچنان به شما می‌گوید که آیا مسیرهای کد اجرا شده‌اند یا خیر، اما تضمینی برای شناسایی خطاها نیست.

آنچه باید در آینده زیر نظر داشت

  • یکپارچه‌سازی ابزارها: گنجاندن تست جهش در خط لوله‌های CI.
  • بهبود LLMها: آموزش عامل‌ها برای تولید تست‌هایی که جهش‌یافته‌ها (mutants) را از بین می‌برند.
  • دستورالعمل‌های صنعتی: به‌کارگیری استانداردهایی که پوشش را با امتیازات جهش ترکیب می‌کنند.

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