هوش مصنوعی برای تولید تست: کجا کمک می‌کند و کجا فریب می‌دهد

هوش مصنوعی تست‌ها را سریع می‌نویسد. اما تست‌هایی هم می‌نویسد که واقعی به نظر می‌رسند ولی موارد اشتباهی را بررسی می‌کنند.

شما یک تابع را در هوش مصنوعی کپی می‌کنید. سی ثانیه بعد، دوازده تست پاس‌شده دارید. امتیاز پوشش (coverage score) شما بالا می‌رود. احساس بهره‌وری می‌کنید.

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

هوش مصنوعی آنچه را که کد شما «انجام می‌دهد» تست کرد، نه آنچه را که کد شما «باید انجام دهد».

هوش مصنوعی مفید است، اما باید بدانید چگونه از آن استفاده کنید.

نقاط قوت هوش مصنوعی:

  • تولید کدهای تکراری (boilerplate) مانند بلوک‌های setup و teardown.
  • نوشتن factory helperها و اشیاء داده (data objects) تکراری.
  • ایجاد انواع مختلفی از یک الگوی تست خوب.
  • مدیریت موارد خاص (edge cases) بدیهی مانند null، رشته‌های خالی یا صفر.

نقاط ضعف هوش مصنوعی:

  • تست‌های مبتنی بر پیاده‌سازی: تست‌هایی می‌نویسد که به جای منطق تجاری (business logic)، از ساختار کد پیروی می‌کنند. اگر کد را بازسازی (refactor) کنید، تست‌ها می‌شکنند، حتی اگر نتیجه همچنان درست باشد.
  • موارد خاص سطحی: خطاهای بدیهی را پیدا می‌کند اما باگ‌های خاصِ دامنه (domain-specific) را از دست می‌دهد. هوش مصنوعی از ویژگی‌های خاص منطقه زمانی شما، محدودیت‌های پایگاه داده یا قوانین تجاری خاص شما آگاه نیست.
  • Mockهای شکننده: سرویس‌های داخلی را که باید واقعی باقی بمانند، mock می‌کند. این کار نگهداری تست‌ها را کند و شکستن آن‌ها را در حین بازسازی (refactor) آسان می‌کند.

چگونه از هوش مصنوعی بدون ایجاد «نمایش تست» (test theater) استفاده کنیم:

  1. ابتدا قرارداد (contract) را تعریف کنید. یک جمله ساده درباره اینکه تست باید چه چیزی را اثبات کند بنویسید. مثال: «یک کد منقضی‌شده باید مبلغ اصلی را برگرداند.»
  2. آن جمله را به هوش مصنوعی بدهید. اجازه دهید هوش مصنوعی کد را بنویسد، اما هدف (intent) باید بر عهده شما باشد.
  3. فقط در مرزها (boundary) از mock استفاده کنید. برای ماژول‌های داخلی از نمونه‌های واقعی استفاده کنید. فقط APIهای خارجی یا پایگاه‌های داده را mock کنید.
  4. یک مورد خاصِ دامنه را دستی بنویسید. هوش مصنوعی موارد «بدیهی» را مدیریت می‌کند. شما باید موارد خاصِ «ساعت ۳ صبح» را مدیریت کنید که واقعاً باعث بروز حوادث در محیط عملیاتی می‌شوند.

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

منبع: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm