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

Integrating Structural and Semantic Analysis for Code Smell Refactoring Prediction

تقترح هذه الورقة وتقيم تجريبياً إطار عمل لتعلم الآلة للتنبؤ بإعادة هيكلة روائح الكود (code smell refactoring) في مشاريع جافا، مبرهنةً على أن الجمع بين مقاييس كائنية التوجه التقليدية وبين التضمينات الدلالية والنحوية القائمة على الرسوم البيانية يثمر عن تنبؤات موثوقة من خلال التقاط إشارات متكاملة تتجاوز ما توفره المقاييس الهيكلية وحدها.

المؤلفون الأصليون: Andrea Lanza, Matteo Bochicchio, Francesca Arcelli Fontana

نُشر 2026-10-16
📖 5 دقيقة قراءة🧠 قراءة متعمّقة

المؤلفون الأصليون: Andrea Lanza, Matteo Bochicchio, Francesca Arcelli Fontana

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

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

وضع فريق من الباحثين في جامعة ميلانو بيكوكا (University of Milano-Bicocca) هدفاً يتمثل في معرفة ما إذا كان بإمكان الآلات تعلم التنبؤ بهذه القرارات البشرية. أرادوا معرفة ما إذا كان بإمكان الكمبيوتر النظر إلى قطعة من الكود، وتحديد خلل ما، وتخمين ما إذا كان المطور سيقوم بتنظيفها في نهاية المطاف بدقة. وللقيام بذلك، بنوا نظاماً يجمع بين طريقتين مختلفتين للنظر إلى الكود. الطريقة الأولى تقليدية: وهي عد الخصائص مثل طول الدالة (method) أو عدد المتغيرات التي تستخدمها. أما الطريقة الثانية فهي أكثر حداثة وتعقيداً: وهي تحويل الكود إلى خريطة لمنطقه وسلوكه، ثم ترجمة تلك الخريطة إلى تمثيل رياضي يمكن للكمبيوتر تحليله بحثاً عن أنماط خفية. ومن خلال تغذية هذه المعلومات المجمعة في نماذج تعلم الآلة، اختبر الباحثون ما إذا كانت أجهزة الكمبيوتر قادرة على تعلم القواعد الدقيقة التي توجه المطورين عندما يختارون إعادة الهيكلة.

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

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

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

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

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

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

جرّب Digest →