در کنفرانس اخیر QCon لندن، متیو لاج، مدیر عامل DiffBlue، ارائهای در مورد پیشرفتهای هوش مصنوعی (AI) برای نوشتن کد ارائه کرد. لاج تفاوتهای بین مدلهای زبان بزرگ و رویکردهای یادگیری تقویتی را برجسته کرد و بر آنچه که هر دو رویکرد میتوانند و نمیتوانند انجام دهند، تأکید کرد. در این جلسه یک نمای کلی از وضعیت فعلی تولید کد مبتنی بر هوش مصنوعی و مسیر آینده آن ارائه شد.
لاج در ارائه خود به تفاوتهای بین ابزارهای تولید کد مبتنی بر هوش مصنوعی و ابزارهای نوشتن تست واحد پرداخت. ابزارهای تولید کد مانند GitHub Copilot، TabNine و ChatGPT در درجه اول بر تکمیل قطعه کد یا پیشنهاد کد بر اساس زمینه ارائه شده تمرکز دارند. این ابزارها می توانند با کاهش زمان و تلاش مورد نیاز برای کارهای تکراری، روند توسعه را تا حد زیادی سرعت بخشند. از سوی دیگر، ابزارهای نوشتن تست واحد مانند DiffBlue با تولید خودکار موارد تست برای یک قطعه کد معین، با هدف بهبود کیفیت و قابلیت اطمینان نرمافزار هستند. هر دو نوع ابزار از هوش مصنوعی برای افزایش بهره وری و کیفیت کد استفاده می کنند اما جنبه های مختلف چرخه عمر توسعه نرم افزار را هدف قرار می دهند.
لاج توضیح داد که چگونه ابزارهای تکمیل کد، به ویژه آنهایی که مبتنی بر مدل های ترانسفورماتور هستند، با تجزیه و تحلیل متن داده شده، کلمه یا نشانه بعدی را در یک دنباله پیش بینی می کنند. این مدل های ترانسفورماتور در طول زمان به طور قابل توجهی تکامل یافته اند، به طوری که GPT-2، یکی از اولین مدل های منبع باز، در فوریه 2019 منتشر شد. از آن زمان، تعداد پارامترها در این مدل ها به طور چشمگیری افزایش یافته است، از 1.5 میلیارد در GPT-2. به 175 میلیارد در GPT-3.5، منتشر شده در نوامبر 2022.
OpenAI Codex، مدلی با تقریباً 5 میلیارد پارامتر مورد استفاده در GitHub CoPilot، به طور خاص بر روی کد منبع باز آموزش داده شده است که به آن اجازه می دهد در کارهایی مانند تولید کد boilerplate از نظرات ساده و فراخوانی API ها بر اساس نمونه هایی که در گذشته دیده است برتر باشد. . دقت پیشبینی یکشات این مدلها به سطوحی رسیده است که با مدلهای زبانی بهصراحت آموزشدیده شده است. متأسفانه، اطلاعات مربوط به توسعه GPT-4 فاش نشده باقی مانده است. هم داده های آموزشی و هم اطلاعات پیرامون تعداد پارامترها منتشر نشده است که آن را به یک جعبه سیاه تبدیل می کند.
لاج همچنین کاستیهای ابزارهای تولید کد مبتنی بر هوش مصنوعی را مورد بحث قرار داد و تأکید کرد که این مدلها میتوانند غیرقابل پیشبینی باشند و به شدت به درخواستها وابسته باشند. از آنجایی که آنها اساساً مدلهای آماری الگوهای متنی هستند، ممکن است کدی را تولید کنند که معقول به نظر میرسد اما اساساً ناقص است. مدلها همچنین میتوانند زمینه را از دست بدهند یا کد نادرستی ایجاد کنند که از توابع فراخوانی پایه کد موجود یا APIهایی که وجود ندارند منحرف میشود. Lodge نمونه ای از کد را برای یک مدل به اصطلاح پرسپترون نشان داد که تشخیص دو اشکال در آنها دشوار بود که اساساً کد را غیرقابل استفاده می کرد.
به عنوان مثال، GPT-3.5، یادگیری تقویتی انسانی را در حلقه ترکیب می کند، جایی که پاسخ ها توسط انسان ها رتبه بندی می شوند تا نتایج بهتری به دست آورند. با این حال، چالش در شناسایی اشتباهات ظریف تولید شده توسط این مدلها باقی میماند، که میتواند منجر به عواقب ناخواسته شود، مانند حادثه ChatGPT که شرکت برنامهنویس آلمانی OpenCage را درگیر میکند.
علاوه بر این، مدلهای زبان بزرگ (LLM) دارای قابلیت استدلال نیستند و فقط میتوانند متن بعدی را بر اساس دادههای آموزشی خود پیشبینی کنند. در نتیجه، محدودیتهای مدلها صرفنظر از اندازهشان باقی میماند، زیرا هرگز متنی را تولید نمیکنند که در طول آموزش کدگذاری نشده باشد. لاج تاکید کرد که این مشکلات از بین نمی روند، مهم نیست که چقدر داده ها و پارامترهای آموزشی در طول آموزش این مدل ها استفاده می شود.
سپس Lodge تمرکز خود را به یادگیری تقویتی و کاربرد آن در ابزارهایی مانند DiffBlue معطوف کرد. یادگیری تقویتی با رویکرد سنتی LLM با تمرکز بر یادگیری از طریق انجام، به جای تکیه بر دانش از قبل موجود متفاوت است. در مورد DiffBlue Cover، یک حلقه بازخورد استفاده میشود که در آن سیستم یک آزمایش را پیشبینی میکند، آزمایش را اجرا میکند و سپس اثربخشی آن را بر اساس پوشش، سایر معیارها و کد جاوا موجود ارزیابی میکند. این فرآیند به سیستم اجازه می دهد تا به طور مکرر تست هایی با پوشش بالاتر و خوانایی بهتر را بهبود بخشد و تولید کند که در نهایت منجر به فرآیند تست موثرتر و کارآمدتر برای توسعه دهندگان می شود. لاج همچنین خاطرنشان کرد که ارائه پوشش آزمایشی آنها به آنها اجازه می دهد فقط در هنگام تغییر کد آزمایش های مربوطه را اجرا کنند و در نتیجه حدود 50 درصد از هزینه های آزمایش کاهش می یابد.
برای نشان دادن قابلیتهای DiffBlue Cover، Lodge یک نسخه آزمایشی زنده با یک برنامه ساده جاوا که برای یافتن صاحبان طراحی شده بود، انجام داد. این برنامه دارای چهار مورد بود که برای آنها باید آزمایش ایجاد شود. DiffBlue Cover که کاملاً روی یک لپتاپ محلی اجرا میشود، آزمایشهایی را در عرض 1.5 دقیقه انجام میدهد. آزمایشهای بهدستآمده در IntelliJ بهعنوان یک فایل جدید ظاهر شدند که شامل تستهای مسخرهشده برای سناریوهایی مانند بازگشت مالک تک، بازگشت مالک دوگانه، بدون مالک و یک لیست آرایه خالی بود.
در نتیجه، پیشرفتها در تولید کد مبتنی بر هوش مصنوعی و آزمایش مبتنی بر یادگیری تقویتی، همانطور که توسط ابزارهایی مانند DiffBlue Cover نشان داده شده است، این پتانسیل را دارد که بر توسعه نرمافزار و چشمانداز آزمایش تأثیر زیادی بگذارد. با درک نقاط قوت و محدودیت های این رویکردها، توسعه دهندگان و معماران می توانند تصمیمات آگاهانه ای در مورد نحوه بهترین استفاده از این فناوری ها برای افزایش کیفیت، بهره وری و کارایی کد بگیرند و در عین حال خطر خطاهای ظریف و پیامدهای ناخواسته را کاهش دهند.