رائحة كريهة
في برمجة الحاسوب ، تُعرف " رائحة الكود" بأنها أي سمة في الكود المصدري تُشير إلى مشكلة أعمق. [ 1 ] [ 2 ] ويُعد تحديد ماهية "رائحة الكود" أمرًا شخصيًا، ويختلف باختلاف لغة البرمجة والمطور ومنهجية التطوير.
انتشر مصطلح "إعادة هيكلة الكود" على موقع WardsWiki في أواخر التسعينيات بفضل كينت بيك . [ 3 ] ازداد استخدام المصطلح بعد ظهوره في كتاب مارتن فاولر " إعادة هيكلة الكود: تحسين تصميم الكود الحالي" الصادر عام 1999. [ 4 ] كما يستخدمه مبرمجو منهجية أجايل . [ 5 ]
تعريف
إحدى طرق النظر إلى "روائح الكود" هي من منظور المبادئ والجودة: "روائح الكود هي هياكل معينة في الكود تشير إلى انتهاك مبادئ التصميم الأساسية وتؤثر سلبًا على جودة التصميم". [ 6 ] عادةً لا تُعتبر روائح الكود أخطاءً برمجية؛ فهي ليست غير صحيحة تقنيًا ولا تمنع البرنامج من العمل. بل تشير إلى نقاط ضعف في التصميم قد تُبطئ عملية التطوير أو تزيد من خطر حدوث أخطاء أو أعطال في المستقبل. يمكن أن تكون روائح الكود السيئة مؤشرًا على عوامل تُساهم في تراكم الديون التقنية . [ 1 ] يُطلق روبرت سي. مارتن على قائمة روائح الكود اسم "نظام القيم" لمهارة تطوير البرمجيات. [ 7 ]
خلافاً لهذه التفسيرات المتشددة، كان تعريف كننغهام الأصلي أن الرائحة هي إشارة إلى احتمال وجود خطأ ما، وليست دليلاً على وجود مشكلة بالفعل. [ 3 ]
غالبًا ما يمكن الكشف عن المشكلة الأعمق التي تشير إليها "رائحة الكود" عند إخضاع الكود لدورة تقييم قصيرة ، حيث يُعاد هيكلته بخطوات صغيرة ومُحكمة، ويُفحص التصميم الناتج للتحقق من وجود أي "روائح" أخرى تُشير بدورها إلى الحاجة لمزيد من إعادة الهيكلة. من وجهة نظر المبرمج المسؤول عن إعادة الهيكلة، تُعد "روائح الكود" بمثابة مؤشرات لتحديد وقت إعادة الهيكلة، والتقنيات المُحددة التي يجب استخدامها. وبالتالي، تُعتبر "رائحة الكود" دافعًا لإعادة الهيكلة.
تُعدّ عوامل مثل سهولة فهم الكود، وسهولة تعديله، وسهولة تحسينه لدعم التغييرات الوظيفية، وإمكانية إعادة استخدامه في بيئات مختلفة، ومدى قابليته للاختبار، وموثوقيته، من العوامل التي يمكن استخدامها لتحديد عيوب الكود. [ 8 ]
وجدت دراسة أجريت عام 2015 [ 1 ] باستخدام التحليل الآلي لنصف مليون من عمليات إيداع التعليمات البرمجية المصدرية والفحص اليدوي لـ 9164 عملية إيداع تم تحديد أنها تُظهر "روائح كريهة في التعليمات البرمجية" ما يلي:
- توجد أدلة تجريبية على عواقب "الديون التقنية"، ولكن لا توجد سوى أدلة قصصية حول كيفية حدوث ذلك أو متى أو لماذا يحدث.
- تشير الحكمة الشائعة إلى أن أنشطة الصيانة العاجلة والضغط لتقديم الميزات مع إعطاء الأولوية لوقت الوصول إلى السوق على حساب جودة الكود غالباً ما تكون أسباباً لمثل هذه المشاكل.
يمكن لأدوات مثل Checkstyle و PMD و FindBugs و SonarQube تحديد روائح الكود تلقائيًا.
أمثلة
روائح على مستوى التطبيق
- رمز مكرر
- رمز متطابق أو مشابه جداً موجود في أكثر من موقع.
- جراحة البندقية
- تغيير واحد يجب تطبيقه على عدة فئات في نفس الوقت.
روائح على مستوى الفصل
- فئة كبيرة، أو ما يُعرف بالكائن الإلهي
- فئة تحتوي على أنواع كثيرة جدًا أو تحتوي على العديد من الطرق غير ذات الصلة .
- وصية مرفوضة
- فئة تقوم بتجاوز طريقة من فئة أساسية بطريقة لا يتم فيها احترام عقد الفئة الأساسية من قبل الفئة المشتقة ، مما ينتهك مبدأ استبدال ليسكوف .
- الإفراط في استخدام الأرقام الحرفية أو الأرقام السحرية
- ينبغي ترميز هذه المتغيرات كثوابت مُسماة، لتحسين سهولة القراءة وتجنب أخطاء البرمجة. بالإضافة إلى ذلك، يمكن بل ينبغي نقل القيم الحرفية إلى ملفات/برامج نصية خارجية، أو إلى مخازن بيانات أخرى مثل قواعد البيانات حيثما أمكن، لتسهيل توطين البرنامج إذا كان من المُزمع نشره في مناطق مختلفة. [ 9 ]
- هبوط الهواء
- تحويل نوع البيانات الذي يكسر نموذج التجريد؛ قد يتعين إعادة هيكلة التجريد أو حذفه. [ 10 ]
- مجموعة البيانات
- يحدث هذا عندما يتم تمرير مجموعة من المتغيرات معًا في أجزاء مختلفة من البرنامج. بشكل عام، يشير هذا إلى أنه من الأنسب تجميع المتغيرات المختلفة رسميًا في كائن واحد، وتمرير هذا الكائن الجديد فقط. [ 11 ] [ 12 ]
روائح على مستوى المنهج
- عدد كبير جدًا من المعايير
- إن قائمة المعاملات الطويلة يصعب قراءتها، وتجعل استدعاء الدالة واختبارها أمراً معقداً. وقد يشير ذلك إلى أن الغرض من الدالة غير مصمم بشكل جيد، وأنه ينبغي إعادة هيكلة الكود بحيث يتم تحديد المسؤوليات بطريقة أكثر وضوحاً. [ 13 ]
انظر أيضاً
- النمط المضاد – حل لمشكلة قد يكون شائع الاستخدام ولكنه عمومًا خيار سيئ
- رائحة التصميم – مصطلح في برمجة الحاسوب
- قائمة أدوات تحليل الكود الثابت
- تدهور البرمجيات – تدهور البرمجيات أو فقدانها لوظيفتها بمرور الوقت
مراجع
- توفانو ، ميشيل ؛ بالومبا، فابيو؛ بافوتا، غابرييل؛ أوليفيتو، روكو؛ دي بنتا، ماسيميليانو ؛ دي لوسيا، أندريا؛ بوشيفانيك، دينيس (2015). " متى ولماذا تبدأ رائحة الكود الخاص بك بالظهور سيئة؟" (ملف PDF) . المؤتمر الدولي السابع والثلاثون لهندسة البرمجيات IEEE/ACM لعام 2015. الصفحات 403-414 . CiteSeerX 10.1.1.709.6783 . doi : 10.1109/ICSE.2015.59 . ISBN 978-1-4799-1934-5. S2CID 59100195 .
- ↑ فاولر، مارتن. "CodeSmell" . martinfowler.com/ . تم الاطلاع عليه بتاريخ 19 نوفمبر 2014 .
- 1 2 بيك، كينت. "رائحة الشفرة" . ويكي ويكي ويب . وارد كانينغهام . تم الاسترجاع في 8 أبريل 2020 .
- ↑ فاولر، مارتن (1999). إعادة هيكلة الكود: تحسين تصميم الكود الحالي . أديسون-ويسلي. ISBN 978-0-201-48567-7.
- ↑ بينستوك، أندرو (27-06-2011). "في مدح الشفرة الصغيرة" . أسبوع المعلومات . تم الاسترجاع في 27-06-2011 .
- ↑ سوريانارايانا، جيريش (نوفمبر 2014). إعادة هيكلة البرمجيات لمعالجة عيوب التصميم . مورغان كوفمان. ص 258. ISBN 978-0128013977.
- ↑ مارتن، روبرت سي. (2009). "17: الروائح والأساليب الاستدلالية". الكود النظيف: دليل لحرفية البرمجيات الرشيقة . برنتيس هول. ISBN 978-0-13-235088-4.
- ↑ سوريانارايانا، جيريش، غانيش سامارثيام، وتوشار شارما. إعادة البناء لروائح تصميم البرمجيات: إدارة الديون الفنية / جيريش سوريانارايانا، غانيش سامارثيام، توشار شارما. الطبعة الأولى. والثام, ماساتشوستس ; مورغان كوفمان، 2015. طباعة.
- ↑ "الثوابت والأعداد السحرية" . تم الاطلاع عليه بتاريخ 2020-11-03 .
- ↑ ميلر، جيريمي. "التحويل التنازلي مؤشر على وجود خلل في الكود" . مؤرشف من الأصل في 16 فبراير 2019. تم الاطلاع عليه في 4 ديسمبر 2014 .
- ↑ فاولر، مارتن. "DataClump" . تم الاسترجاع في 2017-02-03 .
- ↑ "أنماط التصميم وإعادة هيكلة الكود" . sourcemaking.com . تم الاطلاع عليه بتاريخ 4 فبراير 2017 .
- ↑ "رائحة الكود 10 - كثرة الجدالات" .
للمزيد من القراءة
- غاروسي، وحيد؛ كوتشوك، باريش (2018). "الروائح في كود اختبار البرمجيات: مسح للمعرفة في الصناعة والأوساط الأكاديمية". مجلة الأنظمة والبرمجيات . 138 : 52-81 . doi : 10.1016/j.jss.2017.12.013 .
- شارما، توشار؛ سبينليس، ديوميديس (2018). "دراسة استقصائية حول روائح البرمجيات" . مجلة الأنظمة والبرمجيات . 138 : 158-173 . doi : 10.1016/j.jss.2017.12.034 .
روابط خارجية
- "CodeSmell" . martinfowler.com . تم الاطلاع عليه بتاريخ 1 مارس 2022 .
- باوندي، ديفيد، سرطان البرمجيات: العلامات التحذيرية السبع المبكرة أو هنا ، ملاحظات هندسة البرمجيات ACM SIGSOFT، المجلد 18، العدد 2 (أبريل 1993)، رابطة آلات الحوسبة، نيويورك، نيويورك، الولايات المتحدة الأمريكية
- حكايات شعبية عن برمجة الحاسوب
- حكايات شعبية في هندسة البرمجيات
