من کدهای هوش مصنوعی تیمم را حسابرسی کردم. آنچه یافتیم اینجاست.

تیم من از هوش مصنوعی برای نوشتن کد با سرعتی بی‌سابقه استفاده کرد. ما ویژگی‌ها را در یک‌سوم زمان معمول عرضه کردیم. سرعت توسعه ما عالی به نظر می‌رسید. پوشش تست‌های ما به ۹۱٪ رسید.

سپس به بن‌بست خوردیم.

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

ما سه هفته را صرف حسابرسی پایگاه کد (codebase) کردیم. ما با بدهی فنی‌ای مواجه شدیم که هیچ اسکنری قادر به شناسایی آن نبود. این بدهی، هم ساختاری (architectural) بود و هم رفتاری (behavioral).

ابزارهای هوش مصنوعی مشکل فوری موجود در دستور (prompt) شما را حل می‌کنند. آن‌ها برای انجام یک وظیفه محلی بهینه‌سازی می‌شوند. آن‌ها کل سیستم را درک نمی‌کنند. آن‌ها نمی‌دانند که قرار است کدام سرویس‌ها را به‌زودی حذف کنید. آن‌ها از مدل‌های داده‌ای بلندمدت شما بی‌خبرند.

نتیجه، کدی است که در سطح محلی درست است، اما در سطح جهانی شکننده است.

ما چهار الگوی مشخص پیدا کردیم:

۱. موارد خاص (Edge Cases) پنهان هوش مصنوعی کدی می‌نویسد که تست‌های ارائه شده توسط شما را پاس می‌کند. اما در نوشتن تست برای اشتباهات خودش ضعیف است.

  • راه حل: یک مهندس باید بتواند کد را بدون نگاه کردن به آن، برای همکارش توضیح دهد. اگر نتوانست توضیح دهد، اجازه ادغام (merge) آن را ندارد.

۲. نمایش پوشش تست (Test Coverage Theater) هوش مصنوعی تست‌هایی تولید می‌کند که کدهای موجود را پوشش می‌دهند. اما تست‌هایی برای اینکه سیستم واقعاً چگونه باید رفتار کند، نمی‌نویسد.

  • راه حل: هر مجموعه تست هوش مصنوعی باید یک بررسی خصمانه (adversarial review) را پشت سر بگذارد. یک مهندس دوم باید سعی کند کد را از کار بیندازد.

۳. وابستگی (Coupling) نامرئی هوش مصنوعی برای حل سریع یک دستور، وابستگی‌هایی اضافه می‌کند. ممکن است منطق اعلان‌ها (notification) را در ماژول‌های صورت‌حساب یا کاربر شما در هم تنیده باشد. این کار جداسازی سرویس‌ها را در آینده غیرممکن می‌کند.

  • راه حل: یک مهندس ارشد باید هرگونه وابستگی جدیدی را که توسط هوش مصنوعی معرفی شده، تأیید کند.

۴. مدیریت خطای سطحی هوش مصنوعی اغلب بلوک‌های خطایی می‌نویسد که کامل به نظر می‌رسند، اما در مدیریت شکست‌های واقعی سیستم ناتوان هستند.

  • راه حل: ما از یک «تست تغییر» استفاده می‌کنیم. ما اندازه‌گیری می‌کنیم که با انجام یک تغییر کوچک، چه تعداد فایل دچار مشکل می‌شوند. تأثیر بالا به معنای وابستگی (coupling) بالا است.

هوش مصنوعی دشمن نیست. شما باید با هوش مصنوعی مانند یک مهندس جونیور (junior engineer) رفتار کنید. باید راهنمایی کنید، انتظارات را تعیین کنید و از قضاوت خود برای اصلاح خروجی استفاده کنید.

ابزارها در انجام وظایف (tasks) عالی هستند، اما در انجام شغل (job) عالی نیستند.

منبع: https://dev.to/emilywoodsnyc/i-spent-3-weeks-auditing-my-teams-ai-generated-code-here-is-what-we-found-1kj5

انجمن یادگیری اختیاری: https://t.me/GyaanSetuAi