هل الطرق الرسمية لصالح البرنامج لها مكان في الصناعة؟

StackOverflow https://stackoverflow.com/questions/1196803

سؤال

أخذت لمحة هواني المنطق في الكلية. ما فعلناه كان بسيطا حقا. معظم ما فعلته هو إثبات صحة البرامج البسيطة التي تتكون من while حلقات، if البيانات، وتسلسل التعليمات، ولكن لا شيء أكثر. تبدو هذه الطرق مفيدة للغاية!

هي الأساليب الرسمية المستخدمة في الصناعة على نطاق واسع؟

هل هذه الطرق المستخدمة لإثبات البرامج المهمة المهمة؟

هل كانت مفيدة؟

المحلول

هذا سؤال قريب من قلبي (أنا باحث في التحقق من البرامج باستخدام المنطق الرسمي)، لذلك ربما لن يفاجأ عندما أقول أنني أعتقد أن هذه التقنيات لها مكان مفيد، ولم تستخدم بعد بما فيه الكفاية صناعة.

هناك العديد من مستويات "الأساليب الرسمية"، لذلك سوف أفترض أنك تعني أنهم يستريحون على أساس رياضي صارم (على عكس ذلك، على سبيل المثال، بعد حوالي عملية أسلوب 6-Sigma). كان لدى بعض أنواع الأساليب الرسمية أنظمة نجاح رائعة - أنظمة واحدة هي مثال واحد. تعد أدوات التحليل الثابتة المستندة إلى تحليل تدفق البيانات شائعة أيضا، وفحص الطراز هو في كل مكان في كل مكان في تصميم الأجهزة، ويبدو أن النماذج الحسابية مثل PI-Calculus و CCS ملهمة بعض التغيير الحقيقي في تصميم اللغة العملية للتزامن. تحليل الإنهاء هو واحد كان لديه الكثير من الصحافة مؤخرا - مشروع SDV في Microsoft والعمل من قبل Byron Cook هو أمثلة حديثة للبحث / التدريب Crossover بطرق رسمية.

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

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

من المحتمل أن تكون فكرة جيدة بالنسبة لي لإحياء مدونتي، وجعل المزيد من المشاركات على هذه الأشياء ...

نصائح أخرى

حسنا، انضمت Sir Tony Hoare إلى Microsoft Research منذ حوالي 10 سنوات، وأحد الأشياء التي بدأها تحقق رسميا من Kernel Windows NT. في الواقع، كان هذا أحد أسباب التأخير الطويل لنظام التشغيل Windows Vista: بدءا من Vista، أجزاء كبيرة من النواة نكون في الواقع تم التحقق منه رسميا. إلى بعض العقارات مثل عدم وجود الجمود، غياب تسرب المعلومات إلخ.

هذا بالتأكيد ليست نموذجية، ولكن من المحتمل أن يكون التطبيق الأكثر أهمية في التحقق من البرنامج الرسمي، من حيث تأثيره (بعد كل شيء، كل إنسان تقريبا في طريقة أو شكل أو شكل يتأثر بنوافذ جهاز كمبيوتر يعمل بنظام Windows).

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

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

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

لا تستخدم الطرق الرسمية على نطاق واسع في الصناعة، لكنها تستخدم على نطاق أوسع مما كانت عليه قبل 20 عاما، و 20 عاما من الآن ستكون أكثر استخداما على نطاق واسع. لذلك أنت مقبلي مقرما :-)

نعم، يتم استخدامها، ولكن ليس على نطاق واسع في جميع المجالات. هناك المزيد من الأساليب من مجرد منطق الأرجح، يتم استخدام بعضها أكثر، وبعضها أقل، اعتمادا على ملاءمة مهمة معينة. المشكلة الشائعة هي أن SOFWare هي BIIIIIIIIG والتحقق من أن كل شيء صحيح لا يزال صعبا للغاية.

على سبيل المثال، تم استخدام Theorem-Priver (برنامج يساعد البشر في تصحيح برنامج إثبات صحة) ACL2 لإثبات أن وحدة معالجة النقاط العائمة لا تحتوي على نوع معين من الأخطاء. كانت مهمة كبيرة، لذلك هذه التقنية ليست شائعة جدا.

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

يمكن التفكير في الاختبارات الصارمة أيضا باعتبارها التحقق الرسمي - هناك بعض المواصفات الرسمية التي ينبغي اختبار مسارات البرنامج وما إلى ذلك.

"هل الأساليب الرسمية المستخدمة في الصناعة؟"

نعم.

ال assert ترتبط البيان في العديد من لغات البرمجة بطرق رسمية للتحقق من برنامج.

"هي الأساليب الرسمية المستخدمة في الصناعة على نطاق واسع؟"

لا.

"هل هذه الطرق المستخدمة لإثبات البرامج الحرجة للمهمة؟"

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

هناك طريقتان مختلفتان للطرق الرسمية في هذه الصناعة.

نهج واحد هو تغيير عملية التطوير بالكامل. تدوير Z وطريقة B التي تم ذكرها هي في هذه الفئة الأولى. تم تطبيق B على تطوير خط مترو الانفاق بدون سائق 14 في باريس (إذا حصلت على فرصة، يصعد في العربة الأمامية. ليس في كثير من الأحيان أن تحصل على فرصة لرؤية القضبان أمامك).

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

http://dblp.uni-trier.de/db/indices/a-tree/d/delmas:david.html.

(عذرا، فقط ارتباط تشعبي واحد يسمح للمستخدمين الجدد :()

ستجد حالات التطبيقات العملية للطرق الرسمية للتحقق من برامج C (مع تحليلات ثابتة Astrée، Caveal، Fluctuat، Frama-C) والرمز الثنائي (مع أدوات من Absint GmbH).

بالمناسبة، نظرا لأنك ذكرت Logic Logic، في القائمة الأدوات المذكورة أعلاه، تعتمد التحذير فقط على Logic Logic (و Frama-C لديه مكون من Logic Hoare). يعتمد الآخرون على التفسير التجريدي، وهي تقنية مختلفة مع نهج أكثر اتوماتتية.

مجال خبرتي هو استخدام الأساليب الرسمية لتحليل التعليمات البرمجية الثابتة لإظهار أن البرنامج خال من أخطاء وقت التشغيل. يتم تنفيذ ذلك باستخدام أساليب أساليب رسمية معروفة "التفسير المجرقي". تتيح لك التقنية بشكل أساسي من إثبات بعض Atributes من برنامج AS / W. على سبيل المثال، أثبت أن A + B لن يتفوق أو x / xy) لن يؤدي إلى تقسيم صفر. مثال على أداة التحليل الثابتة التي تستخدم هذه التقنية هي POLYSPACE.

فيما يتعلق بسؤالك: "هي الأساليب الرسمية المستخدمة في الصناعة على نطاق واسع؟" و "هل هذه الطرق المستخدمة لإثبات البرامج الحرجة للمهمة؟"

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

لا أعتقد أن كل 100٪ من هذه القطاعات الصناعية تستخدم هذه الأدوات، ولكن الاستخدام يتزايد. رأيي هو أن صناعات الفضاء والسيارات تؤدي مع صناعة الأجهزة الطبية بسرعة مما يجعل الاستخدام.

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

يعتمد المزيد على التحقق السلبي ("هذا البرنامج لن تفسد مكدسك") بدلا من ذلك التحقق الإيجابي ("هذا البرنامج سيفعل بالضبط ما يقوله هذه الصفحات 50 من المعادلات أنها كذلك

لإضافة إلى جورج إجابه, ، وهنا مقابلة مع توني هوار. أشار أدوات جورج إلى ما أعتقد، بادئة واستخدامها. يرى هنا للمزيد من المعلومات.

إلى جانب النهج الأخرى الإجرائية الأخرى، كان منطق هارب على أساس التصميم حسب العقد, ، قدم كتقنية وجوه موجهة من قبل برتراند ماير في إيفل (انظر مقال مير لعام 1992, ، صفحة 4). أثناء التصميم حسب العقد ليس هو نفسه أساليب التحقق الرسمية (لشيء واحد، DBC لا إثبات أي شيء حتى يتم تنفيذ البرنامج)، في رأيي يوفر استخداما أكثر عملية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top