افزایش کیفیت کد با GitHub Copilot
آخرین تحقیقات شرکت GitHub نشان میدهد که کدهایی که اخیرا با GitHub Copilot نوشته شده اند، به صورت محسوسی کیفیت بالاتری از نظر کارکرد، خوانایی، قابل اعتماد بودن، دقیق بودن و قابل نگهداری بودن نسبت به گذشته دارند.
مقدمه
هوش مصنوعی دنیای توسعه ی نرم افزار را در دو سال اخیر دگرگون کرده است! نتایج نظرسنجی های GitHub نیز حاکی از این است که گیتهاب کوپایلت برنامه نویسان را 55% سریع تر میکند. همچنین نظر سنجی های دیگر این شرکت نیز روی 85% افزایش اعتماد به نفس توسعه دهندگانی که از هوش مصنوعی گیتهاب استفاده میکنند تاکید دارد و در حال حاضر 88% جامعه ی آماری گیتهاب نیز اثر گذاری آن را را تایید کرده اند.
سوال اصلی البته اینجاست: کیفیت کد نوشته شده با استفاده از GitHub Copilot نسبت به کد معمولی بهتر است یا بدتر؟
برای پاسخ دادن به این سوال شرکت GitHub یک آزمایش کنترل شده را بر اساس معیار های زیر طراحی و انجام داده است:
- عملکرد ( functional )
- خوانایی ( readable )
- قابل اعتماد بودن ( reliable )
- قابل نگهداری بودن ( maintainable )
- مختصر و مفید بودن ( concise )
- قابل تایید بودن ( likely to be approved )
در این تحقیق 202 توسعه دهنده به کار گرفته شدند که حداقل دارای 5 سال تجربه ی توسعه هستند. نصف این افراد به صورت تصادفی انتخاب شدند و به آنها دسترسی GitHub Copilot داده شد و به نصف دیگر گفتند که از هیچ ابزار هوش مصنوعی ( AI ) استفاده نکنند. تمام شرکت کنندگان باید چند API endpoint برای یک web server مینوشتند. سپس محققین گیتهاب کدهای نوشته شده ی دو گروه را با استفاده از unit test ها و review های انجام شده توسط متخصصین ارزیابی میکردند.
نتیجه تحقیق
قبل از اینکه به جزییات بپردازیم بیایید نتیجه ی این تحقیق را ببینیم:
به صورت کلی GitHub Copilot منجر به افزایش عملکرد، خوانایی و کیفیت شده بود و کدهایی که به کمک هوش مصنوعی گیتهاب کوپایلت نوشته شده بودند نرخ تایید بیشتری توسط متخصصین دریافت کردند!
نتایج کلیدی
- افزایش کارآمدی (functionality) : توسعه دهندگانی که از GitHub Copilot استفاده کرده بودند، 56% شانس بیشتری داشتند که کد آنها تمام 10 unit test را پاس کند. این عدد بسیار خوب و موثر است.
- بهبود خوانایی (readability) : در review ها کدهایی که با هوش مصنوعی گیتهاب کوپایلت نوشته شده بودند، کمی خواناتر بودند و مشکلات خوانایی کمتری داشتند، تغییر خوانایی خیلی محسوس نبود( 3.62% ) اما توسعه دهندگان با استفاده از هوش مصنوعی گیتهاب توانستند 13.6% خط های بیشتری کد بنویسند و خوانایی از دست نرود!
- افزایش کیفیت کد (code quality) : مقدار اتکا پذیری یا reliability کدها به اندازه ی 2.94% ، مقدار قابل نگهداری بودن یا maintainability به اندازه ی 2.47% و مختصر و مفید بودن conciseness به اندازه ی 4.16% افزایش داشت. این اعداد شاید کوچک باشند اما از نظر آماری و در ابعاد جهانی قابل توجه هستند. نتیجه ی این تست با نتایج گزارش 2024 DORA Report نیز در یک راستا هستند.
- افزایش نرخ قابل تایید بودن (approval) : کدهایی که با استفاده از GitHub Copilot نوشته شده بودند با احتمال 5% بیشتر تایید میشدند. این به معنای این است که این کدها سریع تر آماده ی merge می شدند؛ نتیجه ی این کار افزایش سرعت رفع باگها و توسعه و عرضه فیچرها و امکانات جدید است.
حالا بیایید بهتر گزارش را بررسی کنیم:
کدهایی که با GitHub Copilot نوشته شده بودند کارآمدتر بودند
اگر کد کار نکند نمیتوان گفت که کیفیت دارد! در این آزمایش به functionality و کارآمد بودن کدها به عنوان یکی از متریک های اندازه گیری توجه شده و هدف پاس شدن تست هایی است که از قبل نوشته شده اند. دولوپرهایی که از هوش مصنوعی گیتهاب استفاده کرده بودند 56% احتمال بیشتری برای پاس کردن تست ها داشتند. یعنی با استفاده از GitHub Copilot میتوانید کدهای بهتری را با احتمال خیلی بالاتر بنویسید!
در تصویر زیر ایراد نگارشی وجود دارد و هردو میله ی نمودار به پاس شدن تست ها اشاره دارد. رنگ سبز برای کسانی است که از GitHub Copilot استفاده کرده اند و رنگ صورتی برای کسانی که از این هوش مصنوعی گیتهاب کوپایلت استفاده نکرده اند.
کدهایی که با GitHub Copilot نوشته شده بودند خواناتر بودند
25 تا از توسعه دهندگان این آزمایش (موش های آزمایشگاهی) که کد های آنها تمام 10 unit test را پاس کرده بود به صورت تصادفی انتخاب شدند تا کدهای دیگران را blind review کنند. این توسعه دهندگان نمیدانستند کدام کد با گیتهاب کوپایلت نوشته شده و کدام نه! نتیجه ی این بررسی این بود که کدهایی که با GitHub Copilot نوشته شده بودند، خواناتر بودند و مشکلات خوانایی کمتری داشتند.
تحلیل دیتای بدست آمده نشان میداد که با استفاده از هوش مصنوعی گیتهاب تقریبا در هر 18.2 خط کد به طور میانگین یک خطا وجود دارد و بدون استفاده از آن در هر 16 خط. یعنی 13.6% کد بیشتر با مقدار خطای مشابه!
این مسئله به معنای این است که با استفاده از گیتهاب کوپایلت میتوانید، زمان بیشتری را ذخیره کنید، چرا که هر خطا نیازمند بررسی فردی یک یا چند توسعه دهنده است. 13.6% عدد بزرگی به نظر نمیرسد اما اگر در گذر زمان و در بلند مدت به آن نگاه کنید مسئله فرق میکند! اگر در سال 200 روز کار کنید و فقط 10% بهبود کارایی داشته باشید، در سال حدود 3 برابر بهتر عمل کرده اید! البته این واقعا به سادگی امکان پذیر نیست ولی بهتر است که محدودیت ما در واقع برنامه نویسی و توسعه نباشد و راحت تر روی خلق ارزش تمرکز کنیم.
در کنار این، مسئله دیگری که در این آزمایش گزارش شد این بود که آن 25 نفر تنها به بررسی خطا های هر خط از کد محدود نمی شدند و در مورد قابل نگهداری بودن یا maintainable، قابل اعتماد بودن یا reliable، خوانا بودن یا readable و مختصر و مفید یا concise بودن کد نیز گزارش بهبود 1% تا 3% را به همراه داشتند. اگرچه این تغییرات کوچک هستند اما میتوانند در دراز مدت به بهبود کدبیس منجر شوند.
کدهایی که با GitHub Copilot نوشته شده بودند راحت تر تایید میشوند
نهایتا در این گزارش مشخص شده که احتمال تایید کدهایی که با GitHub Copilot نوشته شده اند 5% بیشتر از کدهای نوشته شده بدون آن است. این اتفاق به این معناست که کد ها زودتر به تایید رسیده و سپس merge میشوند و این باعث افزایش سرعت توسعه، سریع تر فیکس شدن bugها و عرضه ی feature های جدید می شود.
سخن آخر
به صورت کلی وقتی توسعه دهندگان زمان کمتری را به این اختصاص دهند که شخصا کد خود را توسعه دهند، میتوانند در ازایش زمان کافی برای بهبود آن داشته باشند. همچنین با افزایش سرعت امکان بررسی کد توسط توسعه دهندگان در بازه های زمانی کد و اصلاح آن نیز سریع تر فرآهم میشود.
یادگیری بکارگیری درست استفاده از هوش مصنوعی نیز میتواند برای همه ی توسعه دهندگان ضروری قلمداد شود.
بد نیست اگر یادگیری استفاده از گیتهاب کوپابلت را با توجه به سطح خود در دنیای برنامه نویسی جدی بگیرید و کارایی و عملکرد خود را بهبود ببخشید! الآن بهترین وقت برای این کار است، چرا که تب اولیه خوابیده و حالا GitHub Copilot به عنوان یک ابزار قابل اعتماد پخته تر در اختیار ماست.
فراموش نکنید که هر چیزی که شانس شما را برای بهتر شدن افزایش دهد، ارزش یادگیری دارد!