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

False Proximity: Frozen Code Embeddings Invert Similarity on Behaviourally Divergent Mutant Pairs

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

المؤلفون الأصليون: Keletso J. Letsholo, Nourchene Elleuch Ben Ayed, Achraf Ghorbel, Muath Alrammal

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

المؤلفون الأصليون: Keletso J. Letsholo, Nourchene Elleuch Ben Ayed, Achraf Ghorbel, Muath Alrammal

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

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

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

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

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

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

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

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

جرّب Digest →