Smells of AI-Generated Code.
Recurring problems in code written by AI coding assistants — how to recognize each one, why models produce it, how to fix it, and the rules that detect it.
يقوم مساعد الذكاء الاصطناعي بتغليف الكود في دوال أو كلاسات أو واجهات (interfaces) إضافية تزيد من مستويات غير المباشرة (indirection) دون إخفاء أي تعقيد أو تمكين إعادة الاستخدام — وهي نماذج مجردة تقوم بمجرد تمرير الاستدعاء إلى موضع استدعاء واحد.
يميل مساعدو الذكاء الاصطناعي إلى لصق نسخة جديدة معدلة قليلاً من المنطق البرمجي الحالي بدلاً من إعادة استخدام دالة مشتركة أو استخراجها، مما يؤدي إلى تضخيم الكود المكرر مع اختفاء إعادة الهيكلة بصمت.
يقوم مساعدو الذكاء الاصطناعي بتكديس كود جديد شبه مكرر بجوار ما هو موجود بالفعل بدلاً من إعادة تنظيمه، مما يؤدي إلى زيادة تكرار الأكواد واختفاء إعادة الهيكلة — العمل التطويري الذي يحافظ على صحة قاعدة الكود — بصمت.
يقوم النموذج بكتابة كود مخصص يدوياً للقيام بشيء تقوم به بالفعل المكتبة القياسية، أو تبعية مثبتة، أو دالة مساعدة متوفرة مسبقاً في المستودع — مما يضيف منطقاً مكرراً وأقل اختباراً بدلاً من استدعاء الكود الموجود بالفعل.
الكود البرمجي المولد بالذكاء الاصطناعي الذي يستدعي دوالاً أو أساليب أو معاملات أو مفاتيح إعداد أو حزم تبدو معقولة ولكنها غير موجودة في الإصدار الفعلي للمكتبة التي تعتمد عليها.
يميل مساعدو الذكاء الاصطناعي إلى توليد كود يتعامل فقط مع الحالة الناجحة والسليمة — مع تخطي التحقق من صحة المدخلات، ومعالجة الأخطاء، وفحوصات القيم الفارغة/null، وحالات الحافة — بحيث يعمل الكود في العرض التوضيحي وينهار في الإنتاج الفعلي.
يصدر مساعدو الذكاء الاصطناعي كوداً يعمل بنجاح ولكنه يغفل بصمت عناصر التحكم الأمنية التي يضيفها المطور البشري بشكل طبيعي — مثل التحقق من صحة المدخلات، والمصادقة، وترميز المخرجات، ومعالجة الأسرار — وذلك لأن "الكود يُجمع ويعيد رمز الحالة 200" يبدو كافياً.
التعليقات التي تمثل مخلفات محادثة التوليد — مثل إعادة صياغة الأوامر الموجهة، والشرح خطوة بخطوة، والالتفاتات الحوارية الجانبية، وحذف الأكواد المؤقت مثل `// ... rest of the code here` — والتي تم حفظها في الكود المصدري بدلاً من التوثيق الحقيقي.
يقوم مساعدو الذكاء الاصطناعي بحشو المنطق البسيط بتعليقات مكررة، ومظاهر دفاعية زائدة، وكتل شبه مكررة تم نسخها ولصقها بدلاً من إعادة استخدام أو استخراج الكود الحالي، مما يؤدي إلى تضخيم عدد السطور دون إضافة أي قيمة حقيقية.
يقوم مساعد الذكاء الاصطناعي بتسمية الكود الجديد باستخدام عناصر نائبة عامة أو اصطلاح جديد يتجاهل المعرفات الحالية ومصطلحات النطاق الخاصة بالمستودع، مما يؤدي إلى تآكل قابلية القراءة وتوليد مفاهيم مكررة وذات وصف خاطئ.
الكود البرمجي المولد بالذكاء الاصطناعي الذي يتجاهل بصمت الاصطلاحات المتبعة في المستودع — من خلال إعادة اختراع الدوال المساعدة، واختيار المكتبة الخاطئة، واستخدام تسمية ومعالجة أخطاء خارجة عن الأسلوب المتبع — مما يودي بقاعدة الكود إلى الانحراف نحو أسلوب عام يمثل متوسط الإنترنت.
يقوم مساعدو الذكاء الاصطناعي ببث واجهات برمجة التطبيقات والمكتبات والأساليب البرمجية التي كانت شائعة قبل سنوات ولكنها أصبحت الآن مهملة أو محذوفة أو مستبدلة، وذلك بثقة تامة لأن معرفتهم البارامترية متجمدة عند تاريخ انتهاء التدريب، ولا يزال النمط القديم هو الأكثر شيوعاً إحصائياً في مجموعة بياناتهم.
يقوم مساعدو الذكاء الاصطناعي بالتحوط ضد حالات فشل لا يمكن حدوثها، مما يلتف حول الكود الآمن بالفعل بفحوصات null زائدة عن الحاجة، وجمل حماية ميتة، وكتل try/catch شاملة تزيد من التعقيد دون تقديم أي حماية فعلية.
يقوم مساعدو الذكاء الاصطناعي بكتابة القيم الخاصة بالبيئة — مثل روابط URL، والمنافذ، والمسارات، وفترات انتهاء الصلاحية، والمفاتيح، والأرقام السحرية — مباشرة في منطق الكود بدلاً من قراءتها من ملف الإعدادات أو البيئة، وذلك لأن القيمة الحرفية هي الرمز التالي الأكثر احتمالاً للظهور، كما يفتقر النموذج إلى الوعي بوجود طبقة الإعدادات الحالية لديك.