گوگل استدلال میکند که گسترش کد تولیدشده با هوش مصنوعی، معیارهایی را که توسعهدهندگان برای ارزیابی زبانهای برنامهنویسی به کار میبرند تغییر داده است؛ بهطوریکه با بر عهده گرفتن بخش بیشتری از کار توسعه توسط عاملهای کدنویسی، خوانایی، راستیآزمایی و نگهداری بلندمدت اهمیت بیشتری پیدا میکنند.
این شرکت معتقد است Go برای چنین مدلی مناسب است، زیرا طراحی زبان و ابزارهای توسعه آن بر ایجاد سازگاری و یکدستی میان تیمها بنا شده است. گوگل میگوید Go بهجای تمرکز صرف بر سرعت نوشتن کد، با هدف آسانتر کردن خواندن، آزمون، نگهداری و بهروزرسانی نرمافزار در طول زمان طراحی شده است.
از تولید کد تا بازبینی کد
دستیارهای کدنویسی هوش مصنوعی میتوانند در مدت کوتاهی حجم زیادی کد معتبر از نظر نحوی تولید کنند. گوگل استدلال میکند که این موضوع اهمیت سرعت کدنویسی انسان را کاهش میدهد، اما حجم کدی را که توسعهدهندگان باید بازبینی و راستیآزمایی کنند افزایش میدهد.
توسعهدهندگان انسانی همچنان مسئول معماری برنامه، مرزهای میان سرویسها، کنترلهای امنیتی و قابلیت اطمینان سامانههای عملیاتی هستند.
پژوهش درباره نرمافزار تولیدشده توسط عاملها نشان میدهد که نقش انسان پس از تولید اولیه کد نیز ادامه دارد. مطالعهای در سال ۲۰۲۶ که در کنفرانس بینالمللی ارزیابی و سنجش مهندسی نرمافزار پذیرفته شد، بیش از ۱۰۰۰ فایل تولیدشده با هوش مصنوعی و حدود ۳۲۰۰ تغییر بعدی را در ۱۰۰ مخزن محبوب متنباز بررسی کرد.
پژوهشگران دریافتند که توسعهدهندگان انسانی بیشترِ نگهداریهای بعدی فایلهای تولیدشده با هوش مصنوعی را انجام دادهاند. افزودن قابلیتها رایجترین نوع تغییر در کد تولیدشده توسط عاملها بود، در حالی که رفع اشکال سهم بیشتری از تغییرات فایلهای نوشتهشده توسط انسان را تشکیل میداد.
مطالعه دیگری در سال ۲۰۲۶، ۲۷۸٬۷۹۰ گفتوگوی بازبینی کد را در ۳۰۰ پروژه متنباز گیتهاب تحلیل کرد. بر اساس یافتههای آن، بازبینهای انسانی هنگام ارزیابی کد تولیدشده با هوش مصنوعی، در مقایسه با مشارکتهای نوشتهشده توسط انسان، ۱۱٫۸ درصد دور بازبینی بیشتری انجام دادند و درباره آزمون، درک کد و انتقال دانش، بازخورد بیشتری نسبت به بازبینهای هوش مصنوعی ارائه کردند.
گوگل استدلال میکند که این وضعیت، ویژگیهای مهمتر در زبانهای برنامهنویسی و ابزارهای توسعه را تغییر میدهد. زبانها و ابزارها باید نهتنها از ایجاد کد، بلکه از آزمون، اعتبارسنجی، نگهداری، مدیریت وابستگیها و همکاری نیز پشتیبانی کنند.
توسعهدهندگان همچنان درباره اتکا به خروجی هوش مصنوعی بدون بررسی آن محتاط هستند. نظرسنجی توسعهدهندگان Stack Overflow در سال ۲۰۲۵ نشان داد که ۴۶ درصد پاسخدهندگان تا حدی یا بهشدت به دقت ابزارهای هوش مصنوعی بیاعتمادند؛ در مقابل، حدود ۳۳ درصد نوعی اعتماد به این ابزارها ابراز کردند. فقط ۳٫۱ درصد گفتند اعتماد زیادی به خروجی تولیدشده با هوش مصنوعی دارند.
امنیت نیز همچنان بخشی از فرایند بازبینی است. یک مطالعه کیفی در سال ۲۰۲۶ روی ۱۵ توسعهدهنده حرفهای نشان داد که شرکتکنندگان در جلسههای کدنویسی مشاهدهشده، در ابتدا الزامات امنیتی را در درخواستهای خود وارد نمیکردند؛ حتی زمانی که دانش مرتبط با امنیت داشتند. پژوهشگران گفتند توسعه به کمک هوش مصنوعی، بخشی از توجه امنیتی را از ایجاد کد به بازبینی بعدی منتقل کرده است.
تمرکز Go بر پیشبینیپذیری
Go در گوگل توسط رابرت گریزمر، راب پایک و کن تامپسون توسعه یافت و طراحی آن بیشتر بر مهندسی نرمافزار تمرکز داشت تا صرفاً برنامهنویسی. سازندگان آن میخواستند راههای یکدستی برای ساختاربندی و نگهداری نرمافزار در اختیار تیمها بگذارند، نه اینکه سازوکارهای متعددی برای بیان منطق مشابه به زبان اضافه کنند.
گوگل معتقد است زبانهایی که راههای گوناگونی برای بیان یک منطق یکسان ارائه میکنند، میتوانند تنوع بیشتری در کد تولیدشده با هوش مصنوعی ایجاد کنند؛ در حالی که قراردادهای Go بخشی از این تنوع را محدود میکنند. این شرکت به قالببندی استاندارد، مشخصات نسبتاً کوچک زبان و قراردادهای رایج پروژهها بهعنوان عواملی اشاره میکند که تفاوتهای ساختاری و سبکی را کاهش میدهند.
قالببندی یکی از این نمونههاست. Go ابزار gofmt را در اختیار دارد که بهصورت خودکار قالب استانداردی را روی کد منبع اعمال میکند و قالببندی را به سلیقه توسعهدهندگان یا پروژههای منفرد واگذار نمیکند.
منطق پشت gofmt به پیش از ظهور هوش مصنوعی مولد بازمیگردد. تیم Go پیشتر گفته است که قالببندی خودکار، بحثهای سبکی را حذف میکند و خواندن کد منبع را آسانتر میسازد، زیرا توسعهدهندگان مجبور نیستند در پروژههای مختلف خود را با قراردادهای متفاوت سازگار کنند.
قالببندی استاندارد همچنین میتواند بازبینی تغییرات بزرگ کد را آسانتر کند، زیرا مانع میشود تفاوتهای قالببندی، تغییرات واقعی در کد منبع را پنهان کنند. گوگل اکنون همین اصل را درباره کد تولیدشده با هوش مصنوعی به کار میگیرد.
استدلال گوگل فراتر از نحو است. Go بهصورت پیشفرض مجموعهابزاری مشترک برای قالببندی، آزمون، مدیریت بستهها، بررسی آسیبپذیریها، پروفایلگیری و تحلیل کد ارائه میکند.
عاملهای کدنویسی نیز میتوانند در طول توسعه از این ابزارها استفاده کنند. یک عامل میتواند کد تولید کند، آن را کامپایل کند، آزمونها را اجرا کند، شکستها را شناسایی کند و پیش از تحویل نتیجه به توسعهدهنده، پیادهسازی را اصلاح کند.
سیستم نوعدهی ایستای Go لایه دیگری از اعتبارسنجی را فراهم میکند. کامپایلر میتواند کدی را که مشکلاتی مانند نوعهای نادرست یا ارجاع به متدهای ناموجود دارد رد کند و خطاهای مشخصی در اختیار عامل هوش مصنوعی بگذارد تا در تلاشهای بعدی از آنها استفاده کند.
ارتباط میان نوعدهی ایستا و توسعه به کمک هوش مصنوعی به استدلال گوگل درباره Go محدود نمیشود. گیتهاب نیز به این نکته اشاره کرده است که اطلاعات نوع هنگام تولید نرمافزار توسط مدلهای کدنویسی مفید است، زیرا نوعها مشخص میکنند چه عملیاتی برای متغیرها، توابع و رابطها معتبر هستند.
گیتهاب هشدار داده است که موفقیت در بررسی نوعها ثابت نمیکند منطق کسبوکار برنامه درست است. برای تعیین اینکه نرمافزار مطابق انتظار رفتار میکند یا نه، همچنان به آزمون و بازبینی انسانی نیاز است.
گوگل همچنین سرعت کامپایل Go را مفید میداند، زیرا عاملها میتوانند چرخههای مکرر «کامپایل و اصلاح» را اجرا کنند. این شرکت معتقد است اعتبارسنجی بیرونی اهمیت زیادی دارد، چون تغییرات مکرر تولیدشده با هوش مصنوعی، در صورت آزموننشدن، میتوانند خطاهای بیشتری ایجاد کنند.
بستههای شخص ثالث حوزه دیگری است که گوگل آن را برای نرمافزار تولیدشده با هوش مصنوعی مهم میداند. مدلهای کدنویسی ممکن است بر اساس اطلاعات موجود در دادههای آموزشی خود وابستگیهایی پیشنهاد کنند؛ از جمله بستههایی که قدیمی شدهاند یا دیگر نگهداری نمیشوند.
کتابخانه استاندارد Go حوزههایی مانند شبکه، رمزنگاری، HTTP، پردازش متن، آزمون و عملیات فایل را پوشش میدهد و برای برخی کارهای رایج، نیاز به بستههای خارجی را کاهش میدهد. گوگل استدلال میکند که مؤلفههای استاندارد میتوانند تعداد وابستگیهای خارجی موردنیاز توسعهدهندگان و عاملهای کدنویسی را کاهش دهند.
سامانه ماژول Go هنگام نیاز به بستههای خارجی، کنترلهای بیشتری فراهم میکند. پایگاه داده checksum، هش ماژولها را ثبت میکند تا وابستگیهای دانلودشده با نسخههای ثبتشده قبلی تطبیق داده شوند؛ در همین حال، آینه ماژول Go نسخههایی از ماژولها را ذخیره میکند.
Go ابزار govulncheck را نیز ارائه میدهد که میتواند مشخص کند آیا برنامه توابع مرتبط با آسیبپذیریهای شناختهشده را فراخوانی میکند یا نه. چارچوب آزمون بومی و پشتیبانی از fuzzing در Go نیز بررسیهای بیشتری را در طول توسعه ممکن میکنند.
نگهداری کدی که عاملها نوشتهاند
پژوهش درباره عاملهای کدنویسی بهتدریج میان این دو موضوع تمایز میگذارد: اینکه کد تولیدشده هنگام تولید اولیه کار میکند، و اینکه آیا توسعهدهندگان یا عاملهای دیگر میتوانند بعداً آن را با موفقیت تغییر دهند یا نه.
مطالعهای در ژوئن ۲۰۲۶ چارچوبی با نام CodeThread معرفی کرد تا بررسی کند زمانی که عاملهای کدنویسی به کار روی کدی ادامه میدهند که پیشتر عامل دیگری نوشته است، چه اتفاقی رخ میدهد. پژوهشگران در بررسی چهار عامل کدنویسی پیشرو دریافتند که نرخ حل وظایف هنگام گسترش کد نوشتهشده توسط عامل، در مقایسه با کد نوشتهشده توسط انسان، کمتر بود؛ این کاهش در برخی مقایسهها به ۱۳٫۱ درصد میرسید.
معیارهای متعارف مانند پیچیدگی و پرگویی کد، این تفاوت را بهطور کامل توضیح نمیدادند. پژوهشگران در عوض تفاوتهایی در حوزههایی مانند اعتبارسنجی ورودی و مدیریت خطا شناسایی کردند که بر میزان سهولت ساخت عاملهای بعدی روی پیادهسازی قبلی اثر میگذاشتند.
گوگل استدلال میکند که با مشارکت عاملهای کدنویسی در تغییرات بیشتر طی زمان، سازگاری و نگهداری خودکار اهمیت بیشتری پیدا میکنند. سیاست سازگاری Go با این هدف طراحی شده است که برنامههای نوشتهشده برای نسخههای قبلی Go 1، با نسخههای جدیدتر زنجیرهابزار نیز به کار خود ادامه دهند.
این تضمین مطلق نیست. مستندات رسمی سازگاری Go استثناهایی از جمله اصلاحات امنیتی، اتکا به رفتار تعریفنشده، تغییرات رفتار سیستمعامل و برخی کاربردهای بسته unsafe را فهرست میکنند.
این پلتفرم ابزارهایی برای بهروزرسانی کد موجود نیز دارد. سرور زبان gopls از پیمایش کد و تغییرات خودکار پشتیبانی میکند و go fix نیز مدرنسازهایی دارد که میتوانند الگوهای قدیمی کد را با قراردادهای جدیدتر Go جایگزین کنند.
تغییرات اخیر در ابزارهای Go، ارتباط آنها با عاملهای کدنویسی را مستقیمتر کرده است. سرور زبان gopls شامل یک سرور MCP است که میتواند تشخیصهای کامپایلر و تحلیلگر را در اختیار عاملهای کدنویسی مبتنی بر مدلهای زبانی بزرگ (LLM) بگذارد.
ابزار بازطراحیشده go fix نیز مدرنسازهایی دارد که با استفاده از قواعد ازپیشتعریفشده تحلیل و تبدیل، الگوهای قدیمی کد را با سازههای جدیدتر زبان یا کتابخانه استاندارد جایگزین میکنند. این ابزارها به توسعهدهندگان و عاملهای کدنویسی راهی قطعی و قابلپیشبینی برای بهروزرسانی بخشهایی از یک پایگاه کد میدهند، بدون آنکه کاملاً به بازنویسی مولد متکی باشند.
عاملهای کدنویسی همچنین از تکمیل خودکار و پیشنهادهای کد منفرد فراتر رفتهاند. پژوهشی که در سال ۲۰۲۶ منتشر شد، ۲۴٬۰۱۴ درخواست pull ادغامشده تولیدشده توسط عاملهای کدنویسی را بررسی کرد که بیش از ۴۴۰٬۰۰۰ commit را دربر میگرفتند و آنها را با ۵۰۸۱ درخواست pull ادغامشده نوشتهشده توسط انسان مقایسه کرد.
پژوهشگران در زمینههایی مانند تعداد commitها، تعداد فایلهای تغییرکرده و تعداد خطوط حذفشده، تفاوتهایی میان مشارکتهای عاملها و انسانها یافتند.
Google Research همچنین انتظارات گستردهتر از عاملهای مهندسی نرمافزار را بررسی کرده است. پژوهشی مبتنی بر قواعدی که توسعهدهندگان برای عاملها تعریف کرده بودند و نیز مصاحبه با مهندسان باتجربه نرمافزار، در کنار تکمیل وظیفه، پایبندی به استانداردهای مهندسی، کیفیت کد، قابلیت اطمینان، حل مسئله و همکاری را شناسایی کرد.
استدلال گوگل این است که قالببندی استاندارد، بررسیهای ایستا، ابزارهای مشترک و مدل سازگاری Go، هنگام مشارکت عاملهای کدنویسی در پروژههای نرمافزاری، برخی از این کنترلها را از پیش فراهم میکنند.
لینک مطلب اصلی:
https://www.developer-tech.com/news/google-go-ai-generated-code/