تخطَّ إلى المحتوى
ARAB CODEمجتمع المطورين العرب

تقييم الكود المولَّد بالذكاء الاصطناعي: قائمة مراجعة قبل أن تدمجه

درسنُشر ٢٤ أكتوبر ٢٠٢٦ · 0 رد · 2 مشاهدة#ذكاء-اصطناعي#مراجعة-الكود#أمان#اختبارات
قبل 3 ساعات

مقدمة

أدوات توليد الكود توفر وقتاً حقيقياً، لكنها تنتج كوداً يبدو واثقاً حتى عندما يكون خاطئاً: دالة غير موجودة في المكتبة، أو حالة حدية منسية، أو استعلام معرض للحقن. المسؤولية تبقى على من يدمج الكود. هذا الدرس يعطيك منهجاً للمراجعة.

أهداف التعلم

  • التعرف على أنماط الأخطاء الشائعة في الكود المولَّد.
  • مراجعة الصحة بالاختبارات لا بالقراءة فقط.
  • فحص الأمان والتبعيات.
  • معرفة متى ترفض الاقتراح وتكتب بنفسك.

1. أنماط الأخطاء الشائعة

  • واجهات مختلقة: استدعاء دالة أو خيار غير موجود، أو موجود في إصدار آخر من المكتبة.
  • حزم مختلقة: اسم حزمة غير موجود — والمهاجمون يسجلون أحياناً حزماً بأسماء تقترحها النماذج كثيراً.
  • حالات حدية منسية: قائمة فارغة، null، مدخلات ضخمة، المناطق الزمنية، النصوص العربية وUnicode.
  • أمان ضعيف: دمج المدخلات في SQL أو أوامر shell، إيقاف التحقق من شهادات TLS، أسرار ثابتة في الكود.
  • كود قديم: أنماط مهملة (deprecated) لأن بيانات التدريب أقدم من الإصدار الحالي.

2. افهم قبل أن تدمج

اقرأ كل سطر واسأل: ماذا يفعل؟ لماذا هنا؟ ماذا لو كان المدخل فارغاً أو ضخماً أو خبيثاً؟ إن لم تستطع شرح الكود لزميل، لا تدمجه.

3. أثبت الصحة بالاختبارات

# اقتراح مولَّد:
def slugify(title: str) -> str:
    return title.lower().replace(" ", "-")

# اختبارات تكشف قصوره:
def test_slugify_arabic():
    assert slugify("مرحبا بالعالم") == "مرحبا-بالعالم"

def test_slugify_collapses_spaces():
    assert slugify("  Hello   World  ") == "hello-world"   # يفشل: ينتج "--hello---world--"

def test_slugify_strips_symbols():
    assert slugify("C++ & Rust!") == "c-rust"            # يفشل

اكتب الاختبارات من المتطلبات لا من الكود المقترح، وإلا ستختبر أن الكود يفعل ما يفعله فقط.

4. فحص الأمان

// اقتراح خطير: أمر shell بمدخل المستخدم
exec(`convert ${req.query.file} out.png`);

// أفضل: تمرير الوسائط كمصفوفة دون shell، والتحقق من اسم الملف
execFile('convert', [safePath(req.query.file), 'out.png']);

مرّ على قائمة قصيرة:

  • هل تُمرر المدخلات إلى SQL أو shell أو HTML أو مسارات ملفات؟
  • هل هناك مفاتيح أو كلمات مرور ثابتة؟
  • هل أُطفئ تحقق (TLS، CSRF، صلاحيات) «لحل مشكلة»؟
  • هل تُكشف رسائل أخطاء تفصيلية للمستخدم؟

وشغّل أدوات التحليل الثابت (ESLint، Semgrep، Bandit لـ Python) على الكود المقترح كأي كود آخر.

5. التبعيات

قبل تثبيت أي حزمة اقترحها النموذج:

  1. ابحث عنها في السجل الرسمي (npm، PyPI) وتحقق من الاسم حرفاً بحرف.
  2. انظر عدد التنزيلات وتاريخ آخر إصدار والمستودع المرتبط.
  3. اسأل: هل أحتاجها فعلاً أم يكفي سطران من الكود؟

6. الترخيص والمصدر

قد يشبه الكود المولَّد كوداً منشوراً بترخيص له شروط. للمقاطع الكبيرة أو المميزة، تأكد من سياسة مؤسستك ومن عدم نسخ كود مرخص بشروط لا تناسب مشروعك.

7. متى ترفض؟

ارفض وأعد الكتابة عندما يكون الاقتراح أطول من حل تفهمه، أو يستخدم مكتبة لا تعرفها لأمر بسيط، أو تحتاج لتعديله أكثر مما تحتاج لكتابته.

تمرين عملي

  1. اطلب من أداة توليد دالة تتحقق من صحة بريد إلكتروني، ثم اكتب 8 اختبارات من المتطلبات (عناوين صحيحة وخاطئة وحالات حدية) قبل تشغيلها.
  2. اطلب منها كود رفع ملفات في Express وراجعه بقائمة الأمان أعلاه، ودوّن ثلاث مشكلات على الأقل إن وجدت.
  3. شغّل Semgrep على الكود المقترح وقارن ما وجدته بنفسك.

أخطاء شائعة

  • الدمج لأن «الكود يعمل» في تجربة واحدة.
  • كتابة الاختبارات بعد رؤية الكود فتطابقه بدل أن تتحداه.
  • تثبيت حزمة مقترحة دون التحقق من وجودها وسمعتها.
  • قبول كود يطفئ ميزات الأمان.

الخلاصة

عامل الكود المولَّد كأنه طلب دمج من زميل جديد واثق أكثر من اللازم: افهمه، اختبره من المتطلبات، افحص أمانه وتبعياته، وارفضه حين يكون أعقد من المشكلة.

مصادر مقترحة

  • OWASP Top 10 للتطبيقات وOWASP Top 10 for LLM Applications.
  • توثيق Semgrep وBandit.
  • مقالات OpenSSF حول أمن سلسلة توريد البرمجيات.

الرد على الموضوع

سجّل الدخول للمشاركة في النقاش.

نقاشات مشابهة