المتانة (علوم الحاسوب)
في علوم الحاسوب ، تُعرف المتانة بقدرة نظام الحاسوب على التعامل مع الأخطاء أثناء التنفيذ [ 1 ] [ 2 ] ومع المدخلات الخاطئة. [ 2 ] تشمل المتانة مجالات عديدة في علوم الحاسوب، مثل البرمجة المتينة ، والتعلم الآلي المتين ، وشبكات الأمان المتينة . تُعدّ التقنيات الرسمية، مثل اختبار التشويش ، ضرورية لإثبات المتانة، إذ يتضمن هذا النوع من الاختبار مدخلات غير صالحة أو غير متوقعة. بدلاً من ذلك، يمكن استخدام حقن الأخطاء المتعمد لاختبار المتانة. [ 3 ] تُجري العديد من المنتجات التجارية اختبارات متانة لتحليل البرمجيات. [ 4 ]
مقدمة
بشكل عام، يُعدّ بناء أنظمة متينة تغطي جميع نقاط الفشل المحتملة أمرًا صعبًا نظرًا للكم الهائل من المدخلات وتوليفاتها الممكنة. [ 5 ] ولأن اختبار جميع المدخلات وتوليفاتها يتطلب وقتًا طويلًا، لا يستطيع المطورون اختبار جميع الحالات بشكل شامل. بدلًا من ذلك، يحاول المطور تعميم هذه الحالات. [ 6 ] على سبيل المثال، تخيّل إدخال بعض القيم الصحيحة . قد تتضمن بعض المدخلات المختارة عددًا سالبًا، وصفرًا، وعددًا موجبًا. عند استخدام هذه الأعداد لاختبار البرمجيات بهذه الطريقة، يُعمّم المطور مجموعة الأعداد الحقيقية إلى ثلاثة أعداد. هذه طريقة أكثر كفاءة وسهولة في الإدارة، ولكنها أكثر عرضة للفشل. يُعدّ تعميم حالات الاختبار مثالًا على إحدى تقنيات التعامل مع الفشل، وتحديدًا الفشل الناتج عن إدخال المستخدم غير الصحيح. قد تفشل الأنظمة أيضًا لأسباب أخرى، مثل انقطاع الاتصال بالشبكة.
ومع ذلك، ينبغي للأنظمة المعقدة أن تتعامل مع أي أخطاء تواجهها بسلاسة. وهناك العديد من الأمثلة على هذه الأنظمة الناجحة. بعض أكثر الأنظمة متانة قابلة للتطوير ويمكن تكييفها بسهولة مع المواقف الجديدة. [ 5 ]
التحديات
البرامج والبرمجيات أدواتٌ مُخصصة لمهمةٍ مُحددةٍ للغاية، ولذا فهي ليست عامة ولا مرنة. [ 5 ] ومع ذلك، تُظهر الملاحظات في أنظمةٍ مثل الإنترنت أو الأنظمة البيولوجية قدرة هذه الأنظمة على التكيف مع بيئاتها. إحدى طرق تكيف الأنظمة البيولوجية مع بيئاتها هي استخدام التكرار . [ 5 ] العديد من الأعضاء في الإنسان زائدة عن الحاجة، والكلى مثالٌ على ذلك. يحتاج الإنسان عادةً إلى كليةٍ واحدةٍ فقط، ولكن وجود كليةٍ ثانيةٍ يُتيح مجالًا للخطأ. يُمكن تطبيق هذا المبدأ نفسه على البرمجيات، ولكن توجد بعض التحديات. عند تطبيق مبدأ التكرار على علوم الحاسوب، لا يُنصح بإضافة التعليمات البرمجية بشكلٍ عشوائي. فإضافة التعليمات البرمجية بشكلٍ عشوائي تُؤدي إلى المزيد من الأخطاء، وتجعل النظام أكثر تعقيدًا، وتُصعّب فهمه. [ 7 ] التعليمات البرمجية التي لا تُعزز التعليمات البرمجية الموجودة غير مرغوبٍ فيها. يجب أن تمتلك التعليمات البرمجية الجديدة وظائف مُكافئة ، بحيث إذا تعطلت وظيفةٌ ما، يُمكن استبدالها بوظيفةٍ أخرى تُؤدي الوظيفة نفسها، باستخدام تنوع البرمجيات اليدوي أو الآلي . وللقيام بذلك، يجب أن تعرف التعليمات البرمجية الجديدة كيف ومتى تُعالج نقطة الفشل. [ 5 ] هذا يعني ضرورة إضافة المزيد من المنطق إلى النظام. ولكن مع إضافة المزيد من المنطق والمكونات وزيادة حجم النظام، يصبح أكثر تعقيدًا. لذا، عند إنشاء نظام أكثر تكرارًا، يصبح النظام أكثر تعقيدًا أيضًا، ويتعين على المطورين مراعاة الموازنة بين التكرار والتعقيد.
لا تركز ممارسات علوم الحاسوب حاليًا على بناء أنظمة متينة. [5] بل تميل إلى التركيز على قابلية التوسع والكفاءة . أحد الأسباب الرئيسية لعدم التركيز على المتانة اليوم هو صعوبة تحقيقها بشكل عام. [ 5 ]
المناطق
برمجة قوية
البرمجة المتينة هي أسلوب برمجة يركز على التعامل مع حالات الإنهاء والإجراءات غير المتوقعة. [ 8 ] ويتطلب هذا الأسلوب من الكود التعامل مع هذه الحالات بسلاسة من خلال عرض رسائل خطأ دقيقة وواضحة . تُسهّل هذه الرسائل على المستخدم عملية تصحيح الأخطاء في البرنامج.
مبادئ
- جنون العظمة
- عند كتابة البرامج، يفترض المبرمج أن المستخدمين يسعون إلى إتلاف الكود الذي يكتبه. [ 8 ] كما يفترض المبرمج أن الكود الذي كتبه بنفسه قد يفشل أو يعمل بشكل غير صحيح. [ 8 ]
- غباء
- يفترض المبرمج أن المستخدمين سيُدخلون بيانات غير صحيحة أو زائفة أو مشوهة. [ 8 ] ونتيجةً لذلك، يُعيد المبرمج للمستخدم رسالة خطأ واضحة وبديهية لا تتطلب البحث عن رموز الخطأ. ينبغي أن تكون رسالة الخطأ دقيقة قدر الإمكان دون تضليل المستخدم، حتى يتمكن من حل المشكلة بسهولة.
- أدوات خطرة
- ينبغي ألا يتمكن المستخدمون من الوصول إلى المكتبات أو هياكل البيانات أو مؤشرات هياكل البيانات. [ 8 ] يجب إخفاء هذه المعلومات عن المستخدم حتى لا يقوم بتعديلها عن طريق الخطأ وإحداث خطأ في الكود. عند بناء هذه الواجهات بشكل صحيح، يستخدمها المستخدمون دون الحاجة إلى البحث عن ثغرات لتعديلها. يجب أن تكون الواجهة مُنفذة بشكل صحيح مسبقًا، فلا يحتاج المستخدم إلى إجراء أي تعديلات. وبالتالي، يركز المستخدم فقط على كتابة الكود الخاص به.
- لا يمكن أن يحدث
- في كثير من الأحيان، يتم تعديل الكود، مما قد يُدخل احتمال حدوث حالة "مستحيلة". ولذلك، يُفترض أن الحالات المستحيلة نادرة الحدوث. [ 8 ] يفكر المطور في كيفية التعامل مع هذه الحالة النادرة الحدوث، ويُنفذ آلية التعامل وفقًا لذلك.
التعلم الآلي القوي
يشير مصطلح "التعلم الآلي القوي" عادةً إلى متانة خوارزميات التعلم الآلي. ولكي تُعتبر خوارزمية التعلم الآلي قوية، يجب أن يكون خطأ الاختبار متسقًا مع خطأ التدريب، أو أن يكون الأداء مستقرًا بعد إضافة بعض التشويش إلى مجموعة البيانات. [ 9 ] ومؤخرًا، بالتزامن مع ازدياد شعبيتها، ازداد الاهتمام بمتانة الشبكات العصبية، ويعود ذلك بشكل خاص إلى قابليتها للهجمات الخصومية. [ 10 ]
تصميم شبكة قوي
يُعنى تصميم الشبكات المتينة بدراسة تصميم الشبكات في ظل متطلبات متغيرة أو غير مؤكدة. [ 11 ] وبمعنى ما، فإن المتانة في تصميم الشبكات واسعة النطاق، تمامًا مثل المتانة في تصميم البرمجيات، نظرًا للإمكانيات الهائلة للتغييرات أو المدخلات.
خوارزميات قوية
توجد خوارزميات تتحمل الأخطاء في المدخلات. [ 12 ]
انظر أيضاً
مراجع
- ↑ "نهج قائم على النموذج لاختبار المتانة" (ملف PDF) . Dl.ifip.org . تم الاطلاع عليه بتاريخ 13 نوفمبر 2016 .
- 1 2 1990. مسرد المصطلحات الهندسية للبرمجيات الصادر عن معهد مهندسي الكهرباء والإلكترونيات، IEEE Std 610.12-1990، يعرف المتانة بأنها "الدرجة التي يمكن أن يعمل بها النظام أو المكون بشكل صحيح في وجود مدخلات غير صالحة أو ظروف بيئية مرهقة".
- ↑ هسوه، مي-تشين؛ تساي، تي كيه؛ آير، آر كيه (1997). "تقنيات وأدوات حقن الأعطال". مجلة الكمبيوتر . 30 (4): 75-82 . doi : 10.1109/2.585157 . hdl : 2060/19970022435 .
- ↑ بيكر، جاك دبليو؛ شوبرت، ماتياس؛ فابر، مايكل إتش (2008). "حول تقييم المتانة" (ملف PDF) . السلامة الهيكلية . 30 (3): 253-267 . doi : 10.1016/j.strusafe.2006.11.004 . تاريخ الاسترجاع: 13 نوفمبر 2016 .
- 1 2 3 4 5 6 7 جيرالد جاي سوسمان (13 يناير 2007). "بناء أنظمة متينة: مقال" (ملف PDF) . Groups.csail.mit.edu . مؤرشف من الأصل (ملف PDF) بتاريخ 12 أغسطس 2017. تاريخ الاسترجاع: 13 نوفمبر 2016 .
- ↑ جوزيف، جوبي (21-09-2009). "أهمية إنشاء حالات اختبار معممة - نادي اختبار البرمجيات - مجتمع اختبار برمجيات عبر الإنترنت" . نادي اختبار البرمجيات. مؤرشف من الأصل بتاريخ 24-06-2016 . تم الاطلاع عليه بتاريخ 13-11-2016 .
- ↑ وكلاء على الإنترنت : برمجيات قوية. "بناء أنظمة قوية: مقال" (ملف PDF) . Cse.sc.edu . تاريخ الاسترجاع : 13 نوفمبر 2016 .
- 1 2 3 4 5 6 "البرمجة القوية" . Nob.cs.ucdavis.edu . تم الاطلاع عليه بتاريخ 13 نوفمبر 2016 .
- ↑ السيد محمود. "ما هو تعريف متانة خوارزمية التعلم الآلي؟" . تم الاطلاع عليه بتاريخ 13 نوفمبر 2016 .
- ↑ لي، ليني؛ شي، تاو؛ لي، بو (9 سبتمبر 2022). "SoK: متانة معتمدة للشبكات العصبية العميقة". arXiv : 2009.04131 [ cs.LG ].
- ↑ "تصميم الشبكات القوية" (ملف PDF) . Math.mit.edu . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 9 سبتمبر 2016. تم الاطلاع عليه بتاريخ 13 نوفمبر 2016 .
- ↑ كاربين، مايكل؛ رينارد، مارتن سي. (12 يوليو 2010). "التحديد التلقائي لمناطق الإدخال الحرجة والتعليمات البرمجية في التطبيقات" (ملف PDF) . وقائع الندوة الدولية التاسعة عشرة لاختبار البرمجيات وتحليلها - ISSTA '10 . ACM. الصفحات 37-48 . doi : 10.1145/1831708.1831713 . ISBN 9781605588230. S2CID 1147058 .
- هندسة الموثوقية
- جودة البرمجيات
