أمان البرمجيات

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

  • برامج لأنظمة السلامة الإلكترونية العامة: IEC 61508 [ 1 ] (الجزء 3 من المعيار)
  • برامج السيارات: ISO 26262 [ 2 ] (الجزء 6 من المعيار)
  • برنامج السكك الحديدية: EN 50716 [ 3 ]
  • البرمجيات المحمولة جواً: DO-178C/ED-12C ) [ 4 ]
  • برنامج إدارة الحركة الجوية: DO-278A/ED-109A [ 5 ]
  • الأجهزة الطبية: IEC 62304 [ 6 ]
  • محطات الطاقة النووية: IEC 60880 [ 7 ]

مصطلحات

سلامة النظام هي التخصص الشامل الذي يهدف إلى تحقيق السلامة من خلال تقليل المخاطر في الأنظمة التقنية إلى مستوى مقبول. ووفقًا لمعيار سلامة النظام المعتمد على نطاق واسع IEC 61508 ، [ 1 ] فإن السلامة هي "الخلو من خطر الضرر غير المقبول". ولأن البرمجيات وحدها - التي يمكن اعتبارها معلومات بحتة - لا يمكنها أن تُسبب أي ضرر بمفردها، يُستغنى أحيانًا عن مصطلح سلامة البرمجيات ويُستبدل بمصطلح "سلامة نظام البرمجيات" (على سبيل المثال، يستخدم دليل هندسة سلامة أنظمة البرمجيات المشترك [ 8 ] ومعيار MIL-STD-882E [ 9 ] هذا المصطلح). وهذا يُؤكد أن البرمجيات لا يُمكن أن تُسبب ضررًا إلا في سياق نظام تقني (انظر دليل سلامة البرمجيات الصادر عن وكالة ناسا، [ 10 ] الفصل 2.1.2)، والذي له تأثير ما على بيئته.

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

تحديد مستويات السلامة

تُعدّ تصنيف البرمجيات وفقًا لأهميتها في مجال السلامة إحدى الخطوات الأولى عند تطوير برمجيات متعلقة بالسلامة. وتقترح معايير مختلفة مستوياتٍ متباينة، مثل مستوى البرمجيات AE في معيار DO-178C ، [ 4 ] ومستوى سلامة البرمجيات (SIL ) من 1 إلى 4 في معيار IEC 61508 ، [ 1 ] ومستوى سلامة البرمجيات في السيارات (ASIL ) AD في معيار ISO 26262. [ 2 ] ويتم هذا التصنيف عادةً ضمن سياق نظام شامل، حيث تُدرس أسوأ عواقب فشل البرمجيات. فعلى سبيل المثال، يتطلب معيار السيارات ISO 26262 إجراء تقييم للمخاطر والأخطار (HARA) على مستوى المركبة لتحديد مستوى سلامة البرمجيات في السيارات (ASIL) للبرمجيات المُشغّلة على أحد المكونات.

الالتزام بالعمليات وضمانها

من الضروري استخدام عملية تطوير وضمان مناسبة، تتضمن أساليب وتقنيات ملائمة، تتناسب مع أهمية سلامة البرنامج. توصي معايير سلامة البرمجيات باستخدام هذه الأساليب والتقنيات، وقد تمنعها أحيانًا، وذلك بحسب مستوى السلامة. تقترح معظم المعايير نموذج دورة حياة (مثل EN 50716، [ 3 ] ومستويات تكامل السلامة (SIL) من 1 إلى 4 في IEC 61508 [ 1 ] التي تقترح - من بين أمور أخرى - نموذج V)، وتحدد الأنشطة المطلوبة لتنفيذها خلال مختلف مراحل البرنامج. على سبيل المثال، يشترط معيار IEC 61508 أن يكون البرنامج محددًا بشكل كافٍ (باستخدام أساليب رسمية أو شبه رسمية مثلاً)، وأن يكون تصميم البرنامج معياريًا وقابلاً للاختبار، وأن تُستخدم لغات برمجة مناسبة، وأن تُجرى مراجعات موثقة للتعليمات البرمجية، وأن يُجرى الاختبار على عدة مستويات لتحقيق تغطية اختبار عالية كافية. ينبع التركيز على عملية تطوير البرمجيات وضمانها من حقيقة أن جودة البرمجيات (وبالتالي السلامة) تتأثر بشكل كبير بعملية البرمجيات، كما هو مقترح في IEC 25010. [ 11 ] ويزعم أن العملية تؤثر على سمات جودة البرمجيات الداخلية (مثل جودة الكود) وهذه بدورها تؤثر على سمات جودة البرمجيات الخارجية (مثل الوظائف والموثوقية).

تساهم الأنشطة والمواضيع التالية التي يتم تناولها في عملية التطوير في إنتاج برامج آمنة.

الوثائق

تتطلب جميع معايير سلامة البرمجيات تقريبًا توثيقًا شاملًا لعملية التطوير والضمان بأكملها. عادةً ما تتم مراجعة هذا التوثيق واعتماده من قبل جهات خارجية، وبالتالي فهو شرط أساسي للموافقة على البرمجيات المتعلقة بالسلامة. يشمل التوثيق وثائق تخطيط متنوعة، ومواصفات المتطلبات، ووثائق بنية البرمجيات وتصميمها، وحالات اختبار على مستويات تجريد مختلفة، وتقارير تأهيل الأدوات، وأدلة المراجعة، ونتائج التحقق والتدقيق، وما إلى ذلك. يوضح الشكل C.2 في معيار EN 50716 [ 3 ] 32 وثيقة يجب إنشاؤها خلال دورة حياة التطوير.

إمكانية التتبع

تُعرف إمكانية التتبع بأنها ممارسة تهدف إلى إقامة علاقات بين أنواع مختلفة من المتطلبات، وبين المتطلبات ومخرجات التصميم والتنفيذ والاختبار. ووفقًا للمعيار الأوروبي EN 50716 [ 3 ] ، فإن الهدف هو "ضمان إمكانية إثبات استيفاء جميع المتطلبات على النحو الأمثل، وعدم إدخال أي مواد غير قابلة للتتبع". ومن خلال توثيق إمكانية التتبع والحفاظ عليها، يصبح من الممكن تتبع متطلبات السلامة، على سبيل المثال، في تصميم النظام (للتحقق من مدى مراعاتها بشكل كافٍ)، ثم في شفرة المصدر البرمجية (للتحقق من مدى استيفاء الشفرة للمتطلبات)، وصولًا إلى حالة الاختبار المناسبة وتنفيذ الاختبار (للتحقق من مدى كفاية اختبار متطلبات السلامة).

تنفيذ البرمجيات

قد تتضمن معايير السلامة متطلبات تؤثر بشكل مباشر على تنفيذ البرمجيات في شفرة المصدر، مثل اختيار لغة برمجة مناسبة، وحجم الدوال وتعقيدها، واستخدام بنيات برمجية معينة، والحاجة إلى معايير ترميز. يحتوي الجزء 3 من معيار IEC 61508 على المتطلبات والتوصيات التالية:

  • يُفضّل استخدام لغة برمجة ذات كتابة قوية. بعض اللغات أنسب من غيرها لأنظمة السلامة. فاللغات التي تدعم الكتابة القوية قادرة على اكتشاف المزيد من الأخطاء أثناء عملية الترجمة، والتي لا تُكتشف عادةً إلا أثناء التشغيل. لذلك، يُنصح عادةً بتجنب استخدام لغة التجميع، بينما يُوصى باستخدام لغات عالية المستوى مُصممة خصيصًا لسوق السلامة (مثل لغة ADA ).
  • استخدام معيار ترميز مناسب يحدد مجموعة فرعية من اللغة "الآمنة"، على سبيل المثال MISRA C. MISRA-C هو معيار ترميز للغة البرمجة C يهدف إلى تحسين جودة الكود وسلامته من خلال منع البنى المعرضة للأخطاء، أو الميزات التي تعتمد على المترجم (والتي يكون سلوكها بالتالي غير محدد).
  • الحد من استخدام الاستدعاء الذاتي والمؤشرات والمقاطعات (لأنها عرضة للأخطاء).
  • منع "تدفق التحكم غير المنظم في البرامج"، أي تجنب القفز بطريقة غير منظمة، على سبيل المثال باستخدام عبارات مثل " goto ".

تغطية الاختبار

يجب إثبات التغطية الاختبارية المناسبة، أي أنه بناءً على مستوى الأمان، يجب تطبيق مخططات اختبار أكثر صرامة. ويُذكر أحد المتطلبات المعروفة المتعلقة بالتغطية الاختبارية، والتي تعتمد على مستوى البرنامج، في معيار DO-178C: [ 4 ]

  • المستوى ج: تغطية العبارات مطلوبة - أي "تم استدعاء كل عبارة في البرنامج مرة واحدة على الأقل" أثناء الاختبار.
  • المستوى ب: تغطية الفروع مطلوبة - أي "تم استدعاء كل نقطة دخول وخروج في البرنامج مرة واحدة على الأقل، وتم اتخاذ كل قرار في البرنامج بشأن جميع النتائج المحتملة مرة واحدة على الأقل".
  • المستوى أ: تغطية الشرط/القرار المعدلة - امتداد لتغطية الفرع، مع اشتراط أن "كل شرط في القرار قد ثبت أنه يؤثر بشكل مستقل على نتيجة ذلك القرار".

استقلال

تتطلب معايير سلامة البرمجيات عادةً تنفيذ بعض الأنشطة باستقلالية، أي من قِبل شخص مختلف، أو شخص يتبع لتسلسل إداري مختلف، أو حتى من قِبل منظمة مستقلة. يضمن هذا تجنب تضارب المصالح ويزيد من فرص اكتشاف الأخطاء (مثل تلك الموجودة في تصميم البرمجيات). على سبيل المثال، يشترط معيار EN 50716 [ 3 الشكل 2، أن يشغل أدوار "المنفذ" و"المختبِر" و"المُدقِّق" أشخاص مختلفون، وأن يشغل دور "المُدقِّق" شخص يتبع لتسلسل إداري مختلف، وأن يشغل دور "المُقيِّم" شخص من وحدة تنظيمية مختلفة. كما يشترط معيارا DO-178C [ 4 ] وDO-278A [ 5 ] تنفيذ العديد من الأنشطة (مثل التحقق من تغطية الاختبار، وأنشطة ضمان الجودة) "باستقلالية"، حيث تُعرَّف الاستقلالية بأنها "فصل المسؤوليات بما يضمن تحقيق تقييم موضوعي".

أسئلة وقضايا مفتوحة

معدلات فشل البرمجيات

في هندسة سلامة الأنظمة، من الشائع تحديد حدود عليا لمعدلات فشل الأنظمة الفرعية أو المكونات. ويجب بعد ذلك إثبات أن هذه الأنظمة الفرعية أو المكونات لا تتجاوز معدلات الفشل المحددة لها، وإلا يجب استخدام آليات التكرار أو غيرها من آليات تحمل الأعطال. هذا النهج غير عملي بالنسبة للبرمجيات، إذ لا يمكن التنبؤ بمعدلات فشل البرمجيات بدقة. على الرغم من إجراء بحوثٍ هامة في مجال موثوقية البرمجيات (انظر على سبيل المثال Lyu (1996)، [ 12 ])، فإن معايير سلامة البرمجيات الحالية لا تشترط استخدام أيٍّ من هذه الأساليب، بل إنها تثني عن استخدامها، كما في DO178C [ 4 ] (ص 73) الذي ينص على ما يلي: "نُشرت العديد من الأساليب للتنبؤ بموثوقية البرمجيات بناءً على مقاييس التطوير، مثل بنية البرمجيات، ومعدل اكتشاف العيوب، وما إلى ذلك. لا تُقدّم هذه الوثيقة إرشاداتٍ بشأن هذه الأنواع من الأساليب، لأنه في وقت كتابة هذه الوثيقة، لم تُقدّم الأساليب المتاحة حاليًا نتائج يُمكن الوثوق بها." وينصّ البند 4.1.2 من ARP 4761 [ 13 ] على أن أخطاء تصميم البرمجيات "ليست هي نفسها أعطال الأجهزة. فعلى عكس أعطال الأجهزة، لا يُمكن تحديد احتمالات حدوث هذه الأخطاء كميًا."

السلامة والأمن

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

الذكاء الاصطناعي

تتبع البرامج التي تستخدم تقنيات الذكاء الاصطناعي ، مثل التعلم الآلي، دورة حياة مختلفة جذريًا. إضافةً إلى ذلك، يصعب التنبؤ بسلوكها مقارنةً بالأنظمة المطورة بالطرق التقليدية. لذا، فإن مسألة إمكانية استخدام هذه التقنيات وكيفية استخدامها قيد البحث حاليًا. في الوقت الراهن، لا تُوصي المعايير عمومًا باستخدامها. على سبيل المثال، ينص معيار EN 50716 (الجدول أ.3) على عدم التوصية باستخدام الذكاء الاصطناعي والتعلم الآلي لأي مستوى من مستويات سلامة الأنظمة.

أساليب التطوير الرشيقة

لا يزال يُنظر إلى تطوير البرمجيات الرشيقة ، الذي يتميز عادةً بالعديد من التكرارات، على أنه فوضوي للغاية بالنسبة لتطوير البرمجيات المتعلقة بالسلامة. وقد يعود ذلك جزئيًا إلى عبارات مثل "البرمجيات العاملة أهم من التوثيق الشامل"، الواردة في بيان تطوير البرمجيات الرشيقة. [ 14 ] على الرغم من أن معظم معايير سلامة البرمجيات تُقدم دورة حياة البرمجيات بتسلسل تقليدي يشبه نموذج الشلال ، إلا أن بعضها يتضمن عبارات تسمح بدورات حياة أكثر مرونة. ينص معيار DO-178C على أن "عمليات دورة حياة البرمجيات قد تكون تكرارية، أي يتم الدخول إليها وإعادة الدخول إليها". ويتضمن معيار EN 50716 الملحق (ج) الذي يُبين كيفية استخدام دورات حياة التطوير التكرارية بما يتماشى مع متطلبات المعيار.

الأهداف

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

انظر أيضاً

ملحوظات

مراجع

  1. 1 2 3 4 اللجنة الكهروتقنية الدولية (2010). IEC 61508 - السلامة الوظيفية للأنظمة الكهربائية/الإلكترونية/الإلكترونية القابلة للبرمجة المتعلقة بالسلامة . اللجنة الكهروتقنية الدولية.
  2. 1 2 المنظمة الدولية للتوحيد القياسي (2018). ISO 26262 - المركبات على الطرق - السلامة الوظيفية . المنظمة الدولية للتوحيد القياسي.
  3. 1 2 3 4 5 CENELEC (2023). EN 50716 - تطبيقات السكك الحديدية - متطلبات تطوير البرمجيات . CENELEC.
  4. 1 2 3 4 5 RTCA (2012). DO-178C - اعتبارات البرمجيات في اعتماد الأنظمة والمعدات المحمولة جواً . RTCA (نُشرت أيضاً باسم ED-12C من قِبل Eurocae ).
  5. 1 2 RTCA (2011). DO-278A - اعتبارات ضمان سلامة البرمجيات لأنظمة الاتصالات والملاحة والمراقبة وإدارة الحركة الجوية (CNS/ATM) . RTCA (نُشرت أيضًا باسم ED-109A بواسطة Eurocae ).
  6. اللجنة الكهروتقنية الدولية (2006). برمجيات الأجهزة الطبية - عمليات دورة حياة البرمجيات . اللجنة الكهروتقنية الدولية.
  7. اللجنة الكهروتقنية الدولية (2006). محطات الطاقة النووية - أجهزة القياس وأنظمة التحكم المهمة للسلامة - الجوانب البرمجية للأنظمة الحاسوبية التي تؤدي وظائف الفئة أ . اللجنة الكهروتقنية الدولية.
  8. وزارة الدفاع الأمريكية (2010). دليل هندسة سلامة أنظمة البرمجيات المشتركة . وزارة الدفاع الأمريكية.
  9. وزارة الدفاع الأمريكية (2012). MIL-STD-882E - سلامة النظام . وزارة الدفاع الأمريكية.
  10. ^ ناسا (2004). دليل ناسا لسلامة البرمجيات . ناسا.
  11. المنظمة الدولية للتوحيد القياسي (2011). ISO 25010 - هندسة النظم والبرمجيات - متطلبات جودة النظم والبرمجيات وتقييمها (SQuaRE) - نماذج جودة النظم والبرمجيات . المنظمة الدولية للتوحيد القياسي.
  12. مايكل ر. ليو (1996). دليل هندسة موثوقية البرمجيات . مطبعة جمعية مهندسي الكهرباء والإلكترونيات وشركة ماكجرو هيل للنشر.
  13. SAE ARP (2023). ARP 4761 - إرشادات لإجراء عملية تقييم السلامة على الطائرات المدنية والأنظمة والمعدات . الممارسات الموصى بها من قبل جمعية مهندسي السيارات (منشورة أيضًا باسم ED-135 من قبل Eurocae).
  14. "بيان تطوير البرمجيات الرشيقة" . agilemanifesto.org . تم الاطلاع عليه بتاريخ 25-12-2024 .

المجال العام تتضمن هذه المقالة مواداً متاحة للعموم من دليل البرمجيات التابع لجيش الولايات المتحدة .