← أحدث الأبحاث
💻 علوم الحاسوب

An LLM-based Technique for Detection of Code Clones Across Open Source Microservice Repository Forks

تُظهر هذه الدراسة أن مسار عمل يعتمد على تقنية التوليد المعزز بالاسترجاع (RAG) باستخدام نموذج Codestral-22B مع التلقين المستمر بأسلوب القليل من الأمثلة (few-shot continuous prompting) يحدد بفعالية استنساخات الكود الدلالية وأنماط إعادة الاستخدام في تفرعات الخدمات المصغرة مفتوحة المصدر، متفوقاً بذلك على الأدوات التقليدية القائمة على بناء الجملة رغم القيود الحالية في الاستدعاء.

المؤلفون الأصليون: Jamie Kemman, Shreya Nakum, Alexander Bakhtin, Matteo Esposito, Tomas Cerny, Valentina Lenarduzzi, Davide Taibi

نُشر 2026-10-21
📖 4 دقيقة قراءة☕ قراءة في استراحة قهوة

المؤلفون الأصليون: Jamie Kemman, Shreya Nakum, Alexander Bakhtin, Matteo Esposito, Tomas Cerny, Valentina Lenarduzzi, Davide Taibi

البحث الأصلي مرخَّص بموجب CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). ✨ هذا شرح مولَّده بالذكاء الاصطناعي للبحث أدناه. لم يكتبه المؤلفون ولم يصادقوا عليه. وللتحقق من الدقة التقنية، يرجى الرجوع إلى البحث الأصلي. اقرأ إخلاء المسؤولية الكامل

في عالم تطوير البرمجيات الواسع والمتعاون، غالبًا ما يقوم المبرمجون ببناء تطبيقات جديدة عبر أخذ كود موجود وتكييفه لغرض مختلف. هذه الممارسة، المعروفة باسم "التفريع" (forking)، هي محرك الابتكار في المصادر المفتوحة، مما يسمح للفرق بالوقوف على أكتاف العمالقة بدلاً من البدء من الصفر. ومع ذلك، مع نمو هذه المشاريع وتفرعها، تظهر تعقيدات خفية: يمكن أن يصبح الكود داخلها عبارة عن شبكة متشابكة من النسخ المكررة. بعض النسخ هي نسخ متطابقة تماماً، سطر بسطر، بينما البعض الآخر عبارة عن نسخ أعيدت كتابتها بذكاء لتؤدي المهمة نفسها ولكنها تبدو مختلفة تماماً من حيث المظهر. تُعرف هذه النسخ باسم "استنساخ الكود" (code clones). وبالنسبة لمسؤولي صيانة الأنظمة البرمجية الضخمة، خاصة تلك المبنية كمجموعة من الخدمات الصغيرة والمستقلة، فإن العثور على هذه المكررات يعد مهمة جسيمة. فالأدوات التقليدية ممتازة في رصد النسخ المتطابقة، لكنها غالباً ما تفشل في إدراك متى تم إعادة هيكلة قطعتين من الكود لتؤديا الوظيفة نفسها بطرق مختلفة تماماً. إن فهم أين وكيف توجد هذه المكررات أمر بالغ الأهمية، لأنه يكشف كيف تتطور البرمجيات، وأين تكمن مخاطر عدم الاتساق، وكم من الجهد مطلوب حقاً لإبقاء النظام يعمل بسلاسة.

لقد شرع فريق من الباحثين مؤخراً في حل هذه المشكلة عبر اختبار نوع جديد من الأدوات الرقمية: نماذج اللغات الكبيرة (LLMs). هذه هي نفس أنظمة الذكاء الاصطناعي القوية التي يمكنها كتابة القصص أو الإجابة على الأسئلة، ولكن تم تدريبها هنا لفهم منطق كود الكمبيوتر. أراد الباحثون معرفة ما إذا كانت هذه النماذج يمكن أن تعمل كمجهر متطور، لا يرصد فقط الكود المتطابق، بل أيضاً الكود المتشابه دلالياً (semantically similar) الذي تغفله الأدوات التقليدية. وقد ركزوا تحقيقهم على مشاريع الخدمات المصغرة (microservice) مفتوحة المصدر، وهي أنظمة برمجية حديثة مبنية من أجزاء صغيرة قابلة للتبادل. وللبدء، كان عليهم تعليم هذه النماذج كيفية التعرف على الأنواع المختلفة من استنساخ الكود. فقاموا بجمع مجموعة بيانات ضخمة مكونة من عشرة آلاف زوج من مقتطفات كود لغة ++C، نصفها كان معروفاً بأنه متطابق وظيفياً ولكنه مختلف تركيبياً، والنصف الآخر غير مرتبط. واختبروا ثلاثة نماذج مختلفة من الذكاء الاصطناعي، تتراوح من نظام عام الأغراض إلى نموذجين متخصصين مصممين خصيصاً لمهام البرمجة. كما جربوا طرقاً مختلفة لتوجيه النماذج لأداء المهمة، حيث جربوا كل شيء بدءاً من التعليمات البسيطة وصولاً إلى المطالبات المعقدة التي تقدم أمثلة وتطلب درجات الثقة.

كانت نتائج هذا الاختبار الأولي كاشفة. فقد وجد الباحثون أن نماذج البرمجة المتخصة كانت متفوقة بمراحل على النموذج العام. ومن بينها، برز نموذج يسمى "Codestral" كالأكثر دقة، حيث حقق أعلى دقة إجمالية بلغت 65.5%، متفوقاً على النموذج المتخصص الآخر وعلى النظام العام. ومع ذلك، كشفت الدراسة أيضاً عن قصور كبير: فحتى أفضل النماذج كانت ترتكب الأخطاء. فقد كانت تخفق في رصد المكررات التي يُفترض بها إيجادها، حيث فشلت في التعرف عليها في حوالي أربعين بالمائة من الحالات. وبينما كانت جيدة في تحديد الكود المختلف بالتأكيد، إلا أنها كانت حذرة للغاية عندما يتعلق الأمر برصد التشابهات الدقيقة. هذا المعدل المرتفع من حالات الرصد المفقودة يعني أنه، في الوقت الحالي، ليست هذه الأدوات القوية موثوقة بما يكفي لاستخدامها كطريقة وحيدة لإدارة الكود في بيئة احترافية ومؤتمتة. إنها تعمل كمساعدين مفيدين، لكن لا يمكنها بعد أن تحل محل الحكم البشري أو طرق الكشف الراسخة.

مسلحين بأفضل نموذج أداءً وأكثر طريقة فعالة لتوجيهه، التفت الباحثون بعد ذلك إلى العالم الحقيقي. اختاروا اثنين وعشرين زوجاً من مستودعات الخدمات المصغرة مفتوحة المصدر، حيث كان أحدهما هو المشروع الأصلي والآخر هو "الفرع" (fork) الذي عدله مجموعة أخرى من المطورين. قاموا بتغذية قواعد الأكواد هذه في نظامهم لرسم خريطة توضح بالضبط أنواع المكررات الموجودة بين الأصل والفرع. رسمت النتائج صورة واضحة لكيفية تطور هذه المشاريع. كان النوع الأكثر شيوعاً من المكررات التي وجدوها هو النسخة المتطابقة، حيث ظل الكود دون تغيير. والثاني الأكثر شيوعاً كان "استنساخ النوع الثالث" (Type-3 clone)، حيث تم تعديل الكود بالإضافات أو الحذف مع الاحتفاظ بوظيفته الأصلية. ومن المثير للدهشة أن الكود الذي تمت إعادة كتابته بالكامل ليؤدي الشيء نفسه بطريقة مختلفة تماماً كان أقل شيوعاً من الأنواع الأخرى في هذه المشاريع المحددة. وهذا يشير إلى أنه عندما يقوم المطورون بعمل "تفريع" لخدمة مصغرة، فإنهم يميلون إلى الحفاظ على الهيكل الأساسي بدلاً من إعادة اختراع العجلة بالكامل.

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

غارق في أبحاث مجالك؟

تصلك نشرة يومية بأحدث الأبحاث المطابقة لكلماتك البحثية المفتاحية — مع ملخصات تقنية، بلغتك.

جرّب Digest →