انحدار البرمجيات

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

  • محليًا - يؤدي التغيير إلى إدخال خطأ جديد في الوحدة أو المكون المتغير.
  • عن بعد - يؤدي التغيير في جزء واحد من البرنامج إلى توقف الوظيفة في وحدة أو مكون آخر.
  • كشف – يقوم التغيير بكشف خطأ موجود بالفعل ولم يكن له أي تأثير قبل التغيير.

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

الوقاية والكشف

لقد تم اقتراح تقنيات تحاول منع إدخال الانحدارات في البرامج في مراحل مختلفة من التطوير، كما هو موضح أدناه.

قبل الإصدار

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

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

قبل الالتزام

نظرًا لأن تصحيح أخطاء وتوطين السبب الجذري لانحدار البرنامج يمكن أن يكون مكلفًا، [10] [11] توجد أيضًا بعض الطرق التي تحاول منع الانحدار من الالتزام بمستودع التعليمات البرمجية في المقام الأول. على سبيل المثال، تمكن Git Hooks المطورين من تشغيل نصوص الاختبار قبل الالتزام بتغييرات التعليمات البرمجية أو دفعها إلى مستودع التعليمات البرمجية. [12] بالإضافة إلى ذلك، تم تطبيق تحليل تأثير التغيير على البرامج للتنبؤ بتأثير تغيير التعليمات البرمجية على مكونات مختلفة من البرنامج، ولتكملة اختيار حالة الاختبار وتحديد الأولويات. [13] [14] غالبًا ما تتم إضافة أدوات فحص البرامج أيضًا إلى خطافات الالتزام لضمان أسلوب ترميز متسق، وبالتالي تقليل المشكلات الأسلوبية التي يمكن أن تجعل البرنامج عرضة للانحدار. [15]

التوطين

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

الانحدارات الوظيفية

التقنية الشائعة المستخدمة لتحديد موقع الانحدارات الوظيفية هي التقسيم الثنائي ، والذي يأخذ كلًا من الالتزام الخاطئ والالتزام السابق العامل كمدخلات، ويحاول العثور على السبب الجذري من خلال إجراء بحث ثنائي على الالتزامات بينهما. [16] توفر أنظمة التحكم في الإصدارات مثل Git و Mercurial طرقًا مدمجة لأداء التقسيم الثنائي على زوج معين من الالتزامات. [17] [18]

تتضمن الخيارات الأخرى ربط نتيجة اختبار الانحدار بشكل مباشر بتغييرات الكود؛ [19] تعيين نقاط توقف التباعد؛ [20] أو استخدام تحليل تدفق البيانات التدريجي ، والذي يحدد حالات الاختبار - بما في ذلك الحالات الفاشلة - ذات الصلة بمجموعة من تغييرات الكود، [21] من بين أمور أخرى.

انحدار الأداء

يقيس تحديد الملفات الشخصية أداء واستخدام الموارد لمكونات مختلفة من البرنامج، ويُستخدم لتوليد بيانات مفيدة في تصحيح مشكلات الأداء. وفي سياق انحدارات أداء البرامج، غالبًا ما يقارن المطورون أشجار المكالمات (المعروفة أيضًا باسم "الخطوط الزمنية") التي تولدها ملفات التعريف لكل من الإصدار المعيب والإصدار العامل سابقًا، وتوجد آليات لتبسيط هذه المقارنة. [22] توفر أدوات تطوير الويب عادةً للمطورين القدرة على تسجيل ملفات تعريف الأداء هذه. [23] [24]

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

تتضمن الأساليب الإضافية كتابة اختبارات وحدات تدرك الأداء للمساعدة في التوطين، [27] وترتيب الأنظمة الفرعية بناءً على انحرافات عداد الأداء. [28] يمكن أيضًا إعادة استخدام التقسيم الثنائي لانحدارات الأداء من خلال النظر في الالتزامات التي تعمل أقل (أو أعلى) من قيمة أساسية معينة على أنها بها أخطاء، وأخذ الجانب الأيسر أو الأيمن من الالتزامات بناءً على نتائج هذه المقارنة.

انظر أيضا

مراجع

  1. ^ Wong, W. Eric; Horgan, JR; London, Saul; Agrawal, Hira (1997). "دراسة حول اختبار الانحدار الفعال في الممارسة العملية". وقائع الندوة الدولية الثامنة حول هندسة موثوقية البرمجيات (ISSRE 97). IEEE. doi :10.1109/ISSRE.1997.630875. ISBN 0-8186-8120-9. S2CID  2911517.
  2. ^ يهوداي، عميرام؛ تيزبيروفيتش، شموئيل؛ نير، دور (2007). تحديد أخطاء الانحدار. مؤتمر التحقق في حيفا. doi :10.1007/978-3-540-77966-7_18 . تم الاسترجاع في 10 مارس 2018 .
  3. ^ Shang, Weiyi; Hassan, Ahmed E.; Nazir, Mohamed; Flora, Parminder (11 December 2014). "Automated Detection of Performance Regressions Using Regression Models on Clustered Performance Counters" (PDF) . مؤرشف من الأصل (PDF) في 13 يناير 2021. تم الاسترجاع 22 ديسمبر 2019 . {{cite journal}}: تتطلب المجلة الاستشهاد بها |journal=( مساعدة )
  4. ^ هنري، جان جاك بيير (2008). شبكة الاختبار: نهج متكامل لأنشطة الاختبار في مشاريع البرمجيات الكبيرة . سبرينغر ساينس آند بيزنس ميديا. ص. 74. ISBN 978-3540785040.
  5. ^ ريتشاردسون، جاريد؛ جوالتني، ويليام جونيور (2006). اشحنها! دليل عملي لمشاريع برمجيات ناجحة. رالي، كارولاينا الشمالية: رف الكتب العملي. ص 32، 193. رقم ISBN 978-0-9745140-4-8.
  6. ^ Leung, Hareton KN; White, Lee (November 1990). "A study of integration testing and software regression at the integration level". Proceedings of the International Conference on Software Maintenance. San Diego, CA, USA: IEEE. doi :10.1109/ICSM.1990.131377. ISBN 0-8186-2091-9. S2CID  62583582.
  7. ^ Rothermel, Gregg; Harrold, Mary Jean; Dedhia, Jeinay (2000). "Regression test selection for C++ software". Software Testing, Verification and Reliability . 10 (2): 77– 109. doi :10.1002/1099-1689(200006)10:2<77::AID-STVR197>3.0.CO;2-E. ISSN  1099-1689.
  8. ^ Weyuker, EJ; Vokolos, FI (ديسمبر 2000). "تجربة اختبار أداء أنظمة البرمجيات: القضايا والنهج ودراسة الحالة". معاملات IEEE في هندسة البرمجيات . 26 (12): 1147– 1156. doi :10.1109/32.888628. ISSN  1939-3520.
  9. ^ دالي، ديفيد؛ براون، ويليام؛ إنجو، هنريك؛ أوليري، جيم؛ برادفورد، ديفيد (20 أبريل 2020). "استخدام اكتشاف نقطة التغيير لتحديد انحدارات أداء البرمجيات في نظام التكامل المستمر". وقائع المؤتمر الدولي حول هندسة الأداء. رابطة آلات الحوسبة. ص  67-75 . doi :10.1145/3358960.3375791. ISBN 978-1-4503-6991-6. S2CID  211677818.
  10. ^ نيستور، أدريان؛ جيانج، تيان؛ تان، لين (مايو 2013). "اكتشاف أخطاء الأداء والإبلاغ عنها وإصلاحها". وقائع المؤتمر العامل حول مستودعات برامج التعدين (MSR). ص  237-246 . doi :10.1109/MSR.2013.6624035. ISBN 978-1-4673-2936-1. S2CID  12773088.
  11. ^ أجراوال، براجيا؛ أجراوال، أرون براكاش (17 سبتمبر 2014). "تقنيات تحديد موقع الخطأ لأنظمة البرمجيات: مراجعة الأدبيات". ملاحظات هندسة البرمجيات ACM SIGSOFT . 39 (5): 1– 8. doi :10.1145/2659118.2659125. ISSN  0163-5948. S2CID  12101263.
  12. ^ "Git - Git Hooks". git-scm.com . تم الاسترجاع في 7 نوفمبر 2021 .
  13. ^ أورسو، أليساندرو؛ أبيواتانابونج، تاويسوب؛ هارولد، ماري جين (1 سبتمبر 2003). "الاستفادة من بيانات الحقل لتحليل التأثير واختبار الانحدار". ملاحظات هندسة البرمجيات ACM SIGSOFT . 28 (5): 128– 137. doi :10.1145/949952.940089. ISSN  0163-5948.
  14. ^ Qu, Xiao; Acharya, Mithun; Robinson, Brian (سبتمبر 2012). "اختيار التكوين باستخدام تحليل تأثير تغيير الكود لاختبار الانحدار". وقائع المؤتمر الدولي لصيانة البرمجيات. ص  129-138 . doi :10.1109/ICSM.2012.6405263. ISBN 978-1-4673-2312-3. S2CID  14928793.
  15. ^ Tómasdóttir, Kristín Fjóla; Aniche, Mauricio; van Deursen, Arie (أكتوبر 2017). "لماذا وكيف يستخدم مطورو JavaScript أدوات فحص النصوص". وقائع المؤتمر الدولي حول هندسة البرمجيات الآلية. ص  578- 589. doi :10.1109/ASE.2017.8115668. ISBN 978-1-5386-2684-9. S2CID  215750004.
  16. ^ جروس، توماس (10 سبتمبر 1997). "تصحيح أخطاء التقسيم الثنائي". وقائع ورشة العمل الدولية حول التصحيح التلقائي. مطبعة جامعة لينكوبينج الإلكترونية. ص  185- 191.
  17. ^ "Git - git-bisect Documentation". git-scm.com . تم الاسترجاع في 7 نوفمبر 2021 .
  18. ^ "hg - bisect". www.selenic.com . Mercurial . تم الاسترجاع في 7 نوفمبر 2021 .
  19. ^ "القراءة 11: تصحيح الأخطاء". web.mit.edu . MIT.
  20. ^ Buhse, Ben; Wei, Thomas; Zang, Zhiqiang; Milicevic, Aleksandar; Gligoric, Milos (مايو 2019). "VeDebug: أداة تصحيح أخطاء الانحدار لجافا". وقائع المؤتمر الدولي للهندسة البرمجية: وقائع مرافقة (ICSE-Companion). ص.  15- 18. doi :10.1109/ICSE-Companion.2019.00027. ISBN 978-1-7281-1764-5. S2CID  174799830.
  21. ^ Taha, A.-B.; Thebaut, SM; Liu, S.-S. (سبتمبر 1989). "نهج لتحديد موقع أخطاء البرامج وإعادة التحقق منها استنادًا إلى تحليل تدفق البيانات التدريجي". وقائع المؤتمر الدولي السنوي للبرمجيات والتطبيقات الحاسوبية. معهد مهندسي الكهرباء والإلكترونيات. ص  527- 534. doi :10.1109/CMPSAC.1989.65142. ISBN 0-8186-1964-3. S2CID  41978046.
  22. ^ Ocariza, Frolin S.; Zhao, Boyang (2021). "تحديد انحدارات أداء البرامج في تطبيقات الويب من خلال مقارنة جداول زمنية للتنفيذ". اختبار البرامج والتحقق منها وموثوقيتها . 31 (5): e1750. doi :10.1002/stvr.1750. ISSN  1099-1689. S2CID  225416138.
  23. ^ "تحليل أداء وقت التشغيل". مطورو Chrome . Google . تم الاسترجاع في 7 نوفمبر 2021 .
  24. ^ "مرجع تحليل الأداء - تطوير Microsoft Edge". docs.microsoft.com . Microsoft . تم الاسترجاع في 7 نوفمبر 2021 .
  25. ^ ياو، كوندي؛ ب. دي بادوا، جيلهيرمي؛ شانغ، ويي؛ سبوريا، ستيف؛ توما، أندري؛ ساجدي، سارة (30 مارس 2018). "Log4Perf: اقتراح مواقع تسجيل لأنظمة الويب لمراقبة الأداء". وقائع المؤتمر الدولي حول هندسة الأداء. رابطة آلات الحوسبة. ص.  127-138 . doi :10.1145/3184407.3184416. ISBN 978-1-4503-5095-2. S2CID  4557038.
  26. ^ لي، هينج؛ شانج، ويي؛ آدامز، برام؛ صياغ، محمد؛ حسن، أحمد إي. (30 يناير 2020). "دراسة نوعية لفوائد وتكاليف التسجيل من منظور المطورين". معاملات معهد مهندسي الكهرباء والإلكترونيات في هندسة البرمجيات . 47 (12): 2858- 2873. doi :10.1109/TSE.2020.2970422. S2CID  213679706.
  27. ^ هيجر، كريستوف؛ هابي، ينس؛ فرحبود، روزبه (21 أبريل 2013). "عزل السبب الجذري الآلي لانحدار الأداء أثناء تطوير البرمجيات". وقائع المؤتمر الدولي حول هندسة الأداء. رابطة آلات الحوسبة. ص  27-38 . doi :10.1145/2479871.2479879. ISBN 978-1-4503-1636-1. S2CID  2593603.
  28. ^ مالك، هارون؛ آدامز، برام؛ حسن، أحمد إي. (نوفمبر 2010). "تحديد الأنظمة الفرعية المسؤولة عن انحرافات الأداء في اختبار التحميل". وقائع الندوة الدولية حول هندسة موثوقية البرمجيات. ص  201- 210. doi :10.1109/ISSRE.2010.43. ISBN 978-1-4244-9056-1. S2CID  17306870.
تم الاسترجاع من "https://en.wikipedia.org/w/index.php?title=انحدار_البرمجيات&oldid=1172758085"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate