Detecting Object-Oriented Code Smells through Social Network Analysis
تقترح هذه الورقة نهجاً مبتكراً للكشف عن روائح الكود الموجه للكائنات من خلال نمذجة مكونات البرمجيات وتفاعلاتها كشبكات اجتماعية وتطبيق مقاييس تحليل الشبكات الاجتماعية على أربعة مشاريع مفتوحة المصدر بلغة جافا للكشف عن عيوب التصميم الخفية.
البحث الأصلي مرخَّص بموجب CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). هذا شرح مولَّده بالذكاء الاصطناعي للبحث أدناه. لم يكتبه المؤلفون ولم يصادقوا عليه. وللتحقق من الدقة التقنية، يرجى الرجوع إلى البحث الأصلي. اقرأ إخلاء المسؤولية الكامل
تُبنى البرمجيات من عدد لا يحصى من التعليمات الصغيرة التي تعمل معاً، تماماً كما تُبنى المدينة من مبانٍ فردية وطرق تربط بينها. وعندما تكون المدينة مخططة جيداً، يتدفق المرور بسلاسة، ويمكن إضافة أحياء جديدة دون فوضى. في عالم برمجة الحاسوب، يُسمى هذا التنظيم "التصميم الموجه للكائنات" (object-oriented design)، حيث يتم تجميع الكود في وحدات مستقلة تتفاعل مع بعضها البعض. ومع ذلك، تماماً كما يمكن أن تعاني المدينة من تقاطعات مزدحمة أو مبانٍ مهجورة، يمكن للبرمجيات أن تطور عيوباً هيكلية تُعرف باسم "روائح الكود" (code smells). هذه ليست أخطاءً تسبب انهيار البرنامج، بل هي علامات على أن التصميم أصبح فوضوياً، أو صعب الفهم، أو صعب الإصلاح. وإذا تُركت دون معالجة، فإن هذه الروائح تجعل البرمجيات هشة ومكلفة في الصيانة، مما يجبر المطورين على قضاء المزيد من الوقت في فك العقد بدلاً من بناء ميزات جديدة.
لعقود من الزمن، حاول الباحثون إيجى هذه العيوب تلقائياً، غالباً عن طريق عد أسطر الكود أو قياس عدد المتغيرات التي يستخدمها قسم واحد. ورغم كون هذه الطرق مفيدة، إلا أنها أحياناً تغفل الصورة الأكبر، وتفشل في رؤية كيف تعتمد الأجزاء المختلفة من النظام على بعضها البعض بطرق معقدة. ويقترح نهج جديد، فصلته دراسة حديثة أجراها محمد مدة من جامعة الملك سعود، النظر إلى البرمجيات ليس فقط كمجموعة من الملفات، بل كشبكة اجتماعية. في هذه الرؤية، كل فئة (class) من الكود هي شخص، وكل مرة يستخدم فيها جزء من الكود جزءاً آخر، هي تفاعل اجتماعي. ومن خلال تطبيق نفس الأدوات الرياضية المستخدمة لرسم خرائط الصداقات والتأثير في المجتمعات البشرية، طور الباحث طريقة لرصد نقاط الضعف الهيكلية هذه بوضوح أكبر.
ركزت الدراسة على أربعة مشاريع برمجية مفتوحة المصدر مشهورة مكتوبة بلغة جافا (Java): وهي JUnit، وSpring، وApache Commons BCEL، وGuava. وتتفاوت هذه المشاريع بشكل كبير في الحجم، حيث تتراوح من بضع مئات إلى أكثر من أربعة آلاف وحدة كود متميزة. ولتحليلها، قام الباحث أولاً باستخراج كل فئة (class) داخل هذه المشاريع ورسم خريطة لكيفية تفاعلها بالضبط. إذا احتاجت فئة واحدة إلى بيانات أو وظيفة من فئة أخرى، يتم رسم خط بينهما، مما ينشئ شبكة ضخمة من الاتصالات. ثم تم استيراد هذه الشبكة إلى أداة تصور متخصصة تسمى Gephi، والتي سمحت للباحث برؤية الهيكل الكامل للبرمجيات كخريطة واحدة مترابطة.
بمجرد نمذجة البرمجيات كشبكة، طبق الباحث قياسات محددة لتحديد "الروائح". في الشبكة الاجتماعية، الشخص الذي يعرف الجميع ويجلس في مركز العديد من المحادثات يكون شديد الاتصال. وفي البرمجيات، الفئة التي تتفاعل مع الكثير من الفئات الأخرى غالباً ما تشير إلى "فئة الإله" (God Class)، وهي وحدة تولت مسؤوليات كثيرة جداً وتحاول القيام بكل شيء. وعلى العكس من ذلك، فإن الشخص الذي لا يعرف أحداً ويجلس وحيداً على حافة الخريطة يمثل "الكود الميت" (Dead Code)، وهو قطعة برمجية لم تعد مستخدمة. وكشفت أنماط أخرى، مثل مجموعة من الأشخاص الذين يتحدثون مع بعضهم البعض فقط ولكن لا يتحدثون أبداً مع العالم الخارجي، أو شخص واحد يعمل كجسر وحيد بين مجموعتين منفصلتين، عن عيوب مثل "فئات البيانات" (Data Classes) التي تحمل المعلومات دون القيام بأي شيء، أو "جراحة بندقية" (Shotgun Surgery)، حيث يتطلب تغيير واحد تعديلات في أماكن كثوة مختلفة.
أظهرت النتائج أن هذا النهج القائم على الشبكات يمكنه تصفية الغالبية العظمى من الكود السليم بفعالية، مما يترك للمطورين قائمة أصغر بكثير من المشتبه بهم لفحصهم. في أكبر مشروع تمت دراسته، والذي يحتوي على أكثر من أربعة آلاف فئة، حددت الطريقة حوالي 17 بالمائة فقط كأجزاء قد تكون إشكالية. وفي مشروع آخر يحتوي على ما يقرب من ألف فئة، حددت نحو 35 بالمائة تحتاج إلى اهتمام. جعلت أدوات التصوير هذه النتلجة فورية وبديهية؛ حيث ظهرت "فئات الإله" كمركز كبير ساطع الألوان في وسط الخريطة، بينما ظهر "الكود الميت" و"الفئات غير المستخدمة" كعقد صغيرة وخافتة مدفوعة إلى الحواف تماماً، وغالباً ما تكون معزولة في جزر منفصلة.
لا يدعي هذا النهج استبدال الحكم البشري أو تحديد كل عيب بدقة دون خطأ. بدلاً من ذلك، هو يعمل كأداة فرز قوية، وسيلة لتقليص المهمة المرهقة لمراجعة قاعدة كود كاملة إلى قائمة قابلة للإدارة من الأجزاء الأكثر غرابة من الناحية الهيكلية. ومن خلال التركيز على العلاقات بين قطع الكود بدلاً من مجرد محتواها الداخلي، يقدم هذا النهج منظوراً جديداً لمشكلة قديمة. وهو يشير إلى أن صحة نظام برمجيات ما غالباً ما تكون مرئية في نمط اتصالاتها، ومن خلال رسم خرائط هذه الأنماط، يمكن للمطورين العثين على نقاط الضعف الخفية التي تهدد استقرار ابتكاراتهم الرقمية قبل أن تصبح غير قابلة للسيطرة.
غارق في أبحاث مجالك؟
تصلك نشرة يومية بأحدث الأبحاث المطابقة لكلماتك البحثية المفتاحية — مع ملخصات تقنية، بلغتك.