إعادة استخدام الكود
إعادة استخدام الكود هي ممارسة استخدام الكود المصدري الموجود لتطوير البرمجيات بدلاً من كتابة كود جديد. أما إعادة استخدام البرمجيات فهي مصطلح أوسع يشمل استخدام أي أصل برمجي موجود لتطوير البرمجيات بدلاً من إعادة تطويره. [ 1 ] [ 2 ] : 7 يُعتبر الأصل الذي يسهل إعادة استخدامه نسبياً ويقدم قيمة كبيرة ذا قابلية عالية لإعادة الاستخدام .
يمكن تحقيق إعادة استخدام التعليمات البرمجية بطرق مختلفة اعتمادًا على مدى تعقيد لغة البرمجة المختارة، وتتراوح من أساليب منخفضة المستوى مثل نسخ التعليمات البرمجية ولصقها (على سبيل المثال عبر مقتطفات )، [ 3 ] وظائف بسيطة ( إجراءات أو إجراءات فرعية ) أو مجموعة من الكائنات أو الوظائف المنظمة في وحدات (مثل المكتبات ) [ 4 ] [ 2 ] : 7 أو مساحات أسماء مخصصة ، وحزم أو أطر عمل أو مجموعات برامج في مستويات أعلى.
إعادة استخدام الكود تعني وجود تبعيات قد تجعل صيانة الكود أكثر صعوبة. وقد وجدت دراسة واحدة على الأقل أن إعادة استخدام الكود على مستوى الفئات يقلل من الديون التقنية . [ 5 ]
ملخص
لطالما كان إعادة استخدام التعليمات البرمجية المخصصة ممارسة شائعة منذ بدايات البرمجة . فقد دأب المبرمجون على إعادة استخدام أجزاء من التعليمات البرمجية والقوالب والدوال والإجراءات. إلا أن إعادة استخدام البرمجيات كمجال دراسي معترف به في هندسة البرمجيات لم يظهر إلا في عام 1968 عندما اقترح دوغلاس ماكلروي من مختبرات بيل بناء صناعة البرمجيات على المكونات القابلة لإعادة الاستخدام.
يهدف إعادة استخدام الكود إلى توفير الوقت والموارد وتقليل التكرار من خلال الاستفادة من الأصول التي تم إنشاؤها بالفعل بشكل أو بآخر ضمن عملية تطوير منتج البرمجيات. [ 6 ] الفكرة الأساسية في إعادة الاستخدام هي أن أجزاءً من برنامج حاسوبي كُتبت في وقت ما يمكن أو ينبغي استخدامها في بناء برامج أخرى تُكتب في وقت لاحق.
قد يستلزم إعادة استخدام الكود إنشاء نسخة مُدارة بشكل منفصل من الأصول القابلة لإعادة الاستخدام. وبينما يُعد الكود المورد الأكثر شيوعًا لإعادة الاستخدام، فإن الأصول الأخرى التي يتم إنشاؤها أثناء دورة التطوير قد تُتيح فرصًا لإعادة الاستخدام: مكونات البرمجيات، ومجموعات الاختبار، والتصاميم، والوثائق، وما إلى ذلك. [ 7 ]
تُعدّ مكتبة البرمجيات مثالًا جيدًا على إعادة استخدام الشيفرة. قد يقرر المبرمجون إنشاء تجريدات داخلية بحيث يمكن إعادة استخدام أجزاء معينة من برامجهم، أو قد يُنشئون مكتبات مخصصة لاستخدامهم الخاص. من بين الخصائص التي تُسهّل إعادة استخدام البرمجيات: النمطية ، والترابط المنخفض ، والتماسك العالي ، وإخفاء المعلومات ، وفصل الاهتمامات .
لكي يتمكن الكود المكتوب حديثًا من استخدام جزء من كود موجود، يجب تحديد نوع من الواجهات أو وسائل الاتصال. وتشمل هذه عادةً "استدعاء" أو استخدام روتين فرعي أو كائن أو فئة أو نموذج أولي . في المؤسسات، تُضفى الطابع الرسمي على هذه الممارسات وتُوحّد من خلال هندسة المجال ، والمعروفة أيضًا بهندسة خط إنتاج البرمجيات .
إن الممارسة العامة المتمثلة في استخدام إصدار سابق من برنامج موجود كنقطة انطلاق للإصدار التالي، هي أيضاً شكل من أشكال إعادة استخدام التعليمات البرمجية.
تتضمن بعض أساليب "إعادة استخدام" الكود نسخ جزء من الكود أو كله من برنامج موجود إلى برنامج جديد. ورغم أن هذه الطريقة قد تُتيح للمؤسسات تسريع طرح منتج جديد في السوق ، إلا أنها قد تُعاني لاحقاً من العديد من مشاكل تكرار الكود نفسها الناتجة عن البرمجة بالنسخ واللصق .
عمل العديد من الباحثين على جعل إعادة الاستخدام أسرع وأسهل وأكثر منهجية، وجزءًا لا يتجزأ من عملية البرمجة المعتادة. هذه بعض الأهداف الرئيسية وراء ابتكار البرمجة كائنية التوجه ، التي أصبحت إحدى أكثر أشكال إعادة الاستخدام الرسمية شيوعًا. أما البرمجة العامة ، فقد ظهرت لاحقًا .
ثمة وسيلة أخرى أحدث تتمثل في استخدام " مولدات " برمجية، وهي برامج قادرة على إنشاء برامج جديدة من نوع معين، بناءً على مجموعة من المعايير التي يختارها المستخدمون. ومن مجالات الدراسة المتعلقة بهذه الأنظمة البرمجة التوليدية والبرمجة الوصفية .
أنواع إعادة الاستخدام
فيما يتعلق بالدوافع والعوامل المحركة، يمكن أن تكون إعادة الاستخدام كالتالي:
- انتهازي – أثناء الاستعداد لبدء مشروع ما، يدرك الفريق أن هناك مكونات موجودة يمكنهم إعادة استخدامها.
- مخطط له - يقوم فريق بتصميم المكونات بشكل استراتيجي بحيث يمكن إعادة استخدامها في المشاريع المستقبلية.
يمكن تصنيف إعادة الاستخدام بشكل أكبر:
- إعادة الاستخدام الداخلي – يقوم الفريق بإعادة استخدام مكوناته الخاصة. قد يكون هذا قرارًا تجاريًا، حيث قد يرغب الفريق في التحكم في مكون بالغ الأهمية للمشروع.
- إعادة الاستخدام الخارجي – قد يختار الفريق ترخيص مكون من طرف ثالث. عادةً ما تتراوح تكلفة ترخيص مكون من طرف ثالث بين 1% و20% من تكلفة تطويره داخليًا. [ 8 ] يجب على الفريق أيضًا مراعاة الوقت اللازم للعثور على المكون وتعلمه ودمجه.
فيما يتعلق بشكل أو بنية إعادة الاستخدام، يمكن أن يكون الكود: [ 9 ]
- المرجع - يحتوي رمز العميل على مرجع إلى رمز معاد استخدامه، وبالتالي فإن لهما دورات حياة متميزة ويمكن أن يكون لهما إصدارات متميزة.
- Forked – يحتوي كود العميل على نسخة محلية أو خاصة من الكود المعاد استخدامه، وبالتالي فإنهما يشتركان في دورة حياة واحدة وإصدار واحد.
غالبًا ما يُنصح بتجنب إعادة استخدام النسخ المتفرعة لأنها تُعدّ شكلاً من أشكال تكرار الكود، مما يتطلب تصحيح كل خطأ في كل نسخة، كما أن التحسينات التي تُجرى على الكود المُعاد استخدامه تحتاج إلى دمجها يدويًا في كل نسخة وإلا ستصبح قديمة. مع ذلك، قد تُوفر إعادة استخدام النسخ المتفرعة مزايا مثل العزل، ومرونة تغيير الكود المُعاد استخدامه، وسهولة التغليف والنشر وإدارة الإصدارات. [ 9 ]
منهجية
إعادة استخدام البرمجيات بشكل منهجي استراتيجية لزيادة الإنتاجية وتحسين جودة صناعة البرمجيات. ورغم بساطة المفهوم، إلا أن تطبيق إعادة استخدام البرمجيات بنجاح أمرٌ صعبٌ عمليًا. ويُعزى ذلك جزئيًا إلى اعتماد إعادة استخدام البرمجيات على السياق الذي تُطبَّق فيه. ومن بين المشكلات التي يجب معالجتها والمتعلقة بإعادة استخدام البرمجيات بشكل منهجي ما يلي: [ 10 ]
- إن وجود رؤية واضحة ومحددة للمنتج يعتبر أساسًا ضروريًا لخط إنتاج البرمجيات (SPL).
- إن اتباع استراتيجية تنفيذية تطورية سيكون استراتيجية أكثر واقعية للشركة.
- هناك حاجة إلى دعم إداري وقيادة مستمرين لضمان النجاح.
- هناك حاجة إلى هيكل تنظيمي مناسب لدعم هندسة SPL.
- إن تغيير طريقة التفكير من شركة تركز على المشاريع إلى شركة تركز على المنتجات أمر ضروري.
أمثلة
مكتبات البرامج
من الأمثلة الشائعة لإعادة استخدام الشيفرة البرمجية استخدام مكتبة برمجية . فالعديد من العمليات الشائعة، مثل تحويل المعلومات بين تنسيقات معروفة، والوصول إلى وحدات التخزين الخارجية، والتفاعل مع البرامج الخارجية، أو معالجة المعلومات (الأرقام، والكلمات، والأسماء، والمواقع، والتواريخ، إلخ) بطرق شائعة، تحتاجها العديد من البرامج المختلفة. يمكن لمطوري البرامج الجديدة استخدام الشيفرة الموجودة في مكتبة برمجية لأداء هذه المهام، بدلاً من "إعادة اختراع العجلة" بكتابة شيفرة جديدة تمامًا مباشرةً في البرنامج لتنفيذ العملية. غالبًا ما تتميز تطبيقات المكتبات البرمجية بأنها مختبرة جيدًا وتغطي الحالات غير المألوفة أو النادرة. أما عيوبها فتتمثل في عدم القدرة على تعديل التفاصيل التي قد تؤثر على الأداء أو المخرجات المطلوبة، بالإضافة إلى الوقت والتكلفة اللازمين لاقتناء المكتبة وتعلمها وتكوينها. [ 11 ]
أنماط التصميم
نمط التصميم هو حل عام لمشكلة متكررة. أنماط التصميم مفاهيمية أكثر منها عملية، ويمكن تعديلها لتناسب الاحتياجات المحددة. مع ذلك، يمكن إعادة استخدام الفئات المجردة والواجهات لتطبيق أنماط معينة.
الأطر
عادةً ما يعيد المطورون استخدام أجزاء كبيرة من البرامج عبر تطبيقات وأطر عمل تابعة لجهات خارجية، على الرغم من أن أطر العمل عادة ما تكون خاصة بمجال معين وقابلة للتطبيق فقط على مجموعات من التطبيقات .
دالة من الرتبة العليا
في البرمجة الوظيفية، يمكن استخدام الدوال ذات الرتبة العليا في العديد من الحالات التي كانت تستخدم فيها أنماط التصميم أو الأطر سابقًا.
الحوسبة القديمة
يشمل الحوسبة القديمة إعادة استخدام التعليمات البرمجية، ببساطة لأن البرامج القديمة يتم تشغيلها على أجهزة كمبيوتر قديمة، أو برامج محاكاة لها.
أمن الحاسوب
في مجال أمن الحاسوب ، يُستخدم إعادة استخدام التعليمات البرمجية كطريقة لاستغلال الثغرات الأمنية في البرمجيات. [ 12 ] عندما لا يتمكن المهاجم من إدخال تعليمات برمجية مباشرة لتعديل مسار التحكم في البرنامج، كما هو الحال في وجود وسائل حماية من حقن التعليمات البرمجية مثل W^X ، فإنه يستطيع إعادة توجيه مسار التحكم إلى تسلسلات التعليمات البرمجية الموجودة في الذاكرة.
من أمثلة هجمات إعادة استخدام التعليمات البرمجية: هجوم العودة إلى مكتبة libc ، والبرمجة الموجهة نحو العودة ، والبرمجة الموجهة نحو القفز. [ 12 ] [ 13 ]
عناصر
في سياق البرمجة الكائنية، يُمثل المكون مجموعة من الفئات التعاونية (أو فئة واحدة فقط) وواجهاتها. وتُتيح هذه الواجهات إمكانية استبدال المكونات. كما يُمكن عزل المكونات القابلة لإعادة الاستخدام ومزامنتها بين مستودعات إدارة تكوين البرمجيات باستخدام تقنيات إدارة شفرة المصدر للمكونات ( CSCM ).
أجهزة الكمبيوتر الخارجية
يمكن أن يشمل مفهوم "إعادة استخدام الكود" تطبيقات هندسية خارج نطاق البرمجيات. فعلى سبيل المثال، يتيح النمذجة البارامترية في التصميم بمساعدة الحاسوب إنشاء تصاميم قابلة لإعادة الاستخدام. ويؤدي التوحيد القياسي إلى إنشاء أجزاء قابلة للتشغيل البيني، والتي يمكن إعادة استخدامها في سياقات متعددة.
نقد
تؤدي إعادة استخدام الكود إلى الاعتماد على المكون المُعاد استخدامه. وقد رأى روب بايك أن "القليل من النسخ أفضل من القليل من الاعتماد". عندما انضم إلى جوجل ، كانت الشركة تُولي اهتمامًا كبيرًا لإعادة استخدام الكود. وهو يعتقد أن قاعدة بيانات جوجل لا تزال تعاني من نتائج تلك السياسة السابقة من حيث سرعة التجميع وسهولة الصيانة. [ 14 ]
يتطلب كتابة وتصميم الشيفرة القابلة لإعادة الاستخدام عادةً جهدًا أكبر. يناقش فريد بروكس التكلفة المرتفعة المرتبطة بهذا الجهد في مقالتيه "مستنقع القطران" و" لا حل سحري ". يكمن الخطأ في أن هذا الجهد يُبذل غالبًا دون فهم دقيق للآليات التي تُعوَّض من خلالها هذه التكلفة. غالبًا ما يستند التبرير إلى مقارنة خاطئة بين الشيفرة القابلة لإعادة الاستخدام والأجزاء القابلة لإعادة الاستخدام في عملية التصنيع المادي. وهذا خطأ، لأن كتابة الشيفرة تُشبه تصميم منتج واحد وليس إنتاج وحدات متعددة.
انظر أيضاً
مراجع
- ↑ فراكس، دبليو بي؛ كيو كانغ (يوليو 2005). "بحوث إعادة استخدام البرمجيات: الوضع الراهن والمستقبل". معاملات IEEE في هندسة البرمجيات . 31 (7): 529-536 . CiteSeerX 10.1.1.75.635 . doi : 10.1109/TSE.2005.85 . S2CID 14561810 .
- 1 2 ريدي، مارتن (2011). تصميم واجهة برمجة التطبيقات للغة C++ . بوسطن: مورغان كوفمان. ISBN 978-0-12-385004-1. OCLC 704559821 .
- ↑ سيلاولو، كارابو؛ هلوماني، هلوماني (2016). "نحو مجموعة أنطولوجيا للخوارزميات: لإعادة استخدام التعليمات البرمجية المعيارية والبرمجة متعددة اللغات" . التقدم في علوم الحاسوب . 5 : 63 - عبر ResearchGate.
- ↑ "4. إعادة استخدام الكود: الدوال والوحدات - كتاب Head First Python، الطبعة الثانية [ كتاب ] " . www.oreilly.com . تم الاطلاع عليه بتاريخ 26-01-2022 .
- ↑ فيتوسا، دانيال؛ أمباتزوغلو، أبوستولوس؛ غكورتزيس، أنطونيوس؛ بيبي، ستاماتيا؛ خاتزيجورجيو، ألكسندر (سبتمبر 2020). "إعادة استخدام الكود عمليًا: هل يفيد أم يضر بالديون التقنية؟" (ملف PDF) . مجلة الأنظمة والبرمجيات . 167 110618. doi : 10.1016/j.jss.2020.110618 . S2CID 219502749 .
- ↑ مجموعة لومبارد هيل. "ما هي إعادة استخدام البرمجيات؟" . lombardhill.com . مجموعة لومبارد هيل. مؤرشف من الأصل بتاريخ 23 يناير 2019. تم الاطلاع عليه بتاريخ 22 أكتوبر 2014 .
- ↑ مجموعة لومبارد هيل. "ما هي إعادة استخدام البرمجيات؟" . مؤرشف من الأصل في 23 يناير 2019. تم الاطلاع عليه في 22 أكتوبر 2014 .
- ↑ ماكونيل، ستيف (1996). التطوير السريع: ترويض جداول البرمجيات الجامحة . بيرسون للتعليم. ISBN 978-1-55615-900-8.
- ↑ تشامبمان، م.؛ فان دير ميروي، ألتا (2008). "التأمل في إعادة استخدام البرمجيات بشكل منهجي في شركة صغيرة تركز على المشاريع" . وقائع مؤتمر SAICSIT '08، وقائع المؤتمر البحثي السنوي لعام 2008 للمعهد الجنوب أفريقي لعلماء الحاسوب وتقنيي المعلومات حول أبحاث تكنولوجيا المعلومات في البلدان النامية: ركوب موجة التكنولوجيا . doi : 10.1145/1456659.1456662 . ISBN 978-1-60558-286-3.
- ↑ "إعادة استخدام الكود" . DocForge . مؤرشف من الأصل بتاريخ 10 يوليو 2011. تم الاطلاع عليه بتاريخ 16 يوليو 2026 .
- 1 2 بليتش، تايلر (2011). هجمات إعادة استخدام التعليمات البرمجية: آفاق جديدة ودفاعات . جامعة ولاية كارولينا الشمالية. ISBN 978-1-124-75297-6.
- ↑ بليتش، تايلر؛ جيانغ، شوكسيان؛ فري، فينس دبليو؛ ليانغ، تشنكاي (2011). "البرمجة الموجهة بالقفز: فئة جديدة من هجمات إعادة استخدام التعليمات البرمجية" (ملف PDF) . وقائع الندوة السادسة لجمعية ACM حول أمن المعلومات والحاسوب والاتصالات . ACM. الصفحات 30-40 . doi : 10.1145/1966913.1966919 . ISBN 978-1-4503-0564-8أُرشف من النسخة الأصلية (PDF) بتاريخ 7 أغسطس 2017. تم الاطلاع عليه بتاريخ 7 أغسطس 2017 .
- ↑ لغة برمجة Go (2015-12-01)، أمثال Go – روب بايك – Gopherfest – 18 نوفمبر 2015 ، مؤرشف من الأصل في 22 ديسمبر 2021 ، تم استرجاعه في 26 فبراير 2016
روابط خارجية
- مبادئ البرمجة
- إعادة الاستخدام
- مكتبات الحاسوب
