SlideShare uma empresa Scribd logo
1 de 68
Baixar para ler offline
‫کامپیوتر‬ ‫مهندسی‬ ‫دانشکده‬
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطای‬ ‫از‬ ‫اجتناب‬
Software Fault Avoidance in Implementation
‫پذیر‬ ‫اتکا‬ ‫افزاری‬ ‫نرم‬ ‫های‬ ‫سیستم‬ ‫درس‬ ‫پژوهش‬
(‫کامل‬ ‫نسخه‬)
‫دانشجو‬:
‫ذاکری‬ ‫مرتضی‬
‫استاد‬:
‫ازگمی‬ ‫عبدللهی‬ ‫محمد‬ ‫دکتر‬
‫ماه‬ ‫اردیبهشت‬1396
‫مطالب‬ ‫رئوس‬
‫چارچوب‬ ‫و‬ ‫زبان‬SPARK Ada
‫در‬ ‫افزار‬ ‫نرم‬ ‫تحلیل‬ ‫فرایند‬SPARK Ada
‫داده‬ ‫جریان‬ ‫تحلیل‬
‫عملیاتی‬ ‫های‬ ‫جنبه‬ ‫تحلیل‬
‫مقایسه‬Ada‫و‬SPARK Ada
‫در‬ ‫نویسی‬ ‫حاشیه‬SPARK Ada
‫نامتغیر‬‫حلقه‬
‫گیری‬ ‫نتیجه‬ ‫و‬ ‫خالصه‬
‫آن‬ ‫از‬ ‫ناشی‬ ‫مشکالت‬ ‫و‬ ‫سازی‬ ‫پیاده‬
‫نویسی‬ ‫برنامه‬ ‫های‬ ‫زبان‬
‫اشکاالت‬ ‫برخی‬ ‫موردی‬ ‫مطالعه‬
‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫مشکالت‬C
‫نویسی‬ ‫برنامه‬ ‫استانداردهای‬
‫نویسی‬ ‫برنامه‬ ‫زبان‬Ada
‫طریق‬ ‫از‬ ‫درستی‬‫ساخت‬
‫سه‬ ‫رویکردهای‬‫گانه‬
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 2‫از‬68
‫سازی‬ ‫پیاده‬
‫سند‬ ‫یک‬ ‫از‬ ‫شروع‬ ‫با‬‫مشخصات‬(specification)‫که‬
‫ترجیحا‬‫صوری‬(formal)‫و‬
‫زبان‬ ‫یک‬ ‫در‬ ‫احتماال‬‫اعالنی‬(declarative)،‫است‬ ‫شده‬ ‫بیان‬ ،
‫مرحله‬ ‫به‬‫سازی‬ ‫پیاده‬‫رسیم‬ ‫می‬.
‫شود‬ ‫می‬ ‫انجام‬ ‫باال‬ ‫سطح‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫یک‬ ‫توسط‬ ‫معموال‬ ‫سازی‬ ‫پیاده‬.
‫برنامه‬ ‫اما‬‫هایی‬ ‫بیت‬‫گیرد‬ ‫می‬ ‫جای‬ ‫حافظه‬ ‫در‬ ‫که‬ ‫است‬!
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 3‫از‬68
‫ها‬ ‫بیت‬ ‫سازی‬ ‫پیاده‬
17‫مه‬17
‫مشخصات‬
‫یک‬ ‫در‬ ‫سازی‬ ‫پیاده‬
‫باال‬ ‫سطح‬ ‫زبان‬
‫سازی‬ ‫پیاده‬
‫دودویی‬ ‫کد‬
‫حمل‬ ‫قابل‬
‫سازی‬ ‫پیاده‬
‫دودویی‬ ‫کد‬
‫حمل‬ ‫قابل‬
‫انسان‬
‫ها‬ ‫الگوریتم‬ ‫و‬ ‫ساختارها‬ ‫داده‬
‫کامپایلر‬
‫کتابخانه‬ ‫و‬ ‫ماشین‬ ‫توصیفات‬
‫های‬ ‫کتابخانه‬
‫دهنده‬ ‫پیوند‬‫و‬‫بارکننده‬
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 4‫از‬68
‫افزار‬ ‫نرم‬ ‫در‬ ‫چیزی‬ ‫چه‬‫است؟‬ ‫اشتباه‬
‫اشتباه‬ ‫کارکرد‬(commission)
‫شده‬ ‫گم‬ ‫کارکرد‬(omission)
‫منابع‬ ‫اشتباه‬ ‫مدیریت‬
‫همروند‬ ‫های‬ ‫سیستم‬ ‫در‬ ‫ها‬ ‫پردازنده‬
‫سازی‬ ‫ذخیره‬(‫حافظه‬)‫ها‬ ‫سیستم‬ ‫همه‬ ‫در‬
‫وروردی‬ ‫های‬ ‫دستگاه‬ ‫و‬ ‫ها‬ ‫فایل‬-‫ها‬ ‫سیستم‬ ‫همه‬ ‫در‬ ‫خروجی‬
‫نشده‬ ‫بینی‬ ‫پیش‬ ‫استثناهای‬
‫ها‬ ‫کتابخانه‬ ‫و‬ ‫ترجمه‬ ‫خطاهای‬
‫غل‬ ‫شده‬ ‫سازی‬ ‫پیاده‬ ‫نمونه‬ ،‫معیوب‬ ‫کتابخانه‬ ،‫نادرست‬ ‫کتابخانه‬ ،‫شده‬ ‫تولید‬ ‫کدهای‬ ‫در‬ ‫خطا‬‫اتصال‬ ،‫ط‬
‫معیوب‬ ‫بارکننده‬ ‫یا‬ ‫دهنده‬
‫پیکربندی‬ ‫های‬ ‫اشکال‬
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 5‫از‬68
‫نویسی‬ ‫برنامه‬ ‫های‬ ‫زبان‬
‫حال‬ ‫این‬ ‫با‬ ‫کند؛‬ ‫نمی‬ ‫تضمین‬ ‫را‬ ‫خوب‬ ‫افزار‬ ‫نرم‬ ،‫خوب‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬:
‫کنند‬ ‫کمک‬ ‫نویسی‬ ‫برنامه‬ ‫به‬ ‫توانند‬ ‫می‬ ‫خوب‬ ‫های‬ ‫زبان‬.
‫شوند‬ ‫نویس‬ ‫برنامه‬ ‫کار‬ ‫مانع‬ ‫توانند‬ ‫می‬ ‫ضعیف‬ ‫های‬ ‫زبان‬.
‫نیازمند‬ ‫نتیجه‬ ‫در‬ ،‫هستند‬ ‫زبان‬ ‫امکانات‬ ‫از‬ ‫ناشی‬ ‫اشتباهات‬ ‫از‬ ‫زیادی‬ ‫های‬ ‫گونه‬:
‫های‬ ‫مجموعه‬ ‫زیر‬«‫امن‬»‫ها‬ ‫زبان‬ ‫بعضی‬ ‫از‬
‫شوند‬ ‫مانع‬ ‫را‬ ‫نویسی‬ ‫برنامه‬ ‫در‬ ‫شده‬ ‫شناخته‬ ‫ساز‬ ‫مشکل‬ ‫های‬ ‫شیوه‬ ‫که‬ ‫استانداردهایی‬.
‫دارد‬ ‫اختیار‬ ‫در‬ ‫دهنده‬ ‫توسعه‬ ‫که‬ ‫است‬ ‫ابزاری‬ ‫ترین‬ ‫ای‬ ‫پایه‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬.
‫کند‬ ‫پشتیبانی‬ ‫را‬ ‫اتکاپذیری‬ ‫اهداف‬ ‫بایستی‬ ‫زبان‬ ‫انتخاب‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 6‫از‬68
‫زبان‬ ‫مهم‬ ‫های‬ ‫ویژگی‬
‫واضح‬ ‫نحوی‬ ‫قواعد‬(Clear Syntax)
‫جامع‬ ‫تجرید‬ ‫و‬ ‫ساختاری‬ ‫کارهای‬ ‫و‬ ‫ساز‬
‫قوی‬ ‫ای‬ ‫داده‬ ‫انواع‬(Strong Typing)
‫همروندی‬ ‫از‬ ‫پشتیبانی‬
‫دقیق‬ ‫خیلی‬ ‫تعاریف‬(‫صوری‬)‫جامع‬ ‫و‬
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 7‫از‬68
‫مشکل‬ ‫از‬ ‫هایی‬ ‫نمونه‬
‫مقاله‬ ‫از‬ ‫برگرفته‬:
 A Software Fault Prevention Approach in Coding and Root Cause Analysis
 By Weider D. Yu, 1998.
‫در‬ ‫کد‬ ‫خط‬ ‫میلیون‬ ‫چندین‬ ‫تحلیل‬ ‫حاصل‬Lucent 5ESS switching system
‫زبان‬ ‫به‬ ‫کدها‬ ‫بیشتر‬C‫است‬ ‫بوده‬.
‫پروژه‬ ‫هدف‬:‫زبان‬ ‫به‬ ‫که‬ ‫بزرگی‬ ‫های‬ ‫سیستم‬ ‫در‬ ‫خطا‬ ‫از‬ ‫اجتناب‬C‫شوند‬ ‫می‬ ‫نوشته‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 8‫از‬68
‫مشکل‬ ‫از‬ ‫هایی‬ ‫نمونه‬
‫به‬ ‫نزدیک‬50‫سط‬ ‫نویسی‬ ‫برنامه‬ ‫های‬ ‫اشکال‬ ،‫شدند‬ ‫پیدا‬ ‫که‬ ‫هایی‬ ‫اشکال‬ ‫از‬ ‫درصد‬‫ح‬
‫بودند‬ ‫پایین‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 9‫از‬68
‫عملگر‬ ‫تقدم‬
‫متفاوت‬ ‫تقدم‬
‫عملگر‬ ‫تقدم‬==‫عملگر‬ ‫از‬&‫است‬ ‫باالتر‬.‫مثال‬ ‫برای‬:
 if (blkptr -> rpthead.fltdesc & HMFLTCLAS == HWMATEFLT)
‫شود‬ ‫اصالح‬ ‫زیر‬ ‫شکل‬ ‫به‬ ‫باید‬ ،‫باال‬ ‫کد‬ ‫قطعه‬(‫من‬ ‫گذاری‬ ‫پرانتز‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫تقدم‬ ‫تغییر‬‫اسب‬:)
 if ((blkptr -> rpthead.fltdesc & HMFLTCLAS)== HWMATEFLT)
‫است‬ ‫اهمیت‬ ‫حایز‬ ‫پذیری‬ ‫شرکت‬ ،‫یکسان‬ ‫تقدم‬ ‫در‬.
‫تقدم‬ ‫زیر‬ ‫کد‬ ‫قطعه‬ ‫در‬*‫و‬++‫است‬ ‫چپ‬ ‫به‬ ‫راست‬ ‫از‬ ‫آن‬ ‫پذیری‬ ‫شرکت‬ ‫اما‬ ‫است‬ ‫یکسان‬:
 *numretry++;
‫آن‬ ‫محتوای‬ ‫به‬ ‫ارجاع‬ ‫سپس‬ ‫و‬ ‫گر‬ ‫اشاره‬ ‫یک‬ ‫افزایش‬ ‫یعنی‬ ‫باال‬ ‫کد‬!‫اص‬ ‫باید‬ ‫و‬ ‫است‬ ‫نادرست‬ ‫که‬‫الح‬
‫شود‬:
 (*numretry)++;
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 10‫از‬68
‫حلقه‬ ‫کنترل‬for
‫واقع‬ ‫در‬ ‫باال‬ ‫کد‬‫کامپایلر‬ ‫به‬ ‫وابسته‬‫است‬!‫شو‬ ‫اصالح‬ ‫زیر‬ ‫صورت‬ ‫به‬ ‫باید‬ ‫پس‬‫د‬:
17‫مه‬17
for (idx = 0; idx < 40; dispstring[idx] =
COTsuccess[idx++]);
for (idx = 0; idx < 40; idx++) {
dispstring[idx] = COTsuccess[idx]
};
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 11‫از‬68
‫در‬ ‫منطقی‬ ‫خطاهای‬Lucent 5ESS
‫مقدار‬ ‫تخصیص‬/‫برابری‬
‫غیر‬ ‫و‬ ‫دار‬ ‫عالمت‬ ‫بیتی‬ ‫فیلدهای‬enum
AND‫عملگرهای‬ ‫و‬ ‫منطقی‬mask
‫نادرست‬
‫پردازنده‬ ‫پیش‬ ‫شرطی‬ ‫اشتباهات‬
‫توضیح‬ ‫های‬ ‫کننده‬ ‫جدا‬(comment)
‫ها‬ ‫مقایسه‬ ‫و‬ ‫عالمت‬ ‫بی‬ ‫متغیرهای‬
‫نوع‬ ‫تبدیل‬ ‫از‬ ‫نادرست‬ ‫استفاده‬
(Type Casting)
‫اولیه‬ ‫مقداردهی‬ ‫متغیرهای‬ ‫از‬ ‫استفاده‬
‫نشده‬
‫دستورات‬ ‫از‬ ‫نادرست‬ ‫استفاده‬break‫و‬
continue
‫عملگرها‬ ‫تقدم‬
‫ها‬ ‫حلقه‬ ‫مرزی‬ ‫شرایط‬
‫ها‬ ‫آرایه‬ ‫محدوده‬ ‫از‬ ‫خارج‬ ‫های‬ ‫اندیس‬
‫مقادیر‬ ‫برش‬ ‫و‬ ‫تقریب‬
‫گرها‬ ‫اشاره‬ ‫از‬ ‫نادرست‬ ‫استفاده‬
‫های‬ ‫تست‬AND‫و‬OR‫اشتباه‬
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 12‫از‬68
‫پروژه‬ ‫نتایج‬
‫ن‬ ‫کد‬ ‫مشکالت‬ ‫از‬ ‫اینگونه‬ ‫تعداد‬ ‫کردن‬ ‫کم‬ ‫به‬ ‫کمک‬ ‫برای‬ ‫هایی‬ ‫تکنیک‬ ‫توسعه‬‫ویسی‬
‫کاهش‬ ‫نتیجه‬34.5‫های‬ ‫نسخه‬ ‫در‬ ‫خطا‬ ‫وقوع‬ ‫نرخ‬ ‫درصدی‬T‫و‬T+1‫بود‬.
‫کاهش‬18.3‫آزمون‬ ‫هزینه‬ ‫درصدی‬(‫کد‬ ‫خط‬ ‫هر‬ ‫ازای‬ ‫به‬ ‫آزمون‬ ‫هزینه‬)
‫ها‬ ‫تکنیک‬ ‫هزینه‬100‫آزمون‬ ‫و‬ ‫بازنگری‬ ‫در‬ ‫شده‬ ‫جویی‬ ‫صرفه‬ ‫هزینه‬ ‫دالر؛‬ ‫هزار‬7‫میلیون‬
‫دالر‬‫است‬ ‫صرفه‬ ‫به‬ ‫کار‬ ‫این‬ ‫انجام‬ ،‫بله‬!
‫است؟‬ ‫خوب‬ ‫کافی‬ ‫اندازه‬ ‫به‬ ‫کار‬ ‫این‬ ‫آیا‬
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 13‫از‬68
‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫مشکالت‬C
‫زبان‬C‫است‬ ‫نوع‬ ‫بدون‬ ‫اساسا‬.
‫زبان‬ ‫نحو‬C‫است‬ ‫کننده‬ ‫گیج‬.
‫هستند‬ ‫پارامترها‬ ‫برای‬ ‫اشتباهی‬ ‫معانی‬ ‫گرها‬ ‫اشاره‬.
‫هستند‬ ‫ناکافی‬ ‫و‬ ‫ناقص‬ ‫مجموع‬ ‫در‬ ‫ها‬ ‫آموزش‬ ‫تر‬ ‫بیش‬.
‫دارند‬ ‫وجود‬ ‫بهتری‬ ‫های‬ ‫زبان‬.
‫از‬ ‫اگر‬C،‫کنید‬ ‫می‬ ‫استفاده‬‫باشید‬ ‫مراقب‬ ‫بسیار‬!
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 14‫از‬68
‫نویسی‬ ‫برنامه‬ ‫استانداردهای‬
‫شوند؟‬ ‫می‬ ‫حل‬ ‫استانداردهای‬ ‫رعایت‬ ‫با‬ ‫مشکالت‬ ‫همه‬ ‫آیا‬
‫تئوری‬ ‫در‬:‫بله‬!
‫عمل‬ ‫در‬:‫خیر‬!
‫خیر؟‬ ‫چرا‬
‫شوند‬ ‫می‬ ‫اعمال‬ ‫ابزار‬ ‫با‬ ‫و‬ ‫سیستماتیک‬ ‫شکل‬ ‫به‬ ‫ندرت‬ ‫به‬ ‫استانداردها‬.
‫نیستند‬ ‫کامل‬ ‫وجه‬ ‫هیچ‬ ‫به‬ ‫استانداردها‬.
‫نیست‬ ‫استانداردها‬ ‫از‬ ‫بسیاری‬ ‫اولیه‬ ‫هدف‬ ‫خطا‬ ‫از‬ ‫اجتناب‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 15‫از‬68
‫نویسی‬ ‫برنامه‬ ‫استانداردهای‬ ‫برخی‬
‫استاندارد‬MISRA(Motor Industry Software Reliability Association)‫زبان‬ ‫برای‬C
http://www.misra.org.uk
Free Software Foundation‫مختلف‬ ‫های‬ ‫بخش‬ ‫برای‬
http://www.gnu.org/prep/standards/
Ada Quality & Style: Guidelines For Professional Programmers
http://www.adaic.org/docs/95style/95style.pdf
‫باشید‬ ‫نویسی‬ ‫برنامه‬ ‫استانداردهای‬ ‫مجموعه‬ ‫یک‬ ‫دنبال‬ ‫به‬ ‫همیشه‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 16‫از‬68
‫استاندارد‬MISRA C
‫قانون‬47
‫زبان‬ ‫های‬ ‫عبارت‬ ‫در‬ ‫عملگر‬ ‫تقدم‬ ‫قواعد‬ ‫روی‬ ‫نباید‬ ‫وابستگی‬ ‫گونه‬ ‫هیچ‬C‫شود‬ ‫داده‬ ‫قرار‬.
‫قانون‬59
‫های‬ ‫عبارت‬ ‫بدنه‬ ‫که‬ ‫دستوراتی‬if،else if،else،while،do . . . While‫و‬for،‫دهند‬ ‫می‬ ‫تشکیل‬ ‫را‬
‫آکوال‬ ‫داخل‬ ‫همیشه‬ ‫بایستی‬({ })‫گیرند‬ ‫قرار‬ ،(‫باشد‬ ‫دستور‬ ‫یک‬ ‫اگر‬ ‫حتی‬.)
‫قانون‬66
‫دستور‬ ‫داخل‬ ‫در‬ ‫بایستی‬ ‫هستند‬ ‫حلقه‬ ‫کنترل‬ ‫با‬ ‫مرتبط‬ ‫که‬ ‫هایی‬ ‫عبارت‬ ‫فقط‬for‫روند‬ ‫کار‬ ‫به‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 17‫از‬68
‫زبان‬Ada–‫برتر‬ ‫انتخاب‬ ‫یک‬
‫امریکا‬ ‫دفاع‬ ‫وزارت‬ ‫توسط‬ ‫پروژه‬(DoD)‫دهه‬ ‫اواخر‬ ‫در‬70‫گرفت‬ ‫شکل‬ ‫میالدی‬.
‫های‬ ‫پروژه‬ ‫تمام‬ ‫تا‬ ‫رفت‬ ‫می‬ ‫انتظار‬DoD‫زبان‬ ‫از‬ ،Ada‫کنند‬ ‫استفاده‬.
‫استف‬ ‫مورد‬ ‫زمان‬ ‫آن‬ ‫در‬ ‫که‬ ‫نویسی‬‫برنامه‬ ‫زبان‬ ‫زیادی‬ ‫تعداد‬ ‫جایگزینی‬ ‫برای‬ ‫تالش‬‫اده‬
‫بودند‬(‫از‬ ‫بیش‬۵۰۰‫مختلف‬ ‫زبان‬)
‫سال‬ ‫در‬ ‫اصلی‬ ‫استاندارد‬1983‫عنوان‬ ‫تحت‬ ‫و‬ ‫میالدی‬Ada’ 83‫شد‬ ‫منتشر‬.
‫پاسکال‬ ‫زبان‬ ‫مبنای‬ ‫بر‬
‫گسترده‬ ‫طراحی‬ ‫در‬ ‫رقابت‬ ‫یک‬ ‫نتیجه‬ ‫و‬
‫اولیه‬ ‫نگارش‬ ‫از‬ ‫بعد‬ ‫اصلی‬ ‫نگارش‬ ‫دو‬:Ada’ 95‫و‬Ada 2005
‫فعلی‬ ‫پایدار‬ ‫نگارش‬:Ada 2012 TC1
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 18‫از‬68
‫طراحی‬ ‫اصلی‬ ‫هدف‬Ada‫نسخه‬ ‫مرجع‬ ‫راهنمای‬ ‫از‬ ‫گرفته‬ ‫بر‬2005
‫نیاز‬‫به‬‫زبان‬‫هایی‬‫که‬‫قابلیت‬‫اطمینان‬‫را‬‫ارتقا‬‫بخشیده‬‫و‬‫نگهداری‬‫را‬‫ساده‬‫می‬،‫کنند‬‫به‬
‫خوبی‬‫اثبات‬‫شده‬‫است‬.‫از‬‫این‬‫رو‬‫خوانایی‬‫برنامه‬‫در‬‫عین‬‫سهولت‬‫در‬،‫نوشتن‬‫مو‬‫رد‬
‫تاکید‬‫قرار‬‫گرفته‬‫است‬.‫برای‬،‫مثال‬‫طبق‬‫قواعد‬‫زبان‬‫نیاز‬‫است‬‫که‬‫متغیرهای‬‫ب‬‫رنامه‬
‫صریحا‬‫تعریف‬‫شده‬‫و‬‫نوع‬‫آن‬‫ها‬‫مشخص‬‫باشد‬.‫از‬‫آن‬‫جایی‬‫که‬‫نوع‬‫متغیر‬‫ثابت‬
،‫است‬‫کامپایلر‬‫می‬‫تواند‬‫مطمئن‬‫شود‬‫که‬‫عملگرهای‬‫روی‬‫متغیر‬‫با‬‫مشخصه‬‫های‬‫در‬
‫نظر‬‫گرفته‬‫شده‬‫برای‬‫اشیا‬‫این‬،‫نوع‬‫سازگاری‬‫دارند‬.‫افزون‬‫بر‬‫این‬‫نشانه‬‫گذاری‬‫های‬
‫مستعد‬‫خطا‬‫اجتناب‬‫شده‬‫اند‬.‫نحو‬‫زبان‬‫از‬‫به‬‫کار‬‫بردن‬‫شکل‬‫های‬‫رمزگونه‬‫جلوگ‬‫یری‬‫به‬
‫عمل‬‫می‬‫آورد‬‫و‬‫به‬‫طور‬‫قابل‬‫توجهی‬‫ساختارهای‬‫انگلیسی‬‫مانند‬‫را‬‫استفاده‬‫می‬‫ک‬‫ند‬.‫در‬
،‫نهایت‬‫زبان‬‫پشتیبانی‬‫از‬‫کامپایل‬‫جداگانه‬‫قسمت‬‫های‬‫برنامه‬‫را‬‫به‬‫نحوی‬‫ک‬‫ه‬‫توسعه‬‫و‬
‫نگهداری‬‫آن‬‫تسهیل‬،‫شود‬‫پیشنهاد‬‫می‬‫نماید‬‫و‬‫همان‬‫درجه‬‫از‬‫بررسی‬‫را‬‫بین‬‫قس‬‫مت‬
‫های‬‫مختلف‬‫لحاظ‬‫می‬‫کند‬‫که‬‫در‬‫داخل‬‫یک‬‫قسمت‬‫از‬‫برنامه‬‫به‬‫کار‬‫می‬‫برد‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 19‫از‬68
Ada‫چیست؟‬
‫از‬ ‫عبارتند‬ ‫آن‬ ‫هدف‬ ‫مورد‬ ‫های‬ ‫سیستم‬:
‫نهفته‬ ‫یا‬ ‫توکار‬ ‫های‬ ‫سیستم‬(Embedded systems)
‫طوالنی‬ ‫عمر‬ ‫با‬ ‫پیچیده‬ ‫افزارهای‬ ‫نرم‬
‫های‬ ‫المان‬ ‫از‬ ‫بسیاری‬ ‫حذف‬«‫خطر‬ ‫پر‬»‫امکان‬ ‫حد‬ ‫تا‬ ‫موجود‬ ‫های‬ ‫زبان‬
‫گرا‬ ‫شی‬ ‫و‬ ‫اشیا‬ ‫بر‬ ‫مبتنی‬
‫پارامتری‬ ‫انواع‬(generics)
‫بالدرنگ‬ ‫نویسی‬ ‫برنامه‬(Real-time)‫همروند‬ ‫و‬(concurrent)
‫جامع‬ ‫استثنای‬ ‫مدیریت‬
‫قدرتمند‬ ‫نوع‬ ‫سیستم‬
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 20‫از‬68
Ada‫چیست؟‬
‫سیستمی‬ ‫نویسی‬ ‫برنامه‬
‫ماشین‬ ‫نمایش‬ ‫نحوه‬ ‫روی‬ ‫دقیق‬ ‫کنترل‬
‫سیستم‬ ‫به‬ ‫وابسته‬ ‫اجزای‬ ‫به‬ ‫دسترسی‬
‫عامل‬ ‫سیستم‬ ‫بدون‬ ‫های‬ ‫ماشین‬(‫عریان‬)
‫اهداف‬ ‫از‬ ‫بسیاری‬ ‫برای‬ ‫استاندارد‬ ‫های‬ ‫بسته‬
‫جداگانه‬ ‫کامپایل‬ ‫از‬ ‫جامع‬ ‫پشتیبانی‬
‫عددی‬ ‫ای‬ ‫داده‬ ‫انواع‬ ‫از‬ ‫جامع‬ ‫پشتیبانی‬(numeric)‫ماشین‬ ‫مختص‬ ‫نمایش‬ ‫همراه‬ ‫به‬
‫هدف‬
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 21‫از‬68
Ada‫چیست؟‬
‫نیست‬ ‫مجاز‬ ‫زبان‬ ‫از‬ ‫ای‬ ‫زیرمجموعه‬ ‫هیچ‬.
‫زبان‬(‫کامپایلر‬)‫پیوند‬ ‫مرحله‬ ‫تا‬(link time)‫دارد‬ ‫حضور‬.
‫کامپایلر‬ ‫سنجی‬ ‫اعتبار‬ ‫فرایند‬:
‫رد‬ ‫را‬ ‫جامع‬ ‫تست‬ ‫مجموعه‬ ‫یک‬ ‫تا‬ ‫دارند‬ ‫نیاز‬ ‫ها‬ ‫کامپایلر‬ ‫همه‬(pass)‫کنند‬.
Ada Compiler Validation Capability (ACVC)
‫استانداردهای‬ANSI‫و‬ISO
‫کامل‬ ‫زیرساخت‬ ‫یک‬ ‫دارای‬:
‫دیگر‬ ‫ابزارهای‬ ‫و‬ ‫کامپایلر‬
‫جزئیات‬ ‫با‬ ‫و‬ ‫دقیق‬ ‫تعاریف‬
‫فراوان‬ ‫های‬ ‫آموزش‬ ‫و‬ ‫ها‬ ‫کتاب‬
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 22‫از‬68
‫مثال‬:‫جداگانه‬ ‫کامپایل‬
‫توسعه‬ ‫محیط‬ ‫هر‬ ‫در‬ ‫ضروری‬ ‫قابلیت‬ ‫یک‬
‫هستند؟‬ ‫چه‬ ‫معنایی‬ ‫قواعد‬
‫زبان‬ ‫معنایی‬ ‫قواعد‬ ‫معمول‬ ‫طور‬ ‫به‬:
‫جداگانه‬ ‫کامپایل‬ ‫هر‬ ‫برای‬‫متفاوت‬‫هستند‬.
‫شوند‬ ‫نمی‬ ‫بررسی‬ ‫عدد‬ ‫و‬ ‫پارمتر‬ ‫انواع‬.
‫نظیر‬ ‫ابزارهایی‬ ‫و‬ ‫سیستم‬ ‫پیونددهنده‬ ‫بر‬ ‫متکی‬make‫هستند‬.
‫معنایی‬ ‫قواعد‬Ada:
‫قسمت‬ ‫کل‬ ‫کامپایل‬ ‫مانند‬ ‫عینا‬ ‫قسمت‬ ‫چند‬ ‫جداگانه‬ ‫کامپایل‬ ‫که‬ ‫نحوی‬ ‫به‬ ،‫تنبل‬ ‫کامپایل‬‫عنوان‬ ‫به‬ ‫ها‬
‫است‬ ‫کامل‬ ‫برنامه‬ ‫یک‬.
‫است‬ ‫کامپایل‬ ‫عملیات‬ ‫از‬ ‫بخشی‬ ‫دادن‬ ‫پیوند‬.
‫است‬ ‫کامپایل‬ ‫عملیات‬ ‫از‬ ‫بخشی‬ ‫ها‬ ‫وابستگی‬ ‫بررسی‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 23‫از‬68
‫ساخت‬ ‫طریق‬ ‫از‬ ‫درستی‬(Correctness By Construction)
‫کنیم؟‬ ‫عمل‬ ‫بهتر‬ ‫توانیم‬ ‫می‬ ‫آیا‬
‫درستی‬ ‫که‬ ‫ای‬ ‫شیوه‬ ‫به‬ ‫سازی‬ ‫پیاده‬(‫صحت‬)‫گردد‬ ‫منتج‬ ،‫آن‬ ‫ساخت‬ ‫فرایند‬ ‫از‬ ‫برنامه‬.
‫مناب‬ ‫که‬ ‫است‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫یک‬ ‫از‬ ‫استفاده‬ ‫فرایند‬ ‫این‬ ‫از‬ ‫کوچکی‬ ‫بخش‬‫تا‬ ‫را‬ ‫خطا‬ ‫ع‬
‫کند‬ ‫می‬ ‫حذف‬ ‫ممکن‬ ‫حد‬.
‫کن‬ ‫کمک‬ ‫نویس‬ ‫برنامه‬ ‫مهندس‬ ‫به‬ ‫که‬ ‫است‬ ‫نیاز‬ ‫رویکردها‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫یا‬ ‫رویکرد‬‫تا‬ ‫ند‬
‫یابد‬ ‫دست‬ ‫مهم‬ ‫این‬ ‫به‬ ‫امکان‬ ‫حد‬ ‫در‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 24‫از‬68
‫ساخت‬ ‫طریق‬ ‫از‬ ‫درستی‬:‫مختلف‬ ‫رویکرد‬ ‫سه‬
17‫مه‬17
Specification Implementation
Specification Implementation
‫انتزاع‬ ‫واقعیت‬
Specification Implementation
Human Guided
Synthesis
Human Created Refinement
and Proof
Human Created Synthesis
and Static Analysis
Synthesis
E.g. Simulink
Refinement
E.g. B
Analysis
E.g. SPARK
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 25‫از‬68
‫ساخت‬ ‫طریق‬ ‫از‬ ‫درستی‬
«‫سنتز‬»‫است‬ ‫محدود‬ ‫حاضر‬ ‫حال‬ ‫در‬ ‫اما‬ ،‫آید‬ ‫می‬ ‫شمار‬ ‫به‬ ‫رویکرد‬ ‫بهترین‬ ‫مشخصا‬.
«‫پاالیش‬»‫است‬ ‫کننده‬ ‫محدود‬ ‫بسیار‬ ‫ولی‬ ‫است‬ ‫خوب‬.
«‫تحلیل‬»‫کند‬ ‫می‬ ‫کار‬ ‫خوبی‬ ‫به‬ ‫و‬ ‫است‬ ‫تر‬ ‫عام‬.
‫یابد‬ ‫دست‬ ‫زیر‬ ‫موارد‬ ‫به‬ ‫تا‬ ‫دارد‬ ‫سعی‬ ‫تحلیل‬:
‫بهتر‬ ‫بسیار‬ ‫افزار‬ ‫نرم‬ ‫یک‬
‫تر‬ ‫ارزان‬ ‫بسیار‬ ‫افزار‬ ‫نرم‬ ‫یک‬
‫پروژه‬ ‫اولیه‬ ‫ایده‬SPARK Ada
‫های‬ ‫زبان‬ ‫برای‬ ‫مشابهی‬ ‫اولیه‬ ‫رویکرد‬C#‫و‬Java‫است‬ ‫شده‬ ‫داده‬ ‫توسعه‬ ‫نیز‬.
SPARK‫نیست‬ ‫بازی‬ ‫اسباب‬ ‫یک‬!‫ا‬ ‫شده‬ ‫استفاده‬ ‫صنعتی‬ ‫های‬ ‫پروژه‬ ‫از‬ ‫بسیاری‬ ‫در‬‫ست‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 26‫از‬68
SPARK Ada
‫تعریف‬ ‫خوش‬ ‫و‬ ‫دقیق‬ ‫معنایی‬ ‫و‬ ‫نحوی‬ ‫قواعد‬ ‫با‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫یک‬:
SPARK‫زبان‬ ‫زیرمجموعه‬ ‫یک‬ ‫از‬Ada‫کند‬ ‫می‬ ‫استفاده‬(‫آن‬ ‫های‬ ‫قسمت‬ ‫تمام‬ ‫نه‬ ‫و‬)
‫نویسی‬ ‫حاشیه‬ ‫کار‬ ‫سازو‬(Annotation)‫در‬ ‫افزار‬ ‫نرم‬ ‫های‬ ‫مشخصه‬ ‫تا‬ ‫شده‬ ‫طراحی‬‫سطح‬
‫پایین‬‫باشد‬ ‫بیان‬ ‫قابل‬.
SPARK‫توضیحات‬(Comments)‫برد‬ ‫می‬ ‫کار‬ ‫به‬ ‫را‬ ‫ای‬ ‫یافته‬ ‫سبک‬.
‫س‬ ‫های‬ ‫مشخصه‬ ‫از‬ ‫مستقیما‬ ‫نه‬ ،‫شود‬ ‫می‬ ‫ساخته‬ ‫پایین‬ ‫سطح‬ ‫های‬ ‫مشخصه‬ ‫از‬ ‫کد‬‫طح‬
‫سیستم‬ ‫باالی‬
‫درستی‬‫یابی‬‫این‬‫موضوع‬‫که‬‫طراحی‬‫سطح‬‫پایین‬‫تواند‬‫می‬‫مشخصه‬‫های‬‫سطح‬‫ب‬‫اال‬(‫به‬
‫عنوان‬‫مثال‬‫مشخصه‬‫های‬‫تعریف‬‫شده‬‫توسط‬Z)‫را‬‫پیاده‬‫سازی‬‫کند‬،‫مسئله‬‫ای‬‫جداگانه‬
‫است‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 27‫از‬68
‫مرتبط‬ ‫منابع‬
‫رسمی‬ ‫سایت‬ ‫وب‬:http://www.sparkada.com
‫فنی‬ ‫مباحث‬
‫ویژه‬ ‫به‬ ‫انتشارات‬
http://www.sparkada.com/downloads/SPARK95.pdf
‫غیره‬ ‫و‬.
 High Integrity Software The SPARK Ada Approach to Safety and Security
 John Barnes, Addison Wesley (2003).
 Correctness by Construction
 Peter Amey.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 28‫از‬68
‫کاربرد‬ ‫از‬ ‫مثالی‬SPARK
‫ارتقا‬Lockheed C130J avionics
Civil certification to DO-178B level A
Military certification to UK Def Std 00-55
Cost of MC/DC testing reduced by 80%
‫ادعاهای‬Lockheed
‫کد‬ ‫کیفیت‬10‫یافت‬ ‫بهبود‬ ‫صنعتی‬ ‫استانداردهای‬ ‫به‬ ‫نسبت‬ ‫برابر‬.
‫محصول‬ ‫وری‬ ‫بهره‬4‫یافت‬ ‫بهبود‬ ‫برابر‬.
‫ساخت‬ ‫های‬ ‫هزینه‬50‫بودند‬ ‫معمول‬ ‫مقدار‬ ‫درصد‬.
‫است‬ ‫صرفه‬ ‫به‬ ‫مقرون‬ ‫این‬!
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 29‫از‬68
‫اجمالی‬ ‫نگاه‬
SPARK‫کند‬ ‫می‬ ‫فراهم‬ ‫را‬ ‫زیر‬ ‫ابزارهای‬:
Examiner, Simplifier, Prover
‫مرجع‬ ‫در‬ ‫کامل‬ ‫طور‬ ‫به‬High Integrity Software by John Barnes‫است‬ ‫شده‬ ‫تعریف‬.
‫در‬ ‫که‬ ‫است‬ ‫شده‬ ‫مشخص‬Ada‫تقریبا‬10‫زبان‬ ‫در‬ ‫موجود‬ ‫های‬ ‫اشکال‬ ‫درصد‬C‫باقی‬
‫است‬ ‫مانده‬(‫واقع‬ ‫در‬90‫است‬ ‫شده‬ ‫برطرف‬ ‫ها‬ ‫اشکال‬ ‫درصد‬.)
SPARK Ada‫تقریبا‬ ‫هم‬10‫کامل‬ ‫نسخه‬ ‫های‬ ‫اشکال‬ ‫درصد‬Ada‫دارد‬ ‫را‬.
‫است‬ ‫اهمیتی‬ ‫حایز‬ ‫موضوع‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫لذا‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 30‫از‬68
‫برنامه‬ ‫کلی‬ ‫تصویر‬SPARK
17‫مه‬17
Notation For
Annotations
Language With Precise
Syntax & Semantics
Tools—Applied
During
Development
Properties
Correctness by
construction
Compiler
Linker
Loader
Executable
Software
Software
Ada + Annotations
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 31‫از‬68
‫در‬ ‫توسعه‬ ‫فرایند‬SPARK
17‫مه‬17
Develop Incremental Change
To Software
Check Changes Using SPARK
Tools
Partially Complete Software
System
Develop or enhance the
annotations to reflect
incremental change in
specification and then
develop or enhance
software to implement
specification documented
by annotations
Complete?
No
Yes
Software Specification High/low Level Designs
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 32‫از‬68
‫در‬ ‫تحلیل‬SPARK
17‫مه‬17
Software
Source + Annotations
Syntax
Analysis
Type
Analysis
Data Flow
Analysis
Control Flow
Analysis
Functional
Correctness
Low Level Design
Annotations
Compiler Examiner
Simplifier
&
Prover
Not the high-level (Z) specification!
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 33‫از‬68
‫نحوی‬ ‫تحلیل‬
‫کامپایل‬ ‫زبان‬ ‫قواعد‬ ‫با‬ ‫برنامه‬ ‫شود‬‫می‬ ‫مطمئن‬‫شود‬‫می‬.
‫مجموعه‬ ‫زیر‬SPARK‫از‬Ada‫ها‬ ‫نویسی‬ ‫حاشیه‬ ‫و‬
‫متن‬ ‫از‬ ‫مستقل‬ ‫گرامر‬:
BNF
‫خودکار‬ ‫صورت‬ ‫به‬ ‫شده‬ ‫تولید‬ ‫گرهای‬ ‫تحلیل‬
‫متن‬ ‫به‬ ‫وابسته‬ ‫گرامر‬
‫استفاده‬ ‫از‬ ‫قبل‬ ‫متغیر‬ ‫تعریف‬
‫حوزه‬ ‫به‬ ‫مربوط‬ ‫قوانین‬
‫غیره‬ ‫و‬
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 34‫از‬68
‫نوع‬ ‫تحلیل‬
‫قوی‬ ‫ای‬ ‫داده‬ ‫نوع‬ ‫سیستم‬
‫ها‬ ‫اشکال‬ ‫کاهش‬ ‫به‬ ‫کمک‬
‫عمل‬ ‫در‬ ‫رسیده‬ ‫اثبات‬ ‫به‬ ‫نتایج‬
‫در‬ ‫موجود‬ ‫اولیه‬ ‫ای‬ ‫داده‬ ‫انواع‬‫افزار‬‫سخت‬‫شود‬‫می‬ ‫منجر‬ ‫مشکل‬ ‫ایجاد‬ ‫به‬ ‫مشخصا‬ ،:
‫بودند‬ ‫ماشین‬ ‫ای‬ ‫داده‬ ‫انواع‬ ،‫ای‬ ‫داده‬ ‫انواع‬ ،‫اصل‬ ‫در‬.
‫های‬‫سیستم‬‫نوع‬‫مدرن‬‫معنایی‬ ‫قواعد‬ ‫از‬ ،‫کاربردی‬ ‫برنامه‬‫ناشی‬‫شوند‬‫می‬.
‫ای‬ ‫داده‬ ‫انواع‬‫نی‬ ‫اما‬ ‫شود‬‫می‬ ‫پذیری‬‫انعطاف‬ ‫باعث‬ ‫کند‬‫می‬ ‫تعریف‬ ‫نویس‬‫برنامه‬ ‫که‬‫از‬‫به‬
‫دارد‬ ‫اضافی‬ ‫بررسی‬.
‫شوند‬ ‫تعریف‬ ‫دقیق‬ ‫خیلی‬ ‫باید‬ ‫نوع‬ ‫تبدیل‬ ‫قواعد‬.
‫ش‬ ‫ممیز‬ ‫اعداد‬ ‫دقیق‬ ‫تعیین‬ ‫مثال‬ ‫برای‬ ‫هستند؛‬ ‫ساز‬ ‫مشکل‬ ‫نیز‬ ‫محاسباتی‬ ‫انواع‬‫ناور‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 35‫از‬68
‫داده‬ ‫جریان‬ ‫تحلیل‬
‫آن‬ ‫های‬ ‫استفاده‬ ‫سمت‬ ‫به‬ ‫داده‬ ‫حرکت‬ ‫از‬ ‫است‬ ‫عبارت‬ ‫واقعی‬ ‫معنای‬ ‫به‬ ‫داده‬ ‫جریان‬.
‫ها‬ ‫سیستم‬ ‫از‬ ‫بسیاری‬ ‫در‬ ‫داده‬ ‫از‬ ‫زیادی‬ ‫مقدار‬:
‫رود‬ ‫می‬ ‫اشتباهی‬ ‫مکان‬ ‫به‬
‫رود‬ ‫نمی‬ ‫جایی‬ ‫هیچ‬ ‫به‬
‫است‬ ‫اشتباه‬ ‫داده‬ ‫خود‬ ‫اما‬ ‫رود‬ ‫می‬ ‫درستی‬ ‫مکان‬ ‫به‬.
‫شود‬ ‫نمی‬ ‫استفاده‬ ‫داده‬.
‫شود‬ ‫می‬ ‫استفاده‬ ‫اشتباه‬ ‫داده‬.
‫ر‬ ‫ها‬ ‫آن‬ ‫از‬ ‫بزرگی‬ ‫کسر‬ ‫قطعا‬ ‫اما‬ ،‫کرد‬ ‫پیدا‬ ‫را‬ ‫داده‬ ‫به‬ ‫مربوط‬ ‫های‬ ‫اشکال‬ ‫همه‬ ‫توان‬ ‫نمی‬‫ا‬
‫داد‬ ‫تشخیص‬ ‫توان‬ ‫می‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 36‫از‬68
‫داده‬ ‫جریان‬ ‫تحلیل‬
‫از‬ ‫است‬ ‫عبارت‬ ‫داده‬ ‫جریان‬ ‫مشکالت‬ ‫و‬ ‫مسائل‬:
‫مستعار‬ ‫اسامی‬(Aliasing)
‫استفاده‬ ‫و‬ ‫تعریف‬ ‫های‬ ‫زنجیره‬ ‫نظمی‬ ‫بی‬
‫استفاده‬ ‫و‬ ‫تعریف‬ ‫در‬ ‫شده‬ ‫مشاهده‬ ‫های‬ ‫نظمی‬ ‫بی‬:
‫تعریف‬ ‫از‬ ‫قبل‬ ‫استفاده‬
‫مجدد‬ ‫تعریف‬ ‫سپس‬ ‫و‬ ‫تعریف‬(‫هم‬ ‫سر‬ ‫پشت‬ ‫تعاریف‬)
‫استفاده‬ ‫عدم‬ ‫و‬ ‫تعریف‬
‫ها‬ ‫پیچیدگی‬
‫همروندی‬ ،‫ها‬ ‫برنامه‬ ‫زیر‬ ،‫کنترلی‬ ‫ساختارهای‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 37‫از‬68
‫کنترلی‬ ‫جریان‬ ‫تحلیل‬
‫کنترلی‬ ‫جریان‬ ‫اجرای‬
‫از‬ ‫است‬ ‫عبارت‬ ‫اصلی‬ ‫مشکالت‬ ‫و‬ ‫مسائل‬:
‫مرده‬ ‫کد‬(‫رسد‬ ‫نمی‬ ‫آن‬ ‫به‬ ‫هرگز‬ ‫اجرا‬ ‫کنترل‬ ‫که‬ ‫کدی‬)
‫بست‬ ‫بن‬(deadlock)‫و‬livelocks
‫همروند‬ ‫های‬ ‫سیستم‬ ‫در‬ ‫سازی‬ ‫همگام‬ ‫های‬ ‫اشکال‬(‫متقابل‬ ‫انحصار‬ ‫نظیر‬)
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 38‫از‬68
‫عملیاتی‬ ‫های‬ ‫جنبه‬ ‫درستی‬(‫عملکرد‬ ‫صحت‬)
‫توسط‬‫ها‬ ‫شرط‬ ‫پیش‬(pre-conditions)‫و‬‫ها‬ ‫شرط‬ ‫پس‬(post-condition)‫مشخص‬
‫شود‬ ‫می‬.
‫یابی‬ ‫درستی‬ ‫های‬ ‫شرط‬(verification conditions)‫سازد‬ ‫می‬ ‫را‬.
‫یابی‬ ‫درستی‬ ‫های‬ ‫شرط‬ ‫داد‬ ‫نشان‬ ‫بتوان‬ ‫اگر‬‫صحیح‬‫ه‬ ‫شرط‬ ‫پس‬ ‫گاه‬ ‫آن‬ ،‫هستند‬‫از‬ ‫ا‬
‫کنند‬ ‫می‬ ‫پیروی‬ ‫ها‬ ‫شرط‬ ‫پیش‬.
‫قضایا‬ ‫اثبات‬ ‫سیستم‬ ‫یک‬ ‫در‬ ‫توانند‬ ‫می‬ ‫یابی‬ ‫درستی‬ ‫های‬ ‫شرط‬(theorem-proving)،
‫شوند‬ ‫ثابت‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 39‫از‬68
‫ساده‬ ‫مثال‬ ‫یک‬
17‫مه‬17
1. package simpleadd is
2. procedure sum (X,Y : in Integer; Z : out Integer);
3. --# derives Z from X, Y;
4. --# pre (X > 1) and (X < 1000) and (Y > 1) and (Y < 1000);
5. --# post Z=X+Y;
6. end simpleadd;
7. package body simpleadd is
8. procedure sum (X,Y : in Integer; Z : out Integer) is
9. begin
10. if (X > 1) and (X < 1000) and (Y > 1) and (Y < 1000) then
11. Z := X;
12. for i in Integer range 1..Y loop
13. Z := Z + 1;
14. --# assert Z = X + i and Y = Y%;
15. end loop;
16. else
17. Z := 0;
18. end if;
19. end sum;
20. end simpleadd;
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 40‫از‬68
‫درستی‬ ‫شرط‬1
17‫مه‬17
1. For path(s) from start to run-time check associated with statement of line 6:
2. procedure_sum_1.
3. H1: x > 1 .
4. H2: x < 1000 .
5. H3: y > 1 .
6. H4: y < 1000 .
7. H5: x >= integer__first .
8. H6: x <= integer__last .
9. H7: y >= integer__first .
10. H8: y <= integer__last .
11. H9: x > 1 .
12. H10: x < 1000 .
13. H11: y > 1 .
14. H12: y < 1000 .
15. ->
16. C1: x >= integer__first .
17. C2: x <= integer__last .
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 41‫از‬68
‫اثبات‬ ‫خالصه‬
17‫مه‬17
VCs for procedure_sum:
----------------------------------------------------------------------------
| | | -----Proved In----- | | |
# | From | To | vcg | siv | plg | prv | False | TO DO |
----------------------------------------------------------------------------
1 | start | rtc check @ 6 | | YES | | | | |
2 | start | rtc check @ 7 | | YES | | | | |
3 | start | rtc check @ 7 | | YES | | | | |
4 | start | rtc check @ 8 | | YES | | | | |
5 | 9 | rtc check @ 8 | | YES | | | | |
6 | start | assert @ 9 | | YES | | | | |
7 | 9 | assert @ 9 | | YES | | | | |
8 | start | rtc check @ 12 | | YES | | | | |
9 | start | assert @ finish | | YES | | | | |
10 | start | assert @ finish | | YES | | | | |
11 | 9 | assert @ finish | | YES | | | | |
----------------------------------------------------------------------------
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 42‫از‬68
‫مجموعه‬ ‫زیر‬SPARK Ada
‫از‬ ‫عبارتند‬ ‫شده‬ ‫حذف‬ ‫موارد‬:
Generics
Access types
Goto statements
Most tasking
Exceptions
Dynamically sized arrays
Implicit subtypes
‫ب‬ ‫مفید‬ ‫و‬ ‫قدرتمند‬ ‫زبان‬ ‫یک‬ ‫نتیجه‬ ‫در‬‫اقی‬
‫ماند‬ ‫می‬.
17‫مه‬17
Ada Subset
Precise Syntax & Semantic Definitions
Ada
Carefully Designed
Programming Language
Select Language Subset
Eliminate Features For Which Proof
Would Be Problematic
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 43‫از‬68
‫خصوصیات‬SPARK Ada
‫منطقی‬ ‫صحت‬–‫ندارد‬ ‫وجود‬ ‫زبانی‬ ‫ابهام‬ ‫هیچ‬.
‫منطقی‬ ‫معنایی‬ ‫قواعد‬ ‫و‬ ‫نحو‬ ‫صوری‬ ‫تعریف‬.
‫امنیت‬–‫زبان‬ ‫معنایی‬ ‫قواعد‬ ‫همه‬‫قابلیت‬ ‫بهینه‬ ‫طور‬ ‫به‬‫بررسی‬‫توسط‬‫ر‬ ‫ماشین‬‫ا‬‫دارند‬.
‫پذیری‬ ‫اثبات‬(Verifiability)
‫دارد‬ ‫دقیقی‬ ‫کامال‬ ‫معنای‬ ‫کد‬.
‫دارد‬ ‫وجود‬ ‫آن‬ ‫مورد‬ ‫در‬ ‫ریاضی‬ ‫صورت‬ ‫به‬ ‫اثبات‬ ‫امکان‬.
‫گر‬ ‫آزمون‬(Examiner)‫دهد‬ ‫می‬ ‫را‬ ‫ماشینی‬ ‫یابی‬ ‫درستی‬ ‫امکان‬:
‫ها‬ ‫مشخصه‬ ‫یابی‬ ‫درستی‬
‫مفید‬ ‫های‬ ‫قابلیت‬ ‫دادن‬ ‫نشان‬ ‫برای‬:
‫شد‬ ‫نخواهد‬ ‫استثنا‬ ‫وارد‬ ‫کد‬ ،‫مثال‬ ‫برای‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 44‫از‬68
‫خصوصیات‬SPARK Ada
‫محدود‬ ‫فضای‬ ‫و‬ ‫زمان‬–‫شوند‬ ‫محاسبه‬ ‫ایستا‬ ‫صورت‬ ‫به‬ ‫بایستی‬ ‫منابع‬.
‫زدنی‬ ‫مثال‬ ‫قدرت‬–‫صنعتی‬ ‫مستحکم‬ ‫کاربردی‬ ‫های‬ ‫برنامه‬
‫کامل‬ ‫زبان‬Ada‫دارد‬ ‫ای‬ ‫پیچیده‬ ‫اجرای‬ ‫زمان‬ ‫سیستم‬:
‫عریان‬ ‫ماشین‬ ‫روی‬ ‫تا‬ ‫است‬ ‫شده‬ ‫طراحی‬(‫عامل‬ ‫سیستم‬ ‫بدون‬)‫شود‬ ‫اجرا‬.
‫است‬ ‫خود‬ ‫خاص‬ ‫اجرای‬ ‫زمان‬ ‫پشتیبان‬ ‫نیازمند‬.
SPARK Ada‫دارد‬ ‫کمینه‬ ‫اجرای‬ ‫زمان‬ ‫سیستم‬ ‫یک‬:
Task‫اند‬ ‫شده‬ ‫حذف‬ ‫ها‬.
‫نیست‬ ‫کار‬ ‫در‬ ‫استثنا‬ ‫مدیریت‬.
‫پیچیده‬ ‫اجرای‬ ‫زمان‬ ‫سیستم‬ ‫بررسی‬ ‫به‬ ‫نیازی‬‫نیست‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 45‫از‬68
SPARK Ada‫است؟‬ ‫برده‬ ‫ارث‬ ‫به‬ ‫را‬ ‫چیزی‬ ‫چه‬
‫هست‬ ‫زیر‬ ‫موارد‬ ‫شامل‬(‫نیست‬ ‫موارد‬ ‫این‬ ‫به‬ ‫محدود‬ ‫فقط‬ ‫اما‬:)
‫عددی‬ ‫ای‬ ‫داده‬ ‫انواع‬(‫ثابت‬ ،‫اعشاری‬ ،‫بولی‬ ،‫کاراکتر‬ ،‫شمارشی‬)
‫رشته‬ ‫و‬ ‫آرایه‬ ‫ای‬ ‫داده‬ ‫انواع‬
‫رکوردها‬
‫ها‬ ‫عبارت‬ ‫کامل‬ ‫طیف‬
‫دستورات‬(assignment, case, loop, if, exit, procedure call, entry call, return, delay)
‫ها‬ ‫زیربرنامه‬
‫ها‬ ‫بسته‬(‫ها‬ ‫کالس‬ ‫همان‬ ‫یعنی‬)
‫سازی‬ ‫پیاده‬ ‫و‬ ‫ها‬ ‫مشخصه‬ ‫کامل‬ ‫جداسازی‬
‫بری‬ ‫ارث‬
‫شامل‬ ‫ها‬ ‫وظیفه‬entries‫و‬entry calls
‫جداگانه‬ ‫کامپایل‬
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 46‫از‬68
SPARK Ada‫است؟‬ ‫کرده‬ ‫حذف‬ ‫را‬ ‫چیزی‬ ‫چه‬
‫وظیفه‬(Task)‫ها‬
‫در‬ ‫ها‬ ‫وظیفه‬ ‫با‬ ‫رابطه‬ ‫در‬ ‫امکانات‬ ‫بیشتر‬SPARK Ada‫اند‬ ‫شده‬ ‫حذف‬.
‫کلیات‬Ravenscar‫است‬ ‫مانده‬ ‫باقی‬ ‫کماکان‬.
‫اند‬ ‫شده‬ ‫حذف‬ ،‫کرد‬ ‫می‬ ‫جلوگیری‬ ‫اثبات‬ ‫از‬ ‫که‬ ‫ها‬ ‫وظیفه‬ ‫های‬ ‫جنبه‬ ‫از‬ ‫بسیاری‬.
‫استثناها‬:
‫کند‬ ‫می‬ ‫جلوگیری‬ ‫اثبات‬ ‫از‬ ‫استثناها‬ ‫پیچیده‬ ‫پویای‬ ‫کنترل‬ ‫جریان‬(‫شود‬ ‫می‬ ‫اثبات‬ ‫مانع‬.)
‫ها‬ ‫قالب‬(Generics)
‫بنیادی‬ ‫قدرت‬(‫اساسی‬)‫نداشتند‬(‫نبودند‬ ‫مهم‬ ‫زیاد‬.)
‫است‬ ‫پیچیده‬ ‫ها‬ ‫قالب‬ ‫حضور‬ ‫در‬ ‫اثبات‬.
‫گرها‬ ‫اشاره‬
‫پویا‬ ‫ابعاد‬ ‫با‬ ‫آرایه‬
‫نام‬ ‫بدون‬ ‫انواع‬(‫ضمنی‬)
‫دستور‬goto
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 47‫از‬68
‫در‬ ‫استثناها‬ ‫چرا‬SPARK Ada‫شدند؟‬ ‫حذف‬
‫کن‬ ‫می‬ ‫پیچیده‬ ‫حد‬ ‫از‬ ‫بیش‬ ‫را‬ ‫برنامه‬ ‫کنترلی‬ ‫جریان‬ ‫کلی‬ ‫طور‬ ‫به‬ ‫استثناها‬ ‫زیرا‬‫ند‬.
‫گیرانه‬ ‫سخت‬ ‫معنایی‬ ‫قواعد‬‫زبان‬Ada‫کنید‬ ‫تصور‬ ‫استثناها‬ ‫انتشار‬ ‫در‬ ‫را‬!
‫کنید‬ ‫تصور‬ ‫را‬ ‫استثناها‬ ‫حوزه‬ ‫به‬ ‫مربوط‬ ‫کلی‬ ‫قواعد‬.
‫تر‬ ‫مهم‬ ‫همه‬ ‫از‬ ‫و‬:
‫باش‬ ‫داشته‬ ‫منتظره‬ ‫غیر‬ ‫استثناهای‬ ‫نبایست‬ ‫وجه‬ ‫هیچ‬ ‫به‬ ‫تایید‬ ‫قابل‬ ‫و‬ ‫درست‬ ‫برنامه‬ ‫یک‬‫د‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 48‫از‬68
‫چیست؟‬ ‫در‬ ‫استثناها‬ ‫مشکالت‬
‫از‬ ‫است‬ ‫عبارت‬ ‫مشکالت‬:
‫دلخواه‬ ‫انشعاب‬ ‫معنایی‬ ‫قواعد‬(arbitrary branch)
‫استثنا‬ ‫کننده‬ ‫کنترل‬ ‫تعیین‬ ‫معنایی‬ ‫قواعد‬
‫کند‬ ‫می‬ ‫عمل‬ ‫آن‬ ‫در‬ ‫استثنا‬ ‫کننده‬ ‫کنترل‬ ‫که‬ ‫محلی‬
‫استثنا‬ ‫کننده‬ ‫کنترل‬ ‫خاتمه‬ ‫معنایی‬ ‫قواعد‬
‫ها‬ ‫وظیفه‬ ‫در‬ ‫استثنا‬
‫ها‬ ‫آن‬ ‫محدوده‬ ‫و‬ ‫استثناها‬ ‫انواع‬
‫کند‬ ‫می‬ ‫عمل‬ ‫درست‬ ‫سیستم‬ ‫قواعد‬ ‫این‬ ‫وجود‬ ‫با‬ ‫شویم‬ ‫مطمئن‬ ‫بایستی‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 49‫از‬68
‫چرا‬‫ها‬ ‫قالب‬‫در‬SPARK Ada‫شدند؟‬ ‫حذف‬
‫نیس‬ ‫بنیادی‬ ‫قدرت‬ ‫دارای‬ ‫ولی‬ ‫کنند‬ ‫می‬ ‫تسهیل‬ ‫را‬ ‫چندگانه‬ ‫سازی‬ ‫نمونه‬ ‫ها‬ ‫قالب‬‫تند‬.
‫سازی‬ ‫کمی‬ ‫به‬ ‫نیاز‬ ‫و‬ ‫است‬ ‫پیچیده‬ ‫خیلی‬ ‫ها‬ ‫قالب‬ ‫خواص‬ ‫آوری‬ ‫جمع‬(‫گرفت‬ ‫کار‬ ‫به‬‫ن‬)
‫دارد‬ ‫مختلف‬ ‫انوع‬ ‫روی‬.
‫قالب‬ ‫ای‬ ‫داده‬ ‫نوع‬ ‫یک‬ ‫چگونه‬ ‫مثال‬ ‫برای‬(‫عام‬)‫کنیم؟‬ ‫آزمایش‬ ‫را‬
‫و‬ ‫باشند‬ ‫جدا‬ ‫کامال‬ ‫باید‬ ‫ها‬ ‫آن‬ ‫که‬ ‫دارد‬ ‫می‬ ‫بیان‬ ‫ها‬ ‫نمونه‬ ‫ی‬ ‫جداگانه‬ ‫یابی‬ ‫درستی‬‫لذا‬
‫شود‬ ‫نمی‬ ‫احساس‬ ‫ها‬ ‫قالب‬ ‫به‬ ‫نیازی‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 50‫از‬68
‫چرا‬‫در‬ ‫گرها‬ ‫اشاره‬SPARK Ada‫شدند؟‬ ‫حذف‬
‫هستند‬ ‫نیاز‬ ‫مورد‬ ‫حافظه‬ ‫پویای‬ ‫مدیریت‬ ‫برای‬ ‫گرها‬ ‫اشاره‬.
‫است‬ ‫اتکاپذیری‬ ‫در‬ ‫واقعی‬ ‫مسئله‬ ‫یک‬ ‫حافظه‬ ‫پویای‬ ‫تخصیص‬.
‫شود‬ ‫نمی‬ ‫تمام‬ ‫اجرا‬ ‫حین‬ ‫در‬ ‫هرگز‬ ‫حافظه‬ ‫که‬ ‫هستیم‬ ‫این‬ ‫اثبات‬ ‫نیازمند‬.
‫است‬ ‫ممکن‬ ‫غیر‬ ‫عموما‬ ‫امر‬ ‫این‬.
‫مش‬ ‫و‬ ‫معلق‬ ‫گر‬ ‫اشاره‬ ،‫حافظه‬ ‫خرابی‬ ‫که‬ ‫باشیم‬ ‫مطمئن‬ ‫تا‬ ‫است‬ ‫نیاز‬ ‫این‬ ‫بر‬ ‫افزون‬‫از‬ ‫کالتی‬
‫است‬ ‫ممکن‬ ‫غیر‬ ‫عمل‬ ‫در‬ ‫هم‬ ‫امر‬ ‫این‬ ‫که‬ ‫دهد‬ ‫نمی‬ ‫رخ‬ ‫قبیل‬ ‫این‬.
‫پوش‬ ‫چشم‬ ‫توان‬ ‫نمی‬ ‫راحتی‬ ‫این‬ ‫به‬ ‫گرها‬ ‫اشاره‬ ‫قدرت‬ ‫از‬ ،‫ها‬ ‫قالب‬ ‫خالف‬ ‫بر‬ ‫حال‬ ‫هر‬ ‫به‬‫ی‬
‫کرد‬/( !!!‫مترجم‬)
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 51‫از‬68
‫نویسی‬ ‫حاشیه‬(Annotations)‫های‬SPARK
‫زبان‬‫نویسی‬ ‫حاشیه‬SPARK‫دارد‬ ‫را‬ ‫خود‬ ‫مختص‬ ‫حقوق‬ ‫و‬ ‫قوانین‬(‫زبان‬ ‫از‬ ‫مستقل‬Ada.)
‫عالمت‬ ‫با‬ ‫که‬ ‫توضیحاتی‬ ‫در‬--#‫شود‬ ‫می‬ ‫جاسازی‬ ،‫شوند‬ ‫می‬ ‫شروع‬.
SPARK‫زبان‬ ‫از‬ ‫مجموعه‬ ‫زیر‬ ‫یک‬Ada‫نویسی‬ ‫حاشیه‬ ‫با‬ ‫که‬ ‫است‬‫ترکیب‬‫است‬ ‫شده‬!
‫کنند‬ ‫می‬ ‫تعریف‬ ‫را‬ ‫زیر‬ ‫موارد‬ ‫ها‬ ‫نویسی‬ ‫حاشیه‬:
‫افزار‬ ‫نرم‬ ‫های‬ ‫مشخصه‬
‫ای‬ ‫داده‬ ‫اقالم‬ ‫بین‬ ‫انتظار‬ ‫مورد‬ ‫های‬ ‫وابستگی‬
‫داریم‬ ‫نویسی‬ ‫حاشیه‬ ‫دسته‬ ‫دو‬ ،‫بنابراین‬:
‫اثبات‬(Proof)
‫برنامه‬ ‫خصوصیات‬ ‫درستی‬ ‫اثبات‬ ‫جهت‬
‫داده‬ ‫جریان‬(Data Flow)
‫آگاهی‬‫به‬ ‫دادن‬‫ابزار‬‫ها‬‫مورد‬ ‫در‬‫ارتباطا‬‫ت‬‫مختلف‬‫بین‬‫اجزای‬‫کد‬‫منبع‬
‫که‬ ‫هایی‬‫نویسی‬‫حاشیه‬‫های‬ ‫مشخصه‬‫را‬ ‫کد‬ ‫درک‬ ،‫دهند‬‫می‬ ‫تشکیل‬ ‫را‬ ‫رسمی‬‫نمایند‬ ‫می‬ ‫تر‬ ‫آسان‬.
‫نوشته‬ ‫اصلی‬ ‫کد‬ ‫از‬ ‫قبل‬ ‫باید‬ ‫ها‬‫نویسی‬‫حاشیه‬‫شوند‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 52‫از‬68
‫ها‬ ‫نویسی‬ ‫حاشیه‬ ‫خالصه‬
--# derives
‫متغیر‬ ‫از‬ ‫یک‬ ‫کدام‬ ‫به‬ ‫خروجی‬ ‫متغیر‬ ‫یک‬ ‫که‬ ‫کند‬ ‫می‬ ‫مشخص‬(‫های‬)‫ورودی‬‫وابسته‬‫است‬.
‫مثال‬ ‫برای‬ ‫است؛‬ ‫سنتی‬ ‫ایستای‬ ‫های‬ ‫تحلیل‬ ‫به‬ ‫شبیه‬ ‫تحلیل‬:
‫متغیر‬ ‫نهایی‬ ‫مقدار‬ ‫زیر‬ ‫کد‬ ‫قطعه‬ ‫در‬Z‫متغیرهای‬ ‫مقدار‬ ‫به‬X‫و‬Y‫است‬ ‫وابسته‬.
17‫مه‬17
procedure Sum(X,Y : in Float; Z : out Float);
--# derives Z from X and Y;
is
begin
Z := X + Y;
end Sum;
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 53‫از‬68
‫ها‬ ‫نویسی‬ ‫حاشیه‬ ‫خالصه‬
--# global
‫بسته‬ ‫داخل‬ ‫در‬ ‫متغیر‬ ‫یک‬ ‫که‬ ‫کند‬ ‫می‬ ‫مشخص‬‫سراسری‬(global)‫است‬.
‫ورودی‬ ‫و‬ ‫خروجی‬ ،‫ورودی‬ ‫شامل‬ ‫متغیر‬ ‫دسترسی‬ ‫مد‬ ‫همچنین‬-‫کند‬ ‫می‬ ‫مشخص‬ ‫نیز‬ ‫را‬ ‫خروجی‬.
‫شود‬ ‫می‬ ‫ظاهر‬ ‫نیز‬ ‫ها‬ ‫وابستگی‬ ‫در‬ ‫یعنی‬ ،‫شود‬ ‫می‬ ‫گرفته‬ ‫کار‬ ‫به‬ ‫اوقات‬ ‫اغلب‬.
--# own
‫است‬ ‫شده‬ ‫تعریف‬ ‫بسته‬ ‫بدنه‬ ‫در‬ ‫متغیر‬ ‫که‬ ‫کند‬ ‫می‬ ‫مشخص‬.
‫کند‬ ‫می‬ ‫دسترس‬ ‫قابل‬ ‫نویسی‬ ‫حاشیه‬ ‫های‬ ‫قسمت‬ ‫سایر‬ ‫برای‬ ‫را‬ ‫نماد‬ ‫آن‬.
‫متغیر‬‫نیست‬ ‫شده‬ ‫شناخته‬ ‫ها‬ ‫مشخصه‬ ‫در‬‫و‬‫بدنه‬ ‫در‬ ‫تنها‬‫است‬ ‫شده‬ ‫شناخته‬.
--# initializes
‫توسط‬ ‫متغیر‬ ‫که‬ ‫کند‬‫می‬ ‫مشخص‬‫بسته‬‫مقداردهی‬‫است‬ ‫شده‬ ‫اولیه‬.
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 54‫از‬68
‫ها‬ ‫نویسی‬ ‫حاشیه‬ ‫خالصه‬
17‫مه‬17
package Temperature is
procedure ConvertFtoC(Fahrenheit : in Float;
Celsius : out Float);
procedure ConvertCtoF(Celsius : in Float;
Fahrenheit : out Float);
function GetTempC return Float;
--# global in Scale;
--# own TempKelvin;
--# initializes TempKelvin;
end Temperature;
package body Temperature is
TempKelvin : Float;
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 55‫از‬68
‫ها‬ ‫نویسی‬ ‫حاشیه‬ ‫خالصه‬
--# pre‫و‬--# post
‫معنای‬‫متداول‬‫پیش‬‫شرط‬‫ها‬‫و‬‫پس‬‫شرط‬‫ها‬
‫نیاز‬‫به‬‫عالمت‬‫های‬:
~‫برای‬‫مقدار‬‫قبلی‬
%‫برای‬‫مقدار‬‫ثابت‬
‫سورها‬:for all،for some
‫همه‬‫گزاره‬‫های‬‫منطقی‬‫و‬‫ریاضی‬‫معمول‬‫را‬‫داریم‬.
‫حاشیه‬‫نویسی‬‫امکان‬‫تعریف‬‫مشخصه‬‫های‬
‫عملیاتی‬‫را‬‫می‬‫دهد‬‫و‬‫ابزارهای‬SPARK‫امکان‬
‫اثبات‬‫درستی‬‫مشخصه‬‫ها‬‫به‬‫صورت‬‫خودکار‬‫را‬
‫فراهم‬‫می‬‫آورند‬.
17‫مه‬17
procedure Swap(X,Y : in out Integer);
--# derives X from Y &
--# Y from X;
--# post X = Y~ & Y = X~;
is
T : Integer;
begin
T := X; X := Y; Y := T;
end Swap;
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 56‫از‬68
‫نامتغیر‬‫حلقه‬(Loop Invariant)
--# assert:‫است‬ ‫درست‬ ‫عبارت‬ ‫کند‬ ‫می‬ ‫ادعا‬.
‫حلقه‬ ‫از‬ ‫مستقل‬ ‫مقادیر‬ ‫تعریف‬ ‫در‬ ‫اصلی‬ ‫کاربرد‬
‫دستور‬S‫شود؟‬ ‫می‬ ‫اجرا‬ ‫چندبار‬
‫نداریم‬ ‫اختیار‬ ‫در‬ ‫ای‬ ‫ایده‬.‫اجرای‬ ‫دفعات‬S‫دارد‬ ‫اجرا‬ ‫طول‬ ‫در‬ ‫ها‬ ‫داده‬ ‫به‬ ‫بستگی‬.
‫کنیم؟‬ ‫اثبات‬ ‫را‬ ‫چیزی‬ ‫هر‬ ‫توانیم‬ ‫می‬ ‫چگونه‬ ‫پس‬
‫نامتغیر‬ ‫یا‬ ‫مستقل‬ ‫مقدار‬:
‫نیست‬ ‫مهم‬ ‫حلقه‬ ‫تکرار‬ ‫دفعات‬ ‫تعداد‬ ،‫کند‬ ‫می‬ ‫سازی‬ ‫مستند‬ ‫را‬ ‫حلقه‬ ‫خود‬.
‫حلقه‬ ‫بدنه‬ ‫دستورات‬ ‫اجرای‬ ‫هر‬ ‫از‬ ‫بعد‬ ‫و‬ ‫قبل‬«‫درست‬»‫است‬.
‫نیست‬ ‫درست‬ ‫بدنه‬ ‫دستورات‬ ‫اجرای‬ ‫حین‬ ‫در‬.
‫یک‬‫منطقی‬ ‫جبری‬ ‫عبارت‬‫است‬.
‫ندارد‬ ‫بستگی‬ ‫حلقه‬ ‫دفعات‬ ‫تعداد‬ ‫به‬ ‫منطقی‬ ‫عبارت‬ ‫مقدار‬.
‫کند‬ ‫می‬ ‫مستند‬ ‫را‬ ‫حلقه‬ ‫محاسبات‬.
17‫مه‬17
while B loop
S;
end loop;
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 57‫از‬68
‫از‬ ‫مثالی‬‫نامتغیر‬‫حلقه‬
‫صحیح‬ ‫تقسیم‬ ‫ساده‬ ‫برنامه‬x / y:
‫حلقه‬ ‫از‬ ‫مستقل‬ ‫مقدار‬:
x = q*y + r  r >= 0
،‫تکرار‬ ‫بار‬ ‫صفر‬ ‫برای‬ ‫فوق‬ ‫عبارت‬
‫تکرار‬ ‫بار‬ ‫یک‬
‫است‬ ‫درست‬ ‫تکرار‬ ‫بار‬ ‫هر‬ ‫تعداد‬ ‫و‬(‫حلقه‬ ‫اجرای‬ ‫از‬ ‫بعد‬ ‫و‬ ‫قبل‬.)
17‫مه‬17
q := 0
r := x;
loop
exit when r < y;
q := q + 1;
r := r – y;
end loop;
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 58‫از‬68
‫ها‬ ‫نویسی‬ ‫حاشیه‬ ‫خالصه‬
17‫مه‬17
package Divide is
procedure IntDivide (X,Y : in Integer; R, Q : out Integer);
--# derives R, Q from X, Y;
--# pre (X >= 0) and (Y > 0);
--# post (X = Q * Y + R) and (R >= 0) and (R < Y);
end IntDivide;
package body Divide is
procedure IntDivide (X,Y : in Integer; R, Q : out Integer) is
begin
Q := 0;
R := X;
loop
--# assert (X = Q*Y + R) and (R >= 0);
exit when R < Y;
Q := Q + 1;
R := R - Y;
end loop;
end IntDivide;
end Divide;
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 59‫از‬68
‫ها‬ ‫نویسی‬ ‫حاشیه‬ ‫خالصه‬
--# main_program
‫کند‬ ‫می‬ ‫مشخص‬ ‫را‬ ‫اصلی‬ ‫برنامه‬.
--# inherit
‫دهد‬ ‫می‬ ‫را‬ ‫ها‬ ‫بسته‬ ‫دیگر‬ ‫در‬ ‫ها‬ ‫موجودیت‬ ‫به‬ ‫دسترسی‬ ‫اجازه‬.
--# hide
‫کند‬ ‫می‬ ‫مشخص‬ ،‫شود‬ ‫واقع‬ ‫آزمایش‬ ‫مورد‬ ‫نیست‬ ‫قرار‬ ‫که‬ ‫را‬ ‫متنی‬.
--# return
‫تابع‬ ‫یک‬ ‫برای‬ ‫شرط‬ ‫پس‬
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 60‫از‬68
‫خالصه‬
‫ساده‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫یک‬–SPARK Ada:
‫است‬ ‫قدرتمند‬ ‫کافی‬ ‫اندازه‬ ‫به‬ ‫کاربردی‬ ‫های‬ ‫برنامه‬ ‫تر‬ ‫بیش‬ ‫برای‬.
‫شده‬ ‫تعریف‬ ‫صوری‬ ‫شکل‬ ‫به‬ ‫آن‬ ‫قواعد‬
‫است‬ ‫دسترس‬ ‫در‬ ‫آن‬ ‫برای‬ ‫باال‬ ‫بسیار‬ ‫کارامدی‬ ‫با‬ ‫کامپایلرهای‬:
‫کامپایلرهای‬ ‫شامل‬‫گواهی‬ ‫تحت‬RTCA DO-178B level A (FAA)
‫ساده‬ ‫نویسی‬ ‫حاشیه‬ ‫زبان‬ ‫یک‬:
‫نظیر‬ ‫هایی‬ ‫مشخصه‬ ‫بیان‬ ‫برای‬ ‫قدرتمند‬ ‫کافی‬ ‫اندازه‬ ‫به‬:
‫ای‬ ‫برنامه‬ ‫هر‬ ‫در‬ ‫ها‬ ‫دسترسی‬ ‫و‬ ‫ها‬ ‫داده‬ ‫جریان‬ ‫تمامی‬
‫توابع‬ ‫و‬ ‫ها‬ ‫روال‬ ‫همه‬ ‫عملیاتی‬ ‫های‬ ‫نیازمندی‬
‫اساسی‬ ‫قضیه‬ ‫یک‬ ‫خودکار‬ ‫اثبات‬ ‫برای‬ ‫ابزارهایی‬:Actual code => low-level specification
‫جدید‬ ‫افزار‬ ‫نرم‬ ‫توسعه‬ ‫الگوی‬:‫ساخت‬ ‫طریق‬ ‫از‬ ‫درستی‬
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 61‫از‬68
‫مراجع‬
 [1] J. Knight, Fundamentals of computing for software engineers. CRC Press
Taylor & Francis Group, 2012.
 Chapter 9: Software Fault Avoidance in Implementation
 Book + Slides
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 62‫از‬68
‫توجه‬ ‫از‬ ‫تشکر‬ ‫با‬‫شما‬
M-ZAKERI@LIVE.COM
‫ن‬ ‫فصل‬ ‫پایان‬ ‫مسائل‬ ‫و‬ ‫ها‬ ‫تمرین‬ ‫به‬ ‫پاسخ‬‫هم‬
‫تمرین‬1
‫شده‬ ‫نویسی‬ ‫حاشیه‬ ‫درستی‬ ‫به‬ ‫های‬ ‫برنامه‬ ‫روی‬ ‫بر‬ ‫که‬ ‫تحلیل‬ ‫نوع‬ ‫دو‬SPARK Ada‫قابل‬
‫کدامند؟‬ ،‫است‬ ‫انجام‬
‫پاسخ‬:‫در‬ ‫نویسی‬ ‫حاشیه‬SPARK Ada‫دارد‬ ‫مهم‬ ‫نقش‬ ‫دو‬:
‫برنامه‬ ‫داده‬ ‫جریان‬ ‫تعریف‬:‫است‬ ‫با‬ ‫و‬ ‫کند‬ ‫می‬ ‫مشخص‬ ‫برنامه‬ ‫در‬ ‫را‬ ‫ها‬ ‫داده‬ ‫بین‬ ‫ارتباط‬ ‫و‬ ‫حوزه‬ ‫که‬‫از‬ ‫فاده‬
‫نویسی‬ ‫حاشیه‬Core‫شود‬ ‫می‬ ‫انجام‬.
‫برنامه‬ ‫عملکرد‬ ‫تعریف‬:‫ح‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫و‬ ‫کند‬ ‫می‬ ‫مشخص‬ ‫را‬ ‫توابع‬ ‫و‬ ‫ها‬ ‫روال‬ ‫عملکرد‬ ‫صحت‬ ‫که‬‫اشیه‬
‫نویسی‬Proof‫شود‬ ‫می‬ ‫انجام‬.
‫است‬ ‫انجام‬ ‫قابل‬ ‫آن‬ ‫روی‬ ‫تحلیل‬ ‫نوع‬ ‫دو‬ ‫نتیجه‬ ‫در‬:
‫داده‬ ‫جریان‬ ‫تحلیل‬:‫ای‬ ‫داده‬ ‫های‬ ‫وابستگی‬ ‫و‬ ‫ها‬ ‫دهی‬ ‫مقدار‬ ‫رعایت‬ ‫از‬ ‫اطمینان‬ ‫منظور‬ ‫به‬
‫عملیاتی‬ ‫تحلیل‬:‫اف‬ ‫نرم‬ ‫شده‬ ‫سازی‬ ‫پیاده‬ ‫های‬ ‫مشخصه‬ ‫درستی‬ ‫و‬ ‫صحت‬ ‫از‬ ‫اطمینان‬ ‫منظور‬ ‫به‬‫زار‬
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 65‫از‬68
‫تمرین‬2
‫نویسی‬ ‫حاشیه‬SPARK Ada‫کند‬ ‫می‬ ‫مستند‬ ‫را‬ ‫ای‬ ‫داده‬ ‫وابستگی‬ ‫که‬(--# derives)
‫تعیی‬ ‫کامپایلر‬ ‫توسط‬ ‫توانند‬ ‫می‬ ‫ها‬ ‫آن‬ ‫تر‬ ‫بیش‬ ‫که‬ ‫کند‬ ‫می‬ ‫فراهم‬ ‫را‬ ‫اطالعاتی‬‫شود‬ ‫ن‬.‫چرا‬
‫است؟‬ ‫نشده‬ ‫واگذار‬ ‫دیگری‬ ‫مشابه‬ ‫ابزار‬ ‫یا‬ ‫و‬ ‫کامپایلر‬ ‫به‬ ‫امر‬ ‫این‬
‫پاسخ‬:‫ک‬ ‫از‬ ‫مستقل‬ ‫را‬ ‫ها‬ ‫داده‬ ‫بین‬ ‫وابستگی‬ ‫که‬ ‫است‬ ‫این‬ ‫نویسی‬ ‫حاشیه‬ ‫از‬ ‫هدف‬‫د‬
‫بررسی‬ ‫را‬ ‫آن‬ ‫بتوانند‬ ‫ابزارها‬ ‫نحوی‬ ‫به‬ ‫کند‬ ‫مشخص‬ ‫شده‬ ‫نوشته‬(Check)‫کنند‬.‫نتیجه‬ ‫در‬
‫رود‬ ‫می‬ ‫انتظار‬ ‫داده‬ ‫جریان‬ ‫کند‬ ‫مشخص‬ ‫مهندس‬ ‫که‬ ‫است‬ ‫آن‬ ‫اینجا‬ ‫در‬ ‫اصلی‬ ‫ایده‬
‫شده‬ ‫نوشته‬ ‫کد‬ ‫آیا‬ ‫که‬ ‫کند‬ ‫بررسی‬ ‫ابزار‬ ‫یک‬ ‫سپس‬ ‫و‬ ‫باشد‬ ‫چگونه‬(‫ا‬ ‫ممکن‬ ‫که‬‫توسط‬ ‫ست‬
‫باشد‬ ‫شده‬ ‫نوشته‬ ،‫است‬ ‫نوشته‬ ‫را‬ ‫ها‬ ‫حاشیه‬ ‫که‬ ‫شخصی‬ ‫همان‬)‫د‬ ‫جریان‬ ‫این‬ ‫واقعا‬‫را‬ ‫اده‬
‫محد‬ ‫بتوانند‬ ‫تا‬ ‫سازد‬ ‫می‬ ‫قادر‬ ‫را‬ ‫ابزارها‬ ،‫امر‬ ‫این‬ ‫بنابراین‬ ‫خیر؟‬ ‫یا‬ ‫کند‬ ‫می‬ ‫پیروی‬‫وده‬
‫شده‬ ‫نوشته‬ ‫کد‬ ‫خصوصیات‬ ‫از‬ ‫وسیعی‬(‫دست‬ ،‫متغیرها‬ ‫به‬ ‫اولیه‬ ‫دهی‬ ‫مقدار‬ ‫شامل‬‫رسی‬
‫غیره‬ ‫و‬ ‫ها‬ ‫آن‬ ‫به‬ ‫مناسب‬)‫کنند‬ ‫بررسی‬ ‫خودکار‬ ‫طور‬ ‫به‬ ‫را‬(‫ص‬281.)
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 66‫از‬68
‫تمرین‬3
‫و‬ ‫بگیرید‬ ‫نظر‬ ‫در‬ ‫را‬ ‫زیر‬ ‫کد‬ ‫قطعه‬‫نامتغیر‬‫حلقه‬(Loop Invariant)‫مشخص‬ ‫آن‬ ‫برای‬ ‫را‬
‫نمایید‬.
‫پاسخ‬:
17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬
Pre-conditions: n >= 0
Post-conditions: factorial = n!
Loop Invariant:
i >= 1 / i <= n / factorial = (i)!
67‫از‬68
‫ها‬ ‫بیت‬ ‫سازی‬ ‫پیاده‬(‫اصلی‬ ‫مرجع‬ ‫شکل‬)
17‫مه‬17
Specification
Implementation
In High Level
Language
Relocatable
Binary
Implementation
Relocated
Binary
Implementation
Humans
Algorithms & Data structures
Compiler
Machine and Library
Descriptions
Linker & Loader
Libraries
‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 68‫از‬68

Mais conteúdo relacionado

Semelhante a Software Fault Avoidance in Implementation

چارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاریچارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاریعباس بني اسدي مقدم
 
What is Computer Programming?
What is Computer Programming?What is Computer Programming?
What is Computer Programming?Open Pakistan
 
Security tools - ابزارهای امنیتی
Security tools - ابزارهای امنیتیSecurity tools - ابزارهای امنیتی
Security tools - ابزارهای امنیتیMehdi Esmaeilpour
 
How to program with c in persian
How to program with c in persianHow to program with c in persian
How to program with c in persianmoein jazemi
 
Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)
Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)
Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)amirbabol
 
How to be a better Developer & Programmer
How to be a better Developer & ProgrammerHow to be a better Developer & Programmer
How to be a better Developer & ProgrammerReza Razavi
 
چرا نود.جی اس؟
چرا نود.جی اس؟چرا نود.جی اس؟
چرا نود.جی اس؟Masoud Sharifi
 
آموزش نرم افزار صنعتی کنترل و مانیتورینگ LabVIEW
آموزش نرم افزار صنعتی کنترل و مانیتورینگ LabVIEWآموزش نرم افزار صنعتی کنترل و مانیتورینگ LabVIEW
آموزش نرم افزار صنعتی کنترل و مانیتورینگ LabVIEWfaradars
 
Java programming languages
Java programming languagesJava programming languages
Java programming languagesjavadib
 
دستگاه حضور و غیاب
دستگاه حضور و غیابدستگاه حضور و غیاب
دستگاه حضور و غیابkaraban41378
 
سوالات کاربر تولید محتوا از فصل 4 تا 7
سوالات کاربر تولید محتوا از فصل 4  تا 7سوالات کاربر تولید محتوا از فصل 4  تا 7
سوالات کاربر تولید محتوا از فصل 4 تا 7nazaninjam
 
The role of formal method in reaching dependable software (farsi)
The role of formal method in reaching dependable software (farsi)The role of formal method in reaching dependable software (farsi)
The role of formal method in reaching dependable software (farsi)Ali Bahrani
 
مفاهیم اولیه داکر
مفاهیم اولیه داکرمفاهیم اولیه داکر
مفاهیم اولیه داکرAli Rasoulian
 

Semelhante a Software Fault Avoidance in Implementation (20)

چارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاریچارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاری
 
What is Computer Programming?
What is Computer Programming?What is Computer Programming?
What is Computer Programming?
 
مهاجرت به متن باز
مهاجرت به متن بازمهاجرت به متن باز
مهاجرت به متن باز
 
Security tools - ابزارهای امنیتی
Security tools - ابزارهای امنیتیSecurity tools - ابزارهای امنیتی
Security tools - ابزارهای امنیتی
 
How to program with c in persian
How to program with c in persianHow to program with c in persian
How to program with c in persian
 
Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)
Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)
Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)
 
How to be a better Developer & Programmer
How to be a better Developer & ProgrammerHow to be a better Developer & Programmer
How to be a better Developer & Programmer
 
Amjadi - Ebook 5 - Function - v1
Amjadi - Ebook 5 - Function - v1Amjadi - Ebook 5 - Function - v1
Amjadi - Ebook 5 - Function - v1
 
C++
C++C++
C++
 
C++
C++C++
C++
 
چرا نود.جی اس؟
چرا نود.جی اس؟چرا نود.جی اس؟
چرا نود.جی اس؟
 
RayBPMS (Rayvarz Business Process Management System)
RayBPMS (Rayvarz Business Process Management System)RayBPMS (Rayvarz Business Process Management System)
RayBPMS (Rayvarz Business Process Management System)
 
programing.pptx
programing.pptxprograming.pptx
programing.pptx
 
Scrum Presentation
Scrum PresentationScrum Presentation
Scrum Presentation
 
آموزش نرم افزار صنعتی کنترل و مانیتورینگ LabVIEW
آموزش نرم افزار صنعتی کنترل و مانیتورینگ LabVIEWآموزش نرم افزار صنعتی کنترل و مانیتورینگ LabVIEW
آموزش نرم افزار صنعتی کنترل و مانیتورینگ LabVIEW
 
Java programming languages
Java programming languagesJava programming languages
Java programming languages
 
دستگاه حضور و غیاب
دستگاه حضور و غیابدستگاه حضور و غیاب
دستگاه حضور و غیاب
 
سوالات کاربر تولید محتوا از فصل 4 تا 7
سوالات کاربر تولید محتوا از فصل 4  تا 7سوالات کاربر تولید محتوا از فصل 4  تا 7
سوالات کاربر تولید محتوا از فصل 4 تا 7
 
The role of formal method in reaching dependable software (farsi)
The role of formal method in reaching dependable software (farsi)The role of formal method in reaching dependable software (farsi)
The role of formal method in reaching dependable software (farsi)
 
مفاهیم اولیه داکر
مفاهیم اولیه داکرمفاهیم اولیه داکر
مفاهیم اولیه داکر
 

Mais de Morteza Zakeri

Antlr part3 getting_started_in_c_sharp
Antlr part3 getting_started_in_c_sharpAntlr part3 getting_started_in_c_sharp
Antlr part3 getting_started_in_c_sharpMorteza Zakeri
 
Antlr part1 introduction
Antlr part1 introductionAntlr part1 introduction
Antlr part1 introductionMorteza Zakeri
 
Antlr part2 getting_started_in_java
Antlr part2 getting_started_in_javaAntlr part2 getting_started_in_java
Antlr part2 getting_started_in_javaMorteza Zakeri
 
2-requirements-modelling
2-requirements-modelling2-requirements-modelling
2-requirements-modellingMorteza Zakeri
 
1-requirements-elicitation
1-requirements-elicitation1-requirements-elicitation
1-requirements-elicitationMorteza Zakeri
 
Analysis of Social Phenomena Using Machine Learning Techniques: A Mixed Resea...
Analysis of Social Phenomena Using Machine Learning Techniques: A Mixed Resea...Analysis of Social Phenomena Using Machine Learning Techniques: A Mixed Resea...
Analysis of Social Phenomena Using Machine Learning Techniques: A Mixed Resea...Morteza Zakeri
 
Internet of Things: Middle-ware Platforms, Security, and Intrusion Detection
Internet of Things: Middle-ware Platforms, Security, and Intrusion DetectionInternet of Things: Middle-ware Platforms, Security, and Intrusion Detection
Internet of Things: Middle-ware Platforms, Security, and Intrusion DetectionMorteza Zakeri
 
Community Detection with Genetic Algorithm
Community Detection with Genetic AlgorithmCommunity Detection with Genetic Algorithm
Community Detection with Genetic AlgorithmMorteza Zakeri
 
SpotifyX Architectural Review
SpotifyX Architectural ReviewSpotifyX Architectural Review
SpotifyX Architectural ReviewMorteza Zakeri
 
An overview of anomaly detection techniques
An overview of anomaly detection techniquesAn overview of anomaly detection techniques
An overview of anomaly detection techniquesMorteza Zakeri
 
SQLite and object-relational mapping in Java
SQLite and object-relational mapping in JavaSQLite and object-relational mapping in Java
SQLite and object-relational mapping in JavaMorteza Zakeri
 
Apache Mesos: Architecture, Design and Code Review
Apache Mesos: Architecture, Design and Code ReviewApache Mesos: Architecture, Design and Code Review
Apache Mesos: Architecture, Design and Code ReviewMorteza Zakeri
 
یادگیری توالی به توالی با شبکه های عصبی
یادگیری توالی به توالی با شبکه های عصبییادگیری توالی به توالی با شبکه های عصبی
یادگیری توالی به توالی با شبکه های عصبیMorteza Zakeri
 

Mais de Morteza Zakeri (20)

Antlr part3 getting_started_in_c_sharp
Antlr part3 getting_started_in_c_sharpAntlr part3 getting_started_in_c_sharp
Antlr part3 getting_started_in_c_sharp
 
Antlr part1 introduction
Antlr part1 introductionAntlr part1 introduction
Antlr part1 introduction
 
Antlr part2 getting_started_in_java
Antlr part2 getting_started_in_javaAntlr part2 getting_started_in_java
Antlr part2 getting_started_in_java
 
9-roslyn-guidelines
9-roslyn-guidelines9-roslyn-guidelines
9-roslyn-guidelines
 
7-clean-code
7-clean-code7-clean-code
7-clean-code
 
8-bad-smells
8-bad-smells8-bad-smells
8-bad-smells
 
6-TDD
6-TDD6-TDD
6-TDD
 
3-use-casemodelling
3-use-casemodelling3-use-casemodelling
3-use-casemodelling
 
5-modular-design
5-modular-design5-modular-design
5-modular-design
 
4-architectural-views
4-architectural-views4-architectural-views
4-architectural-views
 
2-requirements-modelling
2-requirements-modelling2-requirements-modelling
2-requirements-modelling
 
1-requirements-elicitation
1-requirements-elicitation1-requirements-elicitation
1-requirements-elicitation
 
Analysis of Social Phenomena Using Machine Learning Techniques: A Mixed Resea...
Analysis of Social Phenomena Using Machine Learning Techniques: A Mixed Resea...Analysis of Social Phenomena Using Machine Learning Techniques: A Mixed Resea...
Analysis of Social Phenomena Using Machine Learning Techniques: A Mixed Resea...
 
Internet of Things: Middle-ware Platforms, Security, and Intrusion Detection
Internet of Things: Middle-ware Platforms, Security, and Intrusion DetectionInternet of Things: Middle-ware Platforms, Security, and Intrusion Detection
Internet of Things: Middle-ware Platforms, Security, and Intrusion Detection
 
Community Detection with Genetic Algorithm
Community Detection with Genetic AlgorithmCommunity Detection with Genetic Algorithm
Community Detection with Genetic Algorithm
 
SpotifyX Architectural Review
SpotifyX Architectural ReviewSpotifyX Architectural Review
SpotifyX Architectural Review
 
An overview of anomaly detection techniques
An overview of anomaly detection techniquesAn overview of anomaly detection techniques
An overview of anomaly detection techniques
 
SQLite and object-relational mapping in Java
SQLite and object-relational mapping in JavaSQLite and object-relational mapping in Java
SQLite and object-relational mapping in Java
 
Apache Mesos: Architecture, Design and Code Review
Apache Mesos: Architecture, Design and Code ReviewApache Mesos: Architecture, Design and Code Review
Apache Mesos: Architecture, Design and Code Review
 
یادگیری توالی به توالی با شبکه های عصبی
یادگیری توالی به توالی با شبکه های عصبییادگیری توالی به توالی با شبکه های عصبی
یادگیری توالی به توالی با شبکه های عصبی
 

Software Fault Avoidance in Implementation

  • 1. ‫کامپیوتر‬ ‫مهندسی‬ ‫دانشکده‬ ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطای‬ ‫از‬ ‫اجتناب‬ Software Fault Avoidance in Implementation ‫پذیر‬ ‫اتکا‬ ‫افزاری‬ ‫نرم‬ ‫های‬ ‫سیستم‬ ‫درس‬ ‫پژوهش‬ (‫کامل‬ ‫نسخه‬) ‫دانشجو‬: ‫ذاکری‬ ‫مرتضی‬ ‫استاد‬: ‫ازگمی‬ ‫عبدللهی‬ ‫محمد‬ ‫دکتر‬ ‫ماه‬ ‫اردیبهشت‬1396
  • 2. ‫مطالب‬ ‫رئوس‬ ‫چارچوب‬ ‫و‬ ‫زبان‬SPARK Ada ‫در‬ ‫افزار‬ ‫نرم‬ ‫تحلیل‬ ‫فرایند‬SPARK Ada ‫داده‬ ‫جریان‬ ‫تحلیل‬ ‫عملیاتی‬ ‫های‬ ‫جنبه‬ ‫تحلیل‬ ‫مقایسه‬Ada‫و‬SPARK Ada ‫در‬ ‫نویسی‬ ‫حاشیه‬SPARK Ada ‫نامتغیر‬‫حلقه‬ ‫گیری‬ ‫نتیجه‬ ‫و‬ ‫خالصه‬ ‫آن‬ ‫از‬ ‫ناشی‬ ‫مشکالت‬ ‫و‬ ‫سازی‬ ‫پیاده‬ ‫نویسی‬ ‫برنامه‬ ‫های‬ ‫زبان‬ ‫اشکاالت‬ ‫برخی‬ ‫موردی‬ ‫مطالعه‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫مشکالت‬C ‫نویسی‬ ‫برنامه‬ ‫استانداردهای‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬Ada ‫طریق‬ ‫از‬ ‫درستی‬‫ساخت‬ ‫سه‬ ‫رویکردهای‬‫گانه‬ 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 2‫از‬68
  • 3. ‫سازی‬ ‫پیاده‬ ‫سند‬ ‫یک‬ ‫از‬ ‫شروع‬ ‫با‬‫مشخصات‬(specification)‫که‬ ‫ترجیحا‬‫صوری‬(formal)‫و‬ ‫زبان‬ ‫یک‬ ‫در‬ ‫احتماال‬‫اعالنی‬(declarative)،‫است‬ ‫شده‬ ‫بیان‬ ، ‫مرحله‬ ‫به‬‫سازی‬ ‫پیاده‬‫رسیم‬ ‫می‬. ‫شود‬ ‫می‬ ‫انجام‬ ‫باال‬ ‫سطح‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫یک‬ ‫توسط‬ ‫معموال‬ ‫سازی‬ ‫پیاده‬. ‫برنامه‬ ‫اما‬‫هایی‬ ‫بیت‬‫گیرد‬ ‫می‬ ‫جای‬ ‫حافظه‬ ‫در‬ ‫که‬ ‫است‬! 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 3‫از‬68
  • 4. ‫ها‬ ‫بیت‬ ‫سازی‬ ‫پیاده‬ 17‫مه‬17 ‫مشخصات‬ ‫یک‬ ‫در‬ ‫سازی‬ ‫پیاده‬ ‫باال‬ ‫سطح‬ ‫زبان‬ ‫سازی‬ ‫پیاده‬ ‫دودویی‬ ‫کد‬ ‫حمل‬ ‫قابل‬ ‫سازی‬ ‫پیاده‬ ‫دودویی‬ ‫کد‬ ‫حمل‬ ‫قابل‬ ‫انسان‬ ‫ها‬ ‫الگوریتم‬ ‫و‬ ‫ساختارها‬ ‫داده‬ ‫کامپایلر‬ ‫کتابخانه‬ ‫و‬ ‫ماشین‬ ‫توصیفات‬ ‫های‬ ‫کتابخانه‬ ‫دهنده‬ ‫پیوند‬‫و‬‫بارکننده‬ ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 4‫از‬68
  • 5. ‫افزار‬ ‫نرم‬ ‫در‬ ‫چیزی‬ ‫چه‬‫است؟‬ ‫اشتباه‬ ‫اشتباه‬ ‫کارکرد‬(commission) ‫شده‬ ‫گم‬ ‫کارکرد‬(omission) ‫منابع‬ ‫اشتباه‬ ‫مدیریت‬ ‫همروند‬ ‫های‬ ‫سیستم‬ ‫در‬ ‫ها‬ ‫پردازنده‬ ‫سازی‬ ‫ذخیره‬(‫حافظه‬)‫ها‬ ‫سیستم‬ ‫همه‬ ‫در‬ ‫وروردی‬ ‫های‬ ‫دستگاه‬ ‫و‬ ‫ها‬ ‫فایل‬-‫ها‬ ‫سیستم‬ ‫همه‬ ‫در‬ ‫خروجی‬ ‫نشده‬ ‫بینی‬ ‫پیش‬ ‫استثناهای‬ ‫ها‬ ‫کتابخانه‬ ‫و‬ ‫ترجمه‬ ‫خطاهای‬ ‫غل‬ ‫شده‬ ‫سازی‬ ‫پیاده‬ ‫نمونه‬ ،‫معیوب‬ ‫کتابخانه‬ ،‫نادرست‬ ‫کتابخانه‬ ،‫شده‬ ‫تولید‬ ‫کدهای‬ ‫در‬ ‫خطا‬‫اتصال‬ ،‫ط‬ ‫معیوب‬ ‫بارکننده‬ ‫یا‬ ‫دهنده‬ ‫پیکربندی‬ ‫های‬ ‫اشکال‬ 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 5‫از‬68
  • 6. ‫نویسی‬ ‫برنامه‬ ‫های‬ ‫زبان‬ ‫حال‬ ‫این‬ ‫با‬ ‫کند؛‬ ‫نمی‬ ‫تضمین‬ ‫را‬ ‫خوب‬ ‫افزار‬ ‫نرم‬ ،‫خوب‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬: ‫کنند‬ ‫کمک‬ ‫نویسی‬ ‫برنامه‬ ‫به‬ ‫توانند‬ ‫می‬ ‫خوب‬ ‫های‬ ‫زبان‬. ‫شوند‬ ‫نویس‬ ‫برنامه‬ ‫کار‬ ‫مانع‬ ‫توانند‬ ‫می‬ ‫ضعیف‬ ‫های‬ ‫زبان‬. ‫نیازمند‬ ‫نتیجه‬ ‫در‬ ،‫هستند‬ ‫زبان‬ ‫امکانات‬ ‫از‬ ‫ناشی‬ ‫اشتباهات‬ ‫از‬ ‫زیادی‬ ‫های‬ ‫گونه‬: ‫های‬ ‫مجموعه‬ ‫زیر‬«‫امن‬»‫ها‬ ‫زبان‬ ‫بعضی‬ ‫از‬ ‫شوند‬ ‫مانع‬ ‫را‬ ‫نویسی‬ ‫برنامه‬ ‫در‬ ‫شده‬ ‫شناخته‬ ‫ساز‬ ‫مشکل‬ ‫های‬ ‫شیوه‬ ‫که‬ ‫استانداردهایی‬. ‫دارد‬ ‫اختیار‬ ‫در‬ ‫دهنده‬ ‫توسعه‬ ‫که‬ ‫است‬ ‫ابزاری‬ ‫ترین‬ ‫ای‬ ‫پایه‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬. ‫کند‬ ‫پشتیبانی‬ ‫را‬ ‫اتکاپذیری‬ ‫اهداف‬ ‫بایستی‬ ‫زبان‬ ‫انتخاب‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 6‫از‬68
  • 7. ‫زبان‬ ‫مهم‬ ‫های‬ ‫ویژگی‬ ‫واضح‬ ‫نحوی‬ ‫قواعد‬(Clear Syntax) ‫جامع‬ ‫تجرید‬ ‫و‬ ‫ساختاری‬ ‫کارهای‬ ‫و‬ ‫ساز‬ ‫قوی‬ ‫ای‬ ‫داده‬ ‫انواع‬(Strong Typing) ‫همروندی‬ ‫از‬ ‫پشتیبانی‬ ‫دقیق‬ ‫خیلی‬ ‫تعاریف‬(‫صوری‬)‫جامع‬ ‫و‬ 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 7‫از‬68
  • 8. ‫مشکل‬ ‫از‬ ‫هایی‬ ‫نمونه‬ ‫مقاله‬ ‫از‬ ‫برگرفته‬:  A Software Fault Prevention Approach in Coding and Root Cause Analysis  By Weider D. Yu, 1998. ‫در‬ ‫کد‬ ‫خط‬ ‫میلیون‬ ‫چندین‬ ‫تحلیل‬ ‫حاصل‬Lucent 5ESS switching system ‫زبان‬ ‫به‬ ‫کدها‬ ‫بیشتر‬C‫است‬ ‫بوده‬. ‫پروژه‬ ‫هدف‬:‫زبان‬ ‫به‬ ‫که‬ ‫بزرگی‬ ‫های‬ ‫سیستم‬ ‫در‬ ‫خطا‬ ‫از‬ ‫اجتناب‬C‫شوند‬ ‫می‬ ‫نوشته‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 8‫از‬68
  • 9. ‫مشکل‬ ‫از‬ ‫هایی‬ ‫نمونه‬ ‫به‬ ‫نزدیک‬50‫سط‬ ‫نویسی‬ ‫برنامه‬ ‫های‬ ‫اشکال‬ ،‫شدند‬ ‫پیدا‬ ‫که‬ ‫هایی‬ ‫اشکال‬ ‫از‬ ‫درصد‬‫ح‬ ‫بودند‬ ‫پایین‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 9‫از‬68
  • 10. ‫عملگر‬ ‫تقدم‬ ‫متفاوت‬ ‫تقدم‬ ‫عملگر‬ ‫تقدم‬==‫عملگر‬ ‫از‬&‫است‬ ‫باالتر‬.‫مثال‬ ‫برای‬:  if (blkptr -> rpthead.fltdesc & HMFLTCLAS == HWMATEFLT) ‫شود‬ ‫اصالح‬ ‫زیر‬ ‫شکل‬ ‫به‬ ‫باید‬ ،‫باال‬ ‫کد‬ ‫قطعه‬(‫من‬ ‫گذاری‬ ‫پرانتز‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫تقدم‬ ‫تغییر‬‫اسب‬:)  if ((blkptr -> rpthead.fltdesc & HMFLTCLAS)== HWMATEFLT) ‫است‬ ‫اهمیت‬ ‫حایز‬ ‫پذیری‬ ‫شرکت‬ ،‫یکسان‬ ‫تقدم‬ ‫در‬. ‫تقدم‬ ‫زیر‬ ‫کد‬ ‫قطعه‬ ‫در‬*‫و‬++‫است‬ ‫چپ‬ ‫به‬ ‫راست‬ ‫از‬ ‫آن‬ ‫پذیری‬ ‫شرکت‬ ‫اما‬ ‫است‬ ‫یکسان‬:  *numretry++; ‫آن‬ ‫محتوای‬ ‫به‬ ‫ارجاع‬ ‫سپس‬ ‫و‬ ‫گر‬ ‫اشاره‬ ‫یک‬ ‫افزایش‬ ‫یعنی‬ ‫باال‬ ‫کد‬!‫اص‬ ‫باید‬ ‫و‬ ‫است‬ ‫نادرست‬ ‫که‬‫الح‬ ‫شود‬:  (*numretry)++; 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 10‫از‬68
  • 11. ‫حلقه‬ ‫کنترل‬for ‫واقع‬ ‫در‬ ‫باال‬ ‫کد‬‫کامپایلر‬ ‫به‬ ‫وابسته‬‫است‬!‫شو‬ ‫اصالح‬ ‫زیر‬ ‫صورت‬ ‫به‬ ‫باید‬ ‫پس‬‫د‬: 17‫مه‬17 for (idx = 0; idx < 40; dispstring[idx] = COTsuccess[idx++]); for (idx = 0; idx < 40; idx++) { dispstring[idx] = COTsuccess[idx] }; ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 11‫از‬68
  • 12. ‫در‬ ‫منطقی‬ ‫خطاهای‬Lucent 5ESS ‫مقدار‬ ‫تخصیص‬/‫برابری‬ ‫غیر‬ ‫و‬ ‫دار‬ ‫عالمت‬ ‫بیتی‬ ‫فیلدهای‬enum AND‫عملگرهای‬ ‫و‬ ‫منطقی‬mask ‫نادرست‬ ‫پردازنده‬ ‫پیش‬ ‫شرطی‬ ‫اشتباهات‬ ‫توضیح‬ ‫های‬ ‫کننده‬ ‫جدا‬(comment) ‫ها‬ ‫مقایسه‬ ‫و‬ ‫عالمت‬ ‫بی‬ ‫متغیرهای‬ ‫نوع‬ ‫تبدیل‬ ‫از‬ ‫نادرست‬ ‫استفاده‬ (Type Casting) ‫اولیه‬ ‫مقداردهی‬ ‫متغیرهای‬ ‫از‬ ‫استفاده‬ ‫نشده‬ ‫دستورات‬ ‫از‬ ‫نادرست‬ ‫استفاده‬break‫و‬ continue ‫عملگرها‬ ‫تقدم‬ ‫ها‬ ‫حلقه‬ ‫مرزی‬ ‫شرایط‬ ‫ها‬ ‫آرایه‬ ‫محدوده‬ ‫از‬ ‫خارج‬ ‫های‬ ‫اندیس‬ ‫مقادیر‬ ‫برش‬ ‫و‬ ‫تقریب‬ ‫گرها‬ ‫اشاره‬ ‫از‬ ‫نادرست‬ ‫استفاده‬ ‫های‬ ‫تست‬AND‫و‬OR‫اشتباه‬ 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 12‫از‬68
  • 13. ‫پروژه‬ ‫نتایج‬ ‫ن‬ ‫کد‬ ‫مشکالت‬ ‫از‬ ‫اینگونه‬ ‫تعداد‬ ‫کردن‬ ‫کم‬ ‫به‬ ‫کمک‬ ‫برای‬ ‫هایی‬ ‫تکنیک‬ ‫توسعه‬‫ویسی‬ ‫کاهش‬ ‫نتیجه‬34.5‫های‬ ‫نسخه‬ ‫در‬ ‫خطا‬ ‫وقوع‬ ‫نرخ‬ ‫درصدی‬T‫و‬T+1‫بود‬. ‫کاهش‬18.3‫آزمون‬ ‫هزینه‬ ‫درصدی‬(‫کد‬ ‫خط‬ ‫هر‬ ‫ازای‬ ‫به‬ ‫آزمون‬ ‫هزینه‬) ‫ها‬ ‫تکنیک‬ ‫هزینه‬100‫آزمون‬ ‫و‬ ‫بازنگری‬ ‫در‬ ‫شده‬ ‫جویی‬ ‫صرفه‬ ‫هزینه‬ ‫دالر؛‬ ‫هزار‬7‫میلیون‬ ‫دالر‬‫است‬ ‫صرفه‬ ‫به‬ ‫کار‬ ‫این‬ ‫انجام‬ ،‫بله‬! ‫است؟‬ ‫خوب‬ ‫کافی‬ ‫اندازه‬ ‫به‬ ‫کار‬ ‫این‬ ‫آیا‬ 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 13‫از‬68
  • 14. ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫مشکالت‬C ‫زبان‬C‫است‬ ‫نوع‬ ‫بدون‬ ‫اساسا‬. ‫زبان‬ ‫نحو‬C‫است‬ ‫کننده‬ ‫گیج‬. ‫هستند‬ ‫پارامترها‬ ‫برای‬ ‫اشتباهی‬ ‫معانی‬ ‫گرها‬ ‫اشاره‬. ‫هستند‬ ‫ناکافی‬ ‫و‬ ‫ناقص‬ ‫مجموع‬ ‫در‬ ‫ها‬ ‫آموزش‬ ‫تر‬ ‫بیش‬. ‫دارند‬ ‫وجود‬ ‫بهتری‬ ‫های‬ ‫زبان‬. ‫از‬ ‫اگر‬C،‫کنید‬ ‫می‬ ‫استفاده‬‫باشید‬ ‫مراقب‬ ‫بسیار‬! 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 14‫از‬68
  • 15. ‫نویسی‬ ‫برنامه‬ ‫استانداردهای‬ ‫شوند؟‬ ‫می‬ ‫حل‬ ‫استانداردهای‬ ‫رعایت‬ ‫با‬ ‫مشکالت‬ ‫همه‬ ‫آیا‬ ‫تئوری‬ ‫در‬:‫بله‬! ‫عمل‬ ‫در‬:‫خیر‬! ‫خیر؟‬ ‫چرا‬ ‫شوند‬ ‫می‬ ‫اعمال‬ ‫ابزار‬ ‫با‬ ‫و‬ ‫سیستماتیک‬ ‫شکل‬ ‫به‬ ‫ندرت‬ ‫به‬ ‫استانداردها‬. ‫نیستند‬ ‫کامل‬ ‫وجه‬ ‫هیچ‬ ‫به‬ ‫استانداردها‬. ‫نیست‬ ‫استانداردها‬ ‫از‬ ‫بسیاری‬ ‫اولیه‬ ‫هدف‬ ‫خطا‬ ‫از‬ ‫اجتناب‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 15‫از‬68
  • 16. ‫نویسی‬ ‫برنامه‬ ‫استانداردهای‬ ‫برخی‬ ‫استاندارد‬MISRA(Motor Industry Software Reliability Association)‫زبان‬ ‫برای‬C http://www.misra.org.uk Free Software Foundation‫مختلف‬ ‫های‬ ‫بخش‬ ‫برای‬ http://www.gnu.org/prep/standards/ Ada Quality & Style: Guidelines For Professional Programmers http://www.adaic.org/docs/95style/95style.pdf ‫باشید‬ ‫نویسی‬ ‫برنامه‬ ‫استانداردهای‬ ‫مجموعه‬ ‫یک‬ ‫دنبال‬ ‫به‬ ‫همیشه‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 16‫از‬68
  • 17. ‫استاندارد‬MISRA C ‫قانون‬47 ‫زبان‬ ‫های‬ ‫عبارت‬ ‫در‬ ‫عملگر‬ ‫تقدم‬ ‫قواعد‬ ‫روی‬ ‫نباید‬ ‫وابستگی‬ ‫گونه‬ ‫هیچ‬C‫شود‬ ‫داده‬ ‫قرار‬. ‫قانون‬59 ‫های‬ ‫عبارت‬ ‫بدنه‬ ‫که‬ ‫دستوراتی‬if،else if،else،while،do . . . While‫و‬for،‫دهند‬ ‫می‬ ‫تشکیل‬ ‫را‬ ‫آکوال‬ ‫داخل‬ ‫همیشه‬ ‫بایستی‬({ })‫گیرند‬ ‫قرار‬ ،(‫باشد‬ ‫دستور‬ ‫یک‬ ‫اگر‬ ‫حتی‬.) ‫قانون‬66 ‫دستور‬ ‫داخل‬ ‫در‬ ‫بایستی‬ ‫هستند‬ ‫حلقه‬ ‫کنترل‬ ‫با‬ ‫مرتبط‬ ‫که‬ ‫هایی‬ ‫عبارت‬ ‫فقط‬for‫روند‬ ‫کار‬ ‫به‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 17‫از‬68
  • 18. ‫زبان‬Ada–‫برتر‬ ‫انتخاب‬ ‫یک‬ ‫امریکا‬ ‫دفاع‬ ‫وزارت‬ ‫توسط‬ ‫پروژه‬(DoD)‫دهه‬ ‫اواخر‬ ‫در‬70‫گرفت‬ ‫شکل‬ ‫میالدی‬. ‫های‬ ‫پروژه‬ ‫تمام‬ ‫تا‬ ‫رفت‬ ‫می‬ ‫انتظار‬DoD‫زبان‬ ‫از‬ ،Ada‫کنند‬ ‫استفاده‬. ‫استف‬ ‫مورد‬ ‫زمان‬ ‫آن‬ ‫در‬ ‫که‬ ‫نویسی‬‫برنامه‬ ‫زبان‬ ‫زیادی‬ ‫تعداد‬ ‫جایگزینی‬ ‫برای‬ ‫تالش‬‫اده‬ ‫بودند‬(‫از‬ ‫بیش‬۵۰۰‫مختلف‬ ‫زبان‬) ‫سال‬ ‫در‬ ‫اصلی‬ ‫استاندارد‬1983‫عنوان‬ ‫تحت‬ ‫و‬ ‫میالدی‬Ada’ 83‫شد‬ ‫منتشر‬. ‫پاسکال‬ ‫زبان‬ ‫مبنای‬ ‫بر‬ ‫گسترده‬ ‫طراحی‬ ‫در‬ ‫رقابت‬ ‫یک‬ ‫نتیجه‬ ‫و‬ ‫اولیه‬ ‫نگارش‬ ‫از‬ ‫بعد‬ ‫اصلی‬ ‫نگارش‬ ‫دو‬:Ada’ 95‫و‬Ada 2005 ‫فعلی‬ ‫پایدار‬ ‫نگارش‬:Ada 2012 TC1 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 18‫از‬68
  • 19. ‫طراحی‬ ‫اصلی‬ ‫هدف‬Ada‫نسخه‬ ‫مرجع‬ ‫راهنمای‬ ‫از‬ ‫گرفته‬ ‫بر‬2005 ‫نیاز‬‫به‬‫زبان‬‫هایی‬‫که‬‫قابلیت‬‫اطمینان‬‫را‬‫ارتقا‬‫بخشیده‬‫و‬‫نگهداری‬‫را‬‫ساده‬‫می‬،‫کنند‬‫به‬ ‫خوبی‬‫اثبات‬‫شده‬‫است‬.‫از‬‫این‬‫رو‬‫خوانایی‬‫برنامه‬‫در‬‫عین‬‫سهولت‬‫در‬،‫نوشتن‬‫مو‬‫رد‬ ‫تاکید‬‫قرار‬‫گرفته‬‫است‬.‫برای‬،‫مثال‬‫طبق‬‫قواعد‬‫زبان‬‫نیاز‬‫است‬‫که‬‫متغیرهای‬‫ب‬‫رنامه‬ ‫صریحا‬‫تعریف‬‫شده‬‫و‬‫نوع‬‫آن‬‫ها‬‫مشخص‬‫باشد‬.‫از‬‫آن‬‫جایی‬‫که‬‫نوع‬‫متغیر‬‫ثابت‬ ،‫است‬‫کامپایلر‬‫می‬‫تواند‬‫مطمئن‬‫شود‬‫که‬‫عملگرهای‬‫روی‬‫متغیر‬‫با‬‫مشخصه‬‫های‬‫در‬ ‫نظر‬‫گرفته‬‫شده‬‫برای‬‫اشیا‬‫این‬،‫نوع‬‫سازگاری‬‫دارند‬.‫افزون‬‫بر‬‫این‬‫نشانه‬‫گذاری‬‫های‬ ‫مستعد‬‫خطا‬‫اجتناب‬‫شده‬‫اند‬.‫نحو‬‫زبان‬‫از‬‫به‬‫کار‬‫بردن‬‫شکل‬‫های‬‫رمزگونه‬‫جلوگ‬‫یری‬‫به‬ ‫عمل‬‫می‬‫آورد‬‫و‬‫به‬‫طور‬‫قابل‬‫توجهی‬‫ساختارهای‬‫انگلیسی‬‫مانند‬‫را‬‫استفاده‬‫می‬‫ک‬‫ند‬.‫در‬ ،‫نهایت‬‫زبان‬‫پشتیبانی‬‫از‬‫کامپایل‬‫جداگانه‬‫قسمت‬‫های‬‫برنامه‬‫را‬‫به‬‫نحوی‬‫ک‬‫ه‬‫توسعه‬‫و‬ ‫نگهداری‬‫آن‬‫تسهیل‬،‫شود‬‫پیشنهاد‬‫می‬‫نماید‬‫و‬‫همان‬‫درجه‬‫از‬‫بررسی‬‫را‬‫بین‬‫قس‬‫مت‬ ‫های‬‫مختلف‬‫لحاظ‬‫می‬‫کند‬‫که‬‫در‬‫داخل‬‫یک‬‫قسمت‬‫از‬‫برنامه‬‫به‬‫کار‬‫می‬‫برد‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 19‫از‬68
  • 20. Ada‫چیست؟‬ ‫از‬ ‫عبارتند‬ ‫آن‬ ‫هدف‬ ‫مورد‬ ‫های‬ ‫سیستم‬: ‫نهفته‬ ‫یا‬ ‫توکار‬ ‫های‬ ‫سیستم‬(Embedded systems) ‫طوالنی‬ ‫عمر‬ ‫با‬ ‫پیچیده‬ ‫افزارهای‬ ‫نرم‬ ‫های‬ ‫المان‬ ‫از‬ ‫بسیاری‬ ‫حذف‬«‫خطر‬ ‫پر‬»‫امکان‬ ‫حد‬ ‫تا‬ ‫موجود‬ ‫های‬ ‫زبان‬ ‫گرا‬ ‫شی‬ ‫و‬ ‫اشیا‬ ‫بر‬ ‫مبتنی‬ ‫پارامتری‬ ‫انواع‬(generics) ‫بالدرنگ‬ ‫نویسی‬ ‫برنامه‬(Real-time)‫همروند‬ ‫و‬(concurrent) ‫جامع‬ ‫استثنای‬ ‫مدیریت‬ ‫قدرتمند‬ ‫نوع‬ ‫سیستم‬ 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 20‫از‬68
  • 21. Ada‫چیست؟‬ ‫سیستمی‬ ‫نویسی‬ ‫برنامه‬ ‫ماشین‬ ‫نمایش‬ ‫نحوه‬ ‫روی‬ ‫دقیق‬ ‫کنترل‬ ‫سیستم‬ ‫به‬ ‫وابسته‬ ‫اجزای‬ ‫به‬ ‫دسترسی‬ ‫عامل‬ ‫سیستم‬ ‫بدون‬ ‫های‬ ‫ماشین‬(‫عریان‬) ‫اهداف‬ ‫از‬ ‫بسیاری‬ ‫برای‬ ‫استاندارد‬ ‫های‬ ‫بسته‬ ‫جداگانه‬ ‫کامپایل‬ ‫از‬ ‫جامع‬ ‫پشتیبانی‬ ‫عددی‬ ‫ای‬ ‫داده‬ ‫انواع‬ ‫از‬ ‫جامع‬ ‫پشتیبانی‬(numeric)‫ماشین‬ ‫مختص‬ ‫نمایش‬ ‫همراه‬ ‫به‬ ‫هدف‬ 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 21‫از‬68
  • 22. Ada‫چیست؟‬ ‫نیست‬ ‫مجاز‬ ‫زبان‬ ‫از‬ ‫ای‬ ‫زیرمجموعه‬ ‫هیچ‬. ‫زبان‬(‫کامپایلر‬)‫پیوند‬ ‫مرحله‬ ‫تا‬(link time)‫دارد‬ ‫حضور‬. ‫کامپایلر‬ ‫سنجی‬ ‫اعتبار‬ ‫فرایند‬: ‫رد‬ ‫را‬ ‫جامع‬ ‫تست‬ ‫مجموعه‬ ‫یک‬ ‫تا‬ ‫دارند‬ ‫نیاز‬ ‫ها‬ ‫کامپایلر‬ ‫همه‬(pass)‫کنند‬. Ada Compiler Validation Capability (ACVC) ‫استانداردهای‬ANSI‫و‬ISO ‫کامل‬ ‫زیرساخت‬ ‫یک‬ ‫دارای‬: ‫دیگر‬ ‫ابزارهای‬ ‫و‬ ‫کامپایلر‬ ‫جزئیات‬ ‫با‬ ‫و‬ ‫دقیق‬ ‫تعاریف‬ ‫فراوان‬ ‫های‬ ‫آموزش‬ ‫و‬ ‫ها‬ ‫کتاب‬ 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 22‫از‬68
  • 23. ‫مثال‬:‫جداگانه‬ ‫کامپایل‬ ‫توسعه‬ ‫محیط‬ ‫هر‬ ‫در‬ ‫ضروری‬ ‫قابلیت‬ ‫یک‬ ‫هستند؟‬ ‫چه‬ ‫معنایی‬ ‫قواعد‬ ‫زبان‬ ‫معنایی‬ ‫قواعد‬ ‫معمول‬ ‫طور‬ ‫به‬: ‫جداگانه‬ ‫کامپایل‬ ‫هر‬ ‫برای‬‫متفاوت‬‫هستند‬. ‫شوند‬ ‫نمی‬ ‫بررسی‬ ‫عدد‬ ‫و‬ ‫پارمتر‬ ‫انواع‬. ‫نظیر‬ ‫ابزارهایی‬ ‫و‬ ‫سیستم‬ ‫پیونددهنده‬ ‫بر‬ ‫متکی‬make‫هستند‬. ‫معنایی‬ ‫قواعد‬Ada: ‫قسمت‬ ‫کل‬ ‫کامپایل‬ ‫مانند‬ ‫عینا‬ ‫قسمت‬ ‫چند‬ ‫جداگانه‬ ‫کامپایل‬ ‫که‬ ‫نحوی‬ ‫به‬ ،‫تنبل‬ ‫کامپایل‬‫عنوان‬ ‫به‬ ‫ها‬ ‫است‬ ‫کامل‬ ‫برنامه‬ ‫یک‬. ‫است‬ ‫کامپایل‬ ‫عملیات‬ ‫از‬ ‫بخشی‬ ‫دادن‬ ‫پیوند‬. ‫است‬ ‫کامپایل‬ ‫عملیات‬ ‫از‬ ‫بخشی‬ ‫ها‬ ‫وابستگی‬ ‫بررسی‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 23‫از‬68
  • 24. ‫ساخت‬ ‫طریق‬ ‫از‬ ‫درستی‬(Correctness By Construction) ‫کنیم؟‬ ‫عمل‬ ‫بهتر‬ ‫توانیم‬ ‫می‬ ‫آیا‬ ‫درستی‬ ‫که‬ ‫ای‬ ‫شیوه‬ ‫به‬ ‫سازی‬ ‫پیاده‬(‫صحت‬)‫گردد‬ ‫منتج‬ ،‫آن‬ ‫ساخت‬ ‫فرایند‬ ‫از‬ ‫برنامه‬. ‫مناب‬ ‫که‬ ‫است‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫یک‬ ‫از‬ ‫استفاده‬ ‫فرایند‬ ‫این‬ ‫از‬ ‫کوچکی‬ ‫بخش‬‫تا‬ ‫را‬ ‫خطا‬ ‫ع‬ ‫کند‬ ‫می‬ ‫حذف‬ ‫ممکن‬ ‫حد‬. ‫کن‬ ‫کمک‬ ‫نویس‬ ‫برنامه‬ ‫مهندس‬ ‫به‬ ‫که‬ ‫است‬ ‫نیاز‬ ‫رویکردها‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫یا‬ ‫رویکرد‬‫تا‬ ‫ند‬ ‫یابد‬ ‫دست‬ ‫مهم‬ ‫این‬ ‫به‬ ‫امکان‬ ‫حد‬ ‫در‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 24‫از‬68
  • 25. ‫ساخت‬ ‫طریق‬ ‫از‬ ‫درستی‬:‫مختلف‬ ‫رویکرد‬ ‫سه‬ 17‫مه‬17 Specification Implementation Specification Implementation ‫انتزاع‬ ‫واقعیت‬ Specification Implementation Human Guided Synthesis Human Created Refinement and Proof Human Created Synthesis and Static Analysis Synthesis E.g. Simulink Refinement E.g. B Analysis E.g. SPARK ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 25‫از‬68
  • 26. ‫ساخت‬ ‫طریق‬ ‫از‬ ‫درستی‬ «‫سنتز‬»‫است‬ ‫محدود‬ ‫حاضر‬ ‫حال‬ ‫در‬ ‫اما‬ ،‫آید‬ ‫می‬ ‫شمار‬ ‫به‬ ‫رویکرد‬ ‫بهترین‬ ‫مشخصا‬. «‫پاالیش‬»‫است‬ ‫کننده‬ ‫محدود‬ ‫بسیار‬ ‫ولی‬ ‫است‬ ‫خوب‬. «‫تحلیل‬»‫کند‬ ‫می‬ ‫کار‬ ‫خوبی‬ ‫به‬ ‫و‬ ‫است‬ ‫تر‬ ‫عام‬. ‫یابد‬ ‫دست‬ ‫زیر‬ ‫موارد‬ ‫به‬ ‫تا‬ ‫دارد‬ ‫سعی‬ ‫تحلیل‬: ‫بهتر‬ ‫بسیار‬ ‫افزار‬ ‫نرم‬ ‫یک‬ ‫تر‬ ‫ارزان‬ ‫بسیار‬ ‫افزار‬ ‫نرم‬ ‫یک‬ ‫پروژه‬ ‫اولیه‬ ‫ایده‬SPARK Ada ‫های‬ ‫زبان‬ ‫برای‬ ‫مشابهی‬ ‫اولیه‬ ‫رویکرد‬C#‫و‬Java‫است‬ ‫شده‬ ‫داده‬ ‫توسعه‬ ‫نیز‬. SPARK‫نیست‬ ‫بازی‬ ‫اسباب‬ ‫یک‬!‫ا‬ ‫شده‬ ‫استفاده‬ ‫صنعتی‬ ‫های‬ ‫پروژه‬ ‫از‬ ‫بسیاری‬ ‫در‬‫ست‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 26‫از‬68
  • 27. SPARK Ada ‫تعریف‬ ‫خوش‬ ‫و‬ ‫دقیق‬ ‫معنایی‬ ‫و‬ ‫نحوی‬ ‫قواعد‬ ‫با‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫یک‬: SPARK‫زبان‬ ‫زیرمجموعه‬ ‫یک‬ ‫از‬Ada‫کند‬ ‫می‬ ‫استفاده‬(‫آن‬ ‫های‬ ‫قسمت‬ ‫تمام‬ ‫نه‬ ‫و‬) ‫نویسی‬ ‫حاشیه‬ ‫کار‬ ‫سازو‬(Annotation)‫در‬ ‫افزار‬ ‫نرم‬ ‫های‬ ‫مشخصه‬ ‫تا‬ ‫شده‬ ‫طراحی‬‫سطح‬ ‫پایین‬‫باشد‬ ‫بیان‬ ‫قابل‬. SPARK‫توضیحات‬(Comments)‫برد‬ ‫می‬ ‫کار‬ ‫به‬ ‫را‬ ‫ای‬ ‫یافته‬ ‫سبک‬. ‫س‬ ‫های‬ ‫مشخصه‬ ‫از‬ ‫مستقیما‬ ‫نه‬ ،‫شود‬ ‫می‬ ‫ساخته‬ ‫پایین‬ ‫سطح‬ ‫های‬ ‫مشخصه‬ ‫از‬ ‫کد‬‫طح‬ ‫سیستم‬ ‫باالی‬ ‫درستی‬‫یابی‬‫این‬‫موضوع‬‫که‬‫طراحی‬‫سطح‬‫پایین‬‫تواند‬‫می‬‫مشخصه‬‫های‬‫سطح‬‫ب‬‫اال‬(‫به‬ ‫عنوان‬‫مثال‬‫مشخصه‬‫های‬‫تعریف‬‫شده‬‫توسط‬Z)‫را‬‫پیاده‬‫سازی‬‫کند‬،‫مسئله‬‫ای‬‫جداگانه‬ ‫است‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 27‫از‬68
  • 28. ‫مرتبط‬ ‫منابع‬ ‫رسمی‬ ‫سایت‬ ‫وب‬:http://www.sparkada.com ‫فنی‬ ‫مباحث‬ ‫ویژه‬ ‫به‬ ‫انتشارات‬ http://www.sparkada.com/downloads/SPARK95.pdf ‫غیره‬ ‫و‬.  High Integrity Software The SPARK Ada Approach to Safety and Security  John Barnes, Addison Wesley (2003).  Correctness by Construction  Peter Amey. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 28‫از‬68
  • 29. ‫کاربرد‬ ‫از‬ ‫مثالی‬SPARK ‫ارتقا‬Lockheed C130J avionics Civil certification to DO-178B level A Military certification to UK Def Std 00-55 Cost of MC/DC testing reduced by 80% ‫ادعاهای‬Lockheed ‫کد‬ ‫کیفیت‬10‫یافت‬ ‫بهبود‬ ‫صنعتی‬ ‫استانداردهای‬ ‫به‬ ‫نسبت‬ ‫برابر‬. ‫محصول‬ ‫وری‬ ‫بهره‬4‫یافت‬ ‫بهبود‬ ‫برابر‬. ‫ساخت‬ ‫های‬ ‫هزینه‬50‫بودند‬ ‫معمول‬ ‫مقدار‬ ‫درصد‬. ‫است‬ ‫صرفه‬ ‫به‬ ‫مقرون‬ ‫این‬! 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 29‫از‬68
  • 30. ‫اجمالی‬ ‫نگاه‬ SPARK‫کند‬ ‫می‬ ‫فراهم‬ ‫را‬ ‫زیر‬ ‫ابزارهای‬: Examiner, Simplifier, Prover ‫مرجع‬ ‫در‬ ‫کامل‬ ‫طور‬ ‫به‬High Integrity Software by John Barnes‫است‬ ‫شده‬ ‫تعریف‬. ‫در‬ ‫که‬ ‫است‬ ‫شده‬ ‫مشخص‬Ada‫تقریبا‬10‫زبان‬ ‫در‬ ‫موجود‬ ‫های‬ ‫اشکال‬ ‫درصد‬C‫باقی‬ ‫است‬ ‫مانده‬(‫واقع‬ ‫در‬90‫است‬ ‫شده‬ ‫برطرف‬ ‫ها‬ ‫اشکال‬ ‫درصد‬.) SPARK Ada‫تقریبا‬ ‫هم‬10‫کامل‬ ‫نسخه‬ ‫های‬ ‫اشکال‬ ‫درصد‬Ada‫دارد‬ ‫را‬. ‫است‬ ‫اهمیتی‬ ‫حایز‬ ‫موضوع‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫لذا‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 30‫از‬68
  • 31. ‫برنامه‬ ‫کلی‬ ‫تصویر‬SPARK 17‫مه‬17 Notation For Annotations Language With Precise Syntax & Semantics Tools—Applied During Development Properties Correctness by construction Compiler Linker Loader Executable Software Software Ada + Annotations ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 31‫از‬68
  • 32. ‫در‬ ‫توسعه‬ ‫فرایند‬SPARK 17‫مه‬17 Develop Incremental Change To Software Check Changes Using SPARK Tools Partially Complete Software System Develop or enhance the annotations to reflect incremental change in specification and then develop or enhance software to implement specification documented by annotations Complete? No Yes Software Specification High/low Level Designs ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 32‫از‬68
  • 33. ‫در‬ ‫تحلیل‬SPARK 17‫مه‬17 Software Source + Annotations Syntax Analysis Type Analysis Data Flow Analysis Control Flow Analysis Functional Correctness Low Level Design Annotations Compiler Examiner Simplifier & Prover Not the high-level (Z) specification! ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 33‫از‬68
  • 34. ‫نحوی‬ ‫تحلیل‬ ‫کامپایل‬ ‫زبان‬ ‫قواعد‬ ‫با‬ ‫برنامه‬ ‫شود‬‫می‬ ‫مطمئن‬‫شود‬‫می‬. ‫مجموعه‬ ‫زیر‬SPARK‫از‬Ada‫ها‬ ‫نویسی‬ ‫حاشیه‬ ‫و‬ ‫متن‬ ‫از‬ ‫مستقل‬ ‫گرامر‬: BNF ‫خودکار‬ ‫صورت‬ ‫به‬ ‫شده‬ ‫تولید‬ ‫گرهای‬ ‫تحلیل‬ ‫متن‬ ‫به‬ ‫وابسته‬ ‫گرامر‬ ‫استفاده‬ ‫از‬ ‫قبل‬ ‫متغیر‬ ‫تعریف‬ ‫حوزه‬ ‫به‬ ‫مربوط‬ ‫قوانین‬ ‫غیره‬ ‫و‬ 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 34‫از‬68
  • 35. ‫نوع‬ ‫تحلیل‬ ‫قوی‬ ‫ای‬ ‫داده‬ ‫نوع‬ ‫سیستم‬ ‫ها‬ ‫اشکال‬ ‫کاهش‬ ‫به‬ ‫کمک‬ ‫عمل‬ ‫در‬ ‫رسیده‬ ‫اثبات‬ ‫به‬ ‫نتایج‬ ‫در‬ ‫موجود‬ ‫اولیه‬ ‫ای‬ ‫داده‬ ‫انواع‬‫افزار‬‫سخت‬‫شود‬‫می‬ ‫منجر‬ ‫مشکل‬ ‫ایجاد‬ ‫به‬ ‫مشخصا‬ ،: ‫بودند‬ ‫ماشین‬ ‫ای‬ ‫داده‬ ‫انواع‬ ،‫ای‬ ‫داده‬ ‫انواع‬ ،‫اصل‬ ‫در‬. ‫های‬‫سیستم‬‫نوع‬‫مدرن‬‫معنایی‬ ‫قواعد‬ ‫از‬ ،‫کاربردی‬ ‫برنامه‬‫ناشی‬‫شوند‬‫می‬. ‫ای‬ ‫داده‬ ‫انواع‬‫نی‬ ‫اما‬ ‫شود‬‫می‬ ‫پذیری‬‫انعطاف‬ ‫باعث‬ ‫کند‬‫می‬ ‫تعریف‬ ‫نویس‬‫برنامه‬ ‫که‬‫از‬‫به‬ ‫دارد‬ ‫اضافی‬ ‫بررسی‬. ‫شوند‬ ‫تعریف‬ ‫دقیق‬ ‫خیلی‬ ‫باید‬ ‫نوع‬ ‫تبدیل‬ ‫قواعد‬. ‫ش‬ ‫ممیز‬ ‫اعداد‬ ‫دقیق‬ ‫تعیین‬ ‫مثال‬ ‫برای‬ ‫هستند؛‬ ‫ساز‬ ‫مشکل‬ ‫نیز‬ ‫محاسباتی‬ ‫انواع‬‫ناور‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 35‫از‬68
  • 36. ‫داده‬ ‫جریان‬ ‫تحلیل‬ ‫آن‬ ‫های‬ ‫استفاده‬ ‫سمت‬ ‫به‬ ‫داده‬ ‫حرکت‬ ‫از‬ ‫است‬ ‫عبارت‬ ‫واقعی‬ ‫معنای‬ ‫به‬ ‫داده‬ ‫جریان‬. ‫ها‬ ‫سیستم‬ ‫از‬ ‫بسیاری‬ ‫در‬ ‫داده‬ ‫از‬ ‫زیادی‬ ‫مقدار‬: ‫رود‬ ‫می‬ ‫اشتباهی‬ ‫مکان‬ ‫به‬ ‫رود‬ ‫نمی‬ ‫جایی‬ ‫هیچ‬ ‫به‬ ‫است‬ ‫اشتباه‬ ‫داده‬ ‫خود‬ ‫اما‬ ‫رود‬ ‫می‬ ‫درستی‬ ‫مکان‬ ‫به‬. ‫شود‬ ‫نمی‬ ‫استفاده‬ ‫داده‬. ‫شود‬ ‫می‬ ‫استفاده‬ ‫اشتباه‬ ‫داده‬. ‫ر‬ ‫ها‬ ‫آن‬ ‫از‬ ‫بزرگی‬ ‫کسر‬ ‫قطعا‬ ‫اما‬ ،‫کرد‬ ‫پیدا‬ ‫را‬ ‫داده‬ ‫به‬ ‫مربوط‬ ‫های‬ ‫اشکال‬ ‫همه‬ ‫توان‬ ‫نمی‬‫ا‬ ‫داد‬ ‫تشخیص‬ ‫توان‬ ‫می‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 36‫از‬68
  • 37. ‫داده‬ ‫جریان‬ ‫تحلیل‬ ‫از‬ ‫است‬ ‫عبارت‬ ‫داده‬ ‫جریان‬ ‫مشکالت‬ ‫و‬ ‫مسائل‬: ‫مستعار‬ ‫اسامی‬(Aliasing) ‫استفاده‬ ‫و‬ ‫تعریف‬ ‫های‬ ‫زنجیره‬ ‫نظمی‬ ‫بی‬ ‫استفاده‬ ‫و‬ ‫تعریف‬ ‫در‬ ‫شده‬ ‫مشاهده‬ ‫های‬ ‫نظمی‬ ‫بی‬: ‫تعریف‬ ‫از‬ ‫قبل‬ ‫استفاده‬ ‫مجدد‬ ‫تعریف‬ ‫سپس‬ ‫و‬ ‫تعریف‬(‫هم‬ ‫سر‬ ‫پشت‬ ‫تعاریف‬) ‫استفاده‬ ‫عدم‬ ‫و‬ ‫تعریف‬ ‫ها‬ ‫پیچیدگی‬ ‫همروندی‬ ،‫ها‬ ‫برنامه‬ ‫زیر‬ ،‫کنترلی‬ ‫ساختارهای‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 37‫از‬68
  • 38. ‫کنترلی‬ ‫جریان‬ ‫تحلیل‬ ‫کنترلی‬ ‫جریان‬ ‫اجرای‬ ‫از‬ ‫است‬ ‫عبارت‬ ‫اصلی‬ ‫مشکالت‬ ‫و‬ ‫مسائل‬: ‫مرده‬ ‫کد‬(‫رسد‬ ‫نمی‬ ‫آن‬ ‫به‬ ‫هرگز‬ ‫اجرا‬ ‫کنترل‬ ‫که‬ ‫کدی‬) ‫بست‬ ‫بن‬(deadlock)‫و‬livelocks ‫همروند‬ ‫های‬ ‫سیستم‬ ‫در‬ ‫سازی‬ ‫همگام‬ ‫های‬ ‫اشکال‬(‫متقابل‬ ‫انحصار‬ ‫نظیر‬) 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 38‫از‬68
  • 39. ‫عملیاتی‬ ‫های‬ ‫جنبه‬ ‫درستی‬(‫عملکرد‬ ‫صحت‬) ‫توسط‬‫ها‬ ‫شرط‬ ‫پیش‬(pre-conditions)‫و‬‫ها‬ ‫شرط‬ ‫پس‬(post-condition)‫مشخص‬ ‫شود‬ ‫می‬. ‫یابی‬ ‫درستی‬ ‫های‬ ‫شرط‬(verification conditions)‫سازد‬ ‫می‬ ‫را‬. ‫یابی‬ ‫درستی‬ ‫های‬ ‫شرط‬ ‫داد‬ ‫نشان‬ ‫بتوان‬ ‫اگر‬‫صحیح‬‫ه‬ ‫شرط‬ ‫پس‬ ‫گاه‬ ‫آن‬ ،‫هستند‬‫از‬ ‫ا‬ ‫کنند‬ ‫می‬ ‫پیروی‬ ‫ها‬ ‫شرط‬ ‫پیش‬. ‫قضایا‬ ‫اثبات‬ ‫سیستم‬ ‫یک‬ ‫در‬ ‫توانند‬ ‫می‬ ‫یابی‬ ‫درستی‬ ‫های‬ ‫شرط‬(theorem-proving)، ‫شوند‬ ‫ثابت‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 39‫از‬68
  • 40. ‫ساده‬ ‫مثال‬ ‫یک‬ 17‫مه‬17 1. package simpleadd is 2. procedure sum (X,Y : in Integer; Z : out Integer); 3. --# derives Z from X, Y; 4. --# pre (X > 1) and (X < 1000) and (Y > 1) and (Y < 1000); 5. --# post Z=X+Y; 6. end simpleadd; 7. package body simpleadd is 8. procedure sum (X,Y : in Integer; Z : out Integer) is 9. begin 10. if (X > 1) and (X < 1000) and (Y > 1) and (Y < 1000) then 11. Z := X; 12. for i in Integer range 1..Y loop 13. Z := Z + 1; 14. --# assert Z = X + i and Y = Y%; 15. end loop; 16. else 17. Z := 0; 18. end if; 19. end sum; 20. end simpleadd; ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 40‫از‬68
  • 41. ‫درستی‬ ‫شرط‬1 17‫مه‬17 1. For path(s) from start to run-time check associated with statement of line 6: 2. procedure_sum_1. 3. H1: x > 1 . 4. H2: x < 1000 . 5. H3: y > 1 . 6. H4: y < 1000 . 7. H5: x >= integer__first . 8. H6: x <= integer__last . 9. H7: y >= integer__first . 10. H8: y <= integer__last . 11. H9: x > 1 . 12. H10: x < 1000 . 13. H11: y > 1 . 14. H12: y < 1000 . 15. -> 16. C1: x >= integer__first . 17. C2: x <= integer__last . ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 41‫از‬68
  • 42. ‫اثبات‬ ‫خالصه‬ 17‫مه‬17 VCs for procedure_sum: ---------------------------------------------------------------------------- | | | -----Proved In----- | | | # | From | To | vcg | siv | plg | prv | False | TO DO | ---------------------------------------------------------------------------- 1 | start | rtc check @ 6 | | YES | | | | | 2 | start | rtc check @ 7 | | YES | | | | | 3 | start | rtc check @ 7 | | YES | | | | | 4 | start | rtc check @ 8 | | YES | | | | | 5 | 9 | rtc check @ 8 | | YES | | | | | 6 | start | assert @ 9 | | YES | | | | | 7 | 9 | assert @ 9 | | YES | | | | | 8 | start | rtc check @ 12 | | YES | | | | | 9 | start | assert @ finish | | YES | | | | | 10 | start | assert @ finish | | YES | | | | | 11 | 9 | assert @ finish | | YES | | | | | ---------------------------------------------------------------------------- ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 42‫از‬68
  • 43. ‫مجموعه‬ ‫زیر‬SPARK Ada ‫از‬ ‫عبارتند‬ ‫شده‬ ‫حذف‬ ‫موارد‬: Generics Access types Goto statements Most tasking Exceptions Dynamically sized arrays Implicit subtypes ‫ب‬ ‫مفید‬ ‫و‬ ‫قدرتمند‬ ‫زبان‬ ‫یک‬ ‫نتیجه‬ ‫در‬‫اقی‬ ‫ماند‬ ‫می‬. 17‫مه‬17 Ada Subset Precise Syntax & Semantic Definitions Ada Carefully Designed Programming Language Select Language Subset Eliminate Features For Which Proof Would Be Problematic ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 43‫از‬68
  • 44. ‫خصوصیات‬SPARK Ada ‫منطقی‬ ‫صحت‬–‫ندارد‬ ‫وجود‬ ‫زبانی‬ ‫ابهام‬ ‫هیچ‬. ‫منطقی‬ ‫معنایی‬ ‫قواعد‬ ‫و‬ ‫نحو‬ ‫صوری‬ ‫تعریف‬. ‫امنیت‬–‫زبان‬ ‫معنایی‬ ‫قواعد‬ ‫همه‬‫قابلیت‬ ‫بهینه‬ ‫طور‬ ‫به‬‫بررسی‬‫توسط‬‫ر‬ ‫ماشین‬‫ا‬‫دارند‬. ‫پذیری‬ ‫اثبات‬(Verifiability) ‫دارد‬ ‫دقیقی‬ ‫کامال‬ ‫معنای‬ ‫کد‬. ‫دارد‬ ‫وجود‬ ‫آن‬ ‫مورد‬ ‫در‬ ‫ریاضی‬ ‫صورت‬ ‫به‬ ‫اثبات‬ ‫امکان‬. ‫گر‬ ‫آزمون‬(Examiner)‫دهد‬ ‫می‬ ‫را‬ ‫ماشینی‬ ‫یابی‬ ‫درستی‬ ‫امکان‬: ‫ها‬ ‫مشخصه‬ ‫یابی‬ ‫درستی‬ ‫مفید‬ ‫های‬ ‫قابلیت‬ ‫دادن‬ ‫نشان‬ ‫برای‬: ‫شد‬ ‫نخواهد‬ ‫استثنا‬ ‫وارد‬ ‫کد‬ ،‫مثال‬ ‫برای‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 44‫از‬68
  • 45. ‫خصوصیات‬SPARK Ada ‫محدود‬ ‫فضای‬ ‫و‬ ‫زمان‬–‫شوند‬ ‫محاسبه‬ ‫ایستا‬ ‫صورت‬ ‫به‬ ‫بایستی‬ ‫منابع‬. ‫زدنی‬ ‫مثال‬ ‫قدرت‬–‫صنعتی‬ ‫مستحکم‬ ‫کاربردی‬ ‫های‬ ‫برنامه‬ ‫کامل‬ ‫زبان‬Ada‫دارد‬ ‫ای‬ ‫پیچیده‬ ‫اجرای‬ ‫زمان‬ ‫سیستم‬: ‫عریان‬ ‫ماشین‬ ‫روی‬ ‫تا‬ ‫است‬ ‫شده‬ ‫طراحی‬(‫عامل‬ ‫سیستم‬ ‫بدون‬)‫شود‬ ‫اجرا‬. ‫است‬ ‫خود‬ ‫خاص‬ ‫اجرای‬ ‫زمان‬ ‫پشتیبان‬ ‫نیازمند‬. SPARK Ada‫دارد‬ ‫کمینه‬ ‫اجرای‬ ‫زمان‬ ‫سیستم‬ ‫یک‬: Task‫اند‬ ‫شده‬ ‫حذف‬ ‫ها‬. ‫نیست‬ ‫کار‬ ‫در‬ ‫استثنا‬ ‫مدیریت‬. ‫پیچیده‬ ‫اجرای‬ ‫زمان‬ ‫سیستم‬ ‫بررسی‬ ‫به‬ ‫نیازی‬‫نیست‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 45‫از‬68
  • 46. SPARK Ada‫است؟‬ ‫برده‬ ‫ارث‬ ‫به‬ ‫را‬ ‫چیزی‬ ‫چه‬ ‫هست‬ ‫زیر‬ ‫موارد‬ ‫شامل‬(‫نیست‬ ‫موارد‬ ‫این‬ ‫به‬ ‫محدود‬ ‫فقط‬ ‫اما‬:) ‫عددی‬ ‫ای‬ ‫داده‬ ‫انواع‬(‫ثابت‬ ،‫اعشاری‬ ،‫بولی‬ ،‫کاراکتر‬ ،‫شمارشی‬) ‫رشته‬ ‫و‬ ‫آرایه‬ ‫ای‬ ‫داده‬ ‫انواع‬ ‫رکوردها‬ ‫ها‬ ‫عبارت‬ ‫کامل‬ ‫طیف‬ ‫دستورات‬(assignment, case, loop, if, exit, procedure call, entry call, return, delay) ‫ها‬ ‫زیربرنامه‬ ‫ها‬ ‫بسته‬(‫ها‬ ‫کالس‬ ‫همان‬ ‫یعنی‬) ‫سازی‬ ‫پیاده‬ ‫و‬ ‫ها‬ ‫مشخصه‬ ‫کامل‬ ‫جداسازی‬ ‫بری‬ ‫ارث‬ ‫شامل‬ ‫ها‬ ‫وظیفه‬entries‫و‬entry calls ‫جداگانه‬ ‫کامپایل‬ 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 46‫از‬68
  • 47. SPARK Ada‫است؟‬ ‫کرده‬ ‫حذف‬ ‫را‬ ‫چیزی‬ ‫چه‬ ‫وظیفه‬(Task)‫ها‬ ‫در‬ ‫ها‬ ‫وظیفه‬ ‫با‬ ‫رابطه‬ ‫در‬ ‫امکانات‬ ‫بیشتر‬SPARK Ada‫اند‬ ‫شده‬ ‫حذف‬. ‫کلیات‬Ravenscar‫است‬ ‫مانده‬ ‫باقی‬ ‫کماکان‬. ‫اند‬ ‫شده‬ ‫حذف‬ ،‫کرد‬ ‫می‬ ‫جلوگیری‬ ‫اثبات‬ ‫از‬ ‫که‬ ‫ها‬ ‫وظیفه‬ ‫های‬ ‫جنبه‬ ‫از‬ ‫بسیاری‬. ‫استثناها‬: ‫کند‬ ‫می‬ ‫جلوگیری‬ ‫اثبات‬ ‫از‬ ‫استثناها‬ ‫پیچیده‬ ‫پویای‬ ‫کنترل‬ ‫جریان‬(‫شود‬ ‫می‬ ‫اثبات‬ ‫مانع‬.) ‫ها‬ ‫قالب‬(Generics) ‫بنیادی‬ ‫قدرت‬(‫اساسی‬)‫نداشتند‬(‫نبودند‬ ‫مهم‬ ‫زیاد‬.) ‫است‬ ‫پیچیده‬ ‫ها‬ ‫قالب‬ ‫حضور‬ ‫در‬ ‫اثبات‬. ‫گرها‬ ‫اشاره‬ ‫پویا‬ ‫ابعاد‬ ‫با‬ ‫آرایه‬ ‫نام‬ ‫بدون‬ ‫انواع‬(‫ضمنی‬) ‫دستور‬goto 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 47‫از‬68
  • 48. ‫در‬ ‫استثناها‬ ‫چرا‬SPARK Ada‫شدند؟‬ ‫حذف‬ ‫کن‬ ‫می‬ ‫پیچیده‬ ‫حد‬ ‫از‬ ‫بیش‬ ‫را‬ ‫برنامه‬ ‫کنترلی‬ ‫جریان‬ ‫کلی‬ ‫طور‬ ‫به‬ ‫استثناها‬ ‫زیرا‬‫ند‬. ‫گیرانه‬ ‫سخت‬ ‫معنایی‬ ‫قواعد‬‫زبان‬Ada‫کنید‬ ‫تصور‬ ‫استثناها‬ ‫انتشار‬ ‫در‬ ‫را‬! ‫کنید‬ ‫تصور‬ ‫را‬ ‫استثناها‬ ‫حوزه‬ ‫به‬ ‫مربوط‬ ‫کلی‬ ‫قواعد‬. ‫تر‬ ‫مهم‬ ‫همه‬ ‫از‬ ‫و‬: ‫باش‬ ‫داشته‬ ‫منتظره‬ ‫غیر‬ ‫استثناهای‬ ‫نبایست‬ ‫وجه‬ ‫هیچ‬ ‫به‬ ‫تایید‬ ‫قابل‬ ‫و‬ ‫درست‬ ‫برنامه‬ ‫یک‬‫د‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 48‫از‬68
  • 49. ‫چیست؟‬ ‫در‬ ‫استثناها‬ ‫مشکالت‬ ‫از‬ ‫است‬ ‫عبارت‬ ‫مشکالت‬: ‫دلخواه‬ ‫انشعاب‬ ‫معنایی‬ ‫قواعد‬(arbitrary branch) ‫استثنا‬ ‫کننده‬ ‫کنترل‬ ‫تعیین‬ ‫معنایی‬ ‫قواعد‬ ‫کند‬ ‫می‬ ‫عمل‬ ‫آن‬ ‫در‬ ‫استثنا‬ ‫کننده‬ ‫کنترل‬ ‫که‬ ‫محلی‬ ‫استثنا‬ ‫کننده‬ ‫کنترل‬ ‫خاتمه‬ ‫معنایی‬ ‫قواعد‬ ‫ها‬ ‫وظیفه‬ ‫در‬ ‫استثنا‬ ‫ها‬ ‫آن‬ ‫محدوده‬ ‫و‬ ‫استثناها‬ ‫انواع‬ ‫کند‬ ‫می‬ ‫عمل‬ ‫درست‬ ‫سیستم‬ ‫قواعد‬ ‫این‬ ‫وجود‬ ‫با‬ ‫شویم‬ ‫مطمئن‬ ‫بایستی‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 49‫از‬68
  • 50. ‫چرا‬‫ها‬ ‫قالب‬‫در‬SPARK Ada‫شدند؟‬ ‫حذف‬ ‫نیس‬ ‫بنیادی‬ ‫قدرت‬ ‫دارای‬ ‫ولی‬ ‫کنند‬ ‫می‬ ‫تسهیل‬ ‫را‬ ‫چندگانه‬ ‫سازی‬ ‫نمونه‬ ‫ها‬ ‫قالب‬‫تند‬. ‫سازی‬ ‫کمی‬ ‫به‬ ‫نیاز‬ ‫و‬ ‫است‬ ‫پیچیده‬ ‫خیلی‬ ‫ها‬ ‫قالب‬ ‫خواص‬ ‫آوری‬ ‫جمع‬(‫گرفت‬ ‫کار‬ ‫به‬‫ن‬) ‫دارد‬ ‫مختلف‬ ‫انوع‬ ‫روی‬. ‫قالب‬ ‫ای‬ ‫داده‬ ‫نوع‬ ‫یک‬ ‫چگونه‬ ‫مثال‬ ‫برای‬(‫عام‬)‫کنیم؟‬ ‫آزمایش‬ ‫را‬ ‫و‬ ‫باشند‬ ‫جدا‬ ‫کامال‬ ‫باید‬ ‫ها‬ ‫آن‬ ‫که‬ ‫دارد‬ ‫می‬ ‫بیان‬ ‫ها‬ ‫نمونه‬ ‫ی‬ ‫جداگانه‬ ‫یابی‬ ‫درستی‬‫لذا‬ ‫شود‬ ‫نمی‬ ‫احساس‬ ‫ها‬ ‫قالب‬ ‫به‬ ‫نیازی‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 50‫از‬68
  • 51. ‫چرا‬‫در‬ ‫گرها‬ ‫اشاره‬SPARK Ada‫شدند؟‬ ‫حذف‬ ‫هستند‬ ‫نیاز‬ ‫مورد‬ ‫حافظه‬ ‫پویای‬ ‫مدیریت‬ ‫برای‬ ‫گرها‬ ‫اشاره‬. ‫است‬ ‫اتکاپذیری‬ ‫در‬ ‫واقعی‬ ‫مسئله‬ ‫یک‬ ‫حافظه‬ ‫پویای‬ ‫تخصیص‬. ‫شود‬ ‫نمی‬ ‫تمام‬ ‫اجرا‬ ‫حین‬ ‫در‬ ‫هرگز‬ ‫حافظه‬ ‫که‬ ‫هستیم‬ ‫این‬ ‫اثبات‬ ‫نیازمند‬. ‫است‬ ‫ممکن‬ ‫غیر‬ ‫عموما‬ ‫امر‬ ‫این‬. ‫مش‬ ‫و‬ ‫معلق‬ ‫گر‬ ‫اشاره‬ ،‫حافظه‬ ‫خرابی‬ ‫که‬ ‫باشیم‬ ‫مطمئن‬ ‫تا‬ ‫است‬ ‫نیاز‬ ‫این‬ ‫بر‬ ‫افزون‬‫از‬ ‫کالتی‬ ‫است‬ ‫ممکن‬ ‫غیر‬ ‫عمل‬ ‫در‬ ‫هم‬ ‫امر‬ ‫این‬ ‫که‬ ‫دهد‬ ‫نمی‬ ‫رخ‬ ‫قبیل‬ ‫این‬. ‫پوش‬ ‫چشم‬ ‫توان‬ ‫نمی‬ ‫راحتی‬ ‫این‬ ‫به‬ ‫گرها‬ ‫اشاره‬ ‫قدرت‬ ‫از‬ ،‫ها‬ ‫قالب‬ ‫خالف‬ ‫بر‬ ‫حال‬ ‫هر‬ ‫به‬‫ی‬ ‫کرد‬/( !!!‫مترجم‬) 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 51‫از‬68
  • 52. ‫نویسی‬ ‫حاشیه‬(Annotations)‫های‬SPARK ‫زبان‬‫نویسی‬ ‫حاشیه‬SPARK‫دارد‬ ‫را‬ ‫خود‬ ‫مختص‬ ‫حقوق‬ ‫و‬ ‫قوانین‬(‫زبان‬ ‫از‬ ‫مستقل‬Ada.) ‫عالمت‬ ‫با‬ ‫که‬ ‫توضیحاتی‬ ‫در‬--#‫شود‬ ‫می‬ ‫جاسازی‬ ،‫شوند‬ ‫می‬ ‫شروع‬. SPARK‫زبان‬ ‫از‬ ‫مجموعه‬ ‫زیر‬ ‫یک‬Ada‫نویسی‬ ‫حاشیه‬ ‫با‬ ‫که‬ ‫است‬‫ترکیب‬‫است‬ ‫شده‬! ‫کنند‬ ‫می‬ ‫تعریف‬ ‫را‬ ‫زیر‬ ‫موارد‬ ‫ها‬ ‫نویسی‬ ‫حاشیه‬: ‫افزار‬ ‫نرم‬ ‫های‬ ‫مشخصه‬ ‫ای‬ ‫داده‬ ‫اقالم‬ ‫بین‬ ‫انتظار‬ ‫مورد‬ ‫های‬ ‫وابستگی‬ ‫داریم‬ ‫نویسی‬ ‫حاشیه‬ ‫دسته‬ ‫دو‬ ،‫بنابراین‬: ‫اثبات‬(Proof) ‫برنامه‬ ‫خصوصیات‬ ‫درستی‬ ‫اثبات‬ ‫جهت‬ ‫داده‬ ‫جریان‬(Data Flow) ‫آگاهی‬‫به‬ ‫دادن‬‫ابزار‬‫ها‬‫مورد‬ ‫در‬‫ارتباطا‬‫ت‬‫مختلف‬‫بین‬‫اجزای‬‫کد‬‫منبع‬ ‫که‬ ‫هایی‬‫نویسی‬‫حاشیه‬‫های‬ ‫مشخصه‬‫را‬ ‫کد‬ ‫درک‬ ،‫دهند‬‫می‬ ‫تشکیل‬ ‫را‬ ‫رسمی‬‫نمایند‬ ‫می‬ ‫تر‬ ‫آسان‬. ‫نوشته‬ ‫اصلی‬ ‫کد‬ ‫از‬ ‫قبل‬ ‫باید‬ ‫ها‬‫نویسی‬‫حاشیه‬‫شوند‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 52‫از‬68
  • 53. ‫ها‬ ‫نویسی‬ ‫حاشیه‬ ‫خالصه‬ --# derives ‫متغیر‬ ‫از‬ ‫یک‬ ‫کدام‬ ‫به‬ ‫خروجی‬ ‫متغیر‬ ‫یک‬ ‫که‬ ‫کند‬ ‫می‬ ‫مشخص‬(‫های‬)‫ورودی‬‫وابسته‬‫است‬. ‫مثال‬ ‫برای‬ ‫است؛‬ ‫سنتی‬ ‫ایستای‬ ‫های‬ ‫تحلیل‬ ‫به‬ ‫شبیه‬ ‫تحلیل‬: ‫متغیر‬ ‫نهایی‬ ‫مقدار‬ ‫زیر‬ ‫کد‬ ‫قطعه‬ ‫در‬Z‫متغیرهای‬ ‫مقدار‬ ‫به‬X‫و‬Y‫است‬ ‫وابسته‬. 17‫مه‬17 procedure Sum(X,Y : in Float; Z : out Float); --# derives Z from X and Y; is begin Z := X + Y; end Sum; ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 53‫از‬68
  • 54. ‫ها‬ ‫نویسی‬ ‫حاشیه‬ ‫خالصه‬ --# global ‫بسته‬ ‫داخل‬ ‫در‬ ‫متغیر‬ ‫یک‬ ‫که‬ ‫کند‬ ‫می‬ ‫مشخص‬‫سراسری‬(global)‫است‬. ‫ورودی‬ ‫و‬ ‫خروجی‬ ،‫ورودی‬ ‫شامل‬ ‫متغیر‬ ‫دسترسی‬ ‫مد‬ ‫همچنین‬-‫کند‬ ‫می‬ ‫مشخص‬ ‫نیز‬ ‫را‬ ‫خروجی‬. ‫شود‬ ‫می‬ ‫ظاهر‬ ‫نیز‬ ‫ها‬ ‫وابستگی‬ ‫در‬ ‫یعنی‬ ،‫شود‬ ‫می‬ ‫گرفته‬ ‫کار‬ ‫به‬ ‫اوقات‬ ‫اغلب‬. --# own ‫است‬ ‫شده‬ ‫تعریف‬ ‫بسته‬ ‫بدنه‬ ‫در‬ ‫متغیر‬ ‫که‬ ‫کند‬ ‫می‬ ‫مشخص‬. ‫کند‬ ‫می‬ ‫دسترس‬ ‫قابل‬ ‫نویسی‬ ‫حاشیه‬ ‫های‬ ‫قسمت‬ ‫سایر‬ ‫برای‬ ‫را‬ ‫نماد‬ ‫آن‬. ‫متغیر‬‫نیست‬ ‫شده‬ ‫شناخته‬ ‫ها‬ ‫مشخصه‬ ‫در‬‫و‬‫بدنه‬ ‫در‬ ‫تنها‬‫است‬ ‫شده‬ ‫شناخته‬. --# initializes ‫توسط‬ ‫متغیر‬ ‫که‬ ‫کند‬‫می‬ ‫مشخص‬‫بسته‬‫مقداردهی‬‫است‬ ‫شده‬ ‫اولیه‬. 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 54‫از‬68
  • 55. ‫ها‬ ‫نویسی‬ ‫حاشیه‬ ‫خالصه‬ 17‫مه‬17 package Temperature is procedure ConvertFtoC(Fahrenheit : in Float; Celsius : out Float); procedure ConvertCtoF(Celsius : in Float; Fahrenheit : out Float); function GetTempC return Float; --# global in Scale; --# own TempKelvin; --# initializes TempKelvin; end Temperature; package body Temperature is TempKelvin : Float; ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 55‫از‬68
  • 56. ‫ها‬ ‫نویسی‬ ‫حاشیه‬ ‫خالصه‬ --# pre‫و‬--# post ‫معنای‬‫متداول‬‫پیش‬‫شرط‬‫ها‬‫و‬‫پس‬‫شرط‬‫ها‬ ‫نیاز‬‫به‬‫عالمت‬‫های‬: ~‫برای‬‫مقدار‬‫قبلی‬ %‫برای‬‫مقدار‬‫ثابت‬ ‫سورها‬:for all،for some ‫همه‬‫گزاره‬‫های‬‫منطقی‬‫و‬‫ریاضی‬‫معمول‬‫را‬‫داریم‬. ‫حاشیه‬‫نویسی‬‫امکان‬‫تعریف‬‫مشخصه‬‫های‬ ‫عملیاتی‬‫را‬‫می‬‫دهد‬‫و‬‫ابزارهای‬SPARK‫امکان‬ ‫اثبات‬‫درستی‬‫مشخصه‬‫ها‬‫به‬‫صورت‬‫خودکار‬‫را‬ ‫فراهم‬‫می‬‫آورند‬. 17‫مه‬17 procedure Swap(X,Y : in out Integer); --# derives X from Y & --# Y from X; --# post X = Y~ & Y = X~; is T : Integer; begin T := X; X := Y; Y := T; end Swap; ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 56‫از‬68
  • 57. ‫نامتغیر‬‫حلقه‬(Loop Invariant) --# assert:‫است‬ ‫درست‬ ‫عبارت‬ ‫کند‬ ‫می‬ ‫ادعا‬. ‫حلقه‬ ‫از‬ ‫مستقل‬ ‫مقادیر‬ ‫تعریف‬ ‫در‬ ‫اصلی‬ ‫کاربرد‬ ‫دستور‬S‫شود؟‬ ‫می‬ ‫اجرا‬ ‫چندبار‬ ‫نداریم‬ ‫اختیار‬ ‫در‬ ‫ای‬ ‫ایده‬.‫اجرای‬ ‫دفعات‬S‫دارد‬ ‫اجرا‬ ‫طول‬ ‫در‬ ‫ها‬ ‫داده‬ ‫به‬ ‫بستگی‬. ‫کنیم؟‬ ‫اثبات‬ ‫را‬ ‫چیزی‬ ‫هر‬ ‫توانیم‬ ‫می‬ ‫چگونه‬ ‫پس‬ ‫نامتغیر‬ ‫یا‬ ‫مستقل‬ ‫مقدار‬: ‫نیست‬ ‫مهم‬ ‫حلقه‬ ‫تکرار‬ ‫دفعات‬ ‫تعداد‬ ،‫کند‬ ‫می‬ ‫سازی‬ ‫مستند‬ ‫را‬ ‫حلقه‬ ‫خود‬. ‫حلقه‬ ‫بدنه‬ ‫دستورات‬ ‫اجرای‬ ‫هر‬ ‫از‬ ‫بعد‬ ‫و‬ ‫قبل‬«‫درست‬»‫است‬. ‫نیست‬ ‫درست‬ ‫بدنه‬ ‫دستورات‬ ‫اجرای‬ ‫حین‬ ‫در‬. ‫یک‬‫منطقی‬ ‫جبری‬ ‫عبارت‬‫است‬. ‫ندارد‬ ‫بستگی‬ ‫حلقه‬ ‫دفعات‬ ‫تعداد‬ ‫به‬ ‫منطقی‬ ‫عبارت‬ ‫مقدار‬. ‫کند‬ ‫می‬ ‫مستند‬ ‫را‬ ‫حلقه‬ ‫محاسبات‬. 17‫مه‬17 while B loop S; end loop; ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 57‫از‬68
  • 58. ‫از‬ ‫مثالی‬‫نامتغیر‬‫حلقه‬ ‫صحیح‬ ‫تقسیم‬ ‫ساده‬ ‫برنامه‬x / y: ‫حلقه‬ ‫از‬ ‫مستقل‬ ‫مقدار‬: x = q*y + r  r >= 0 ،‫تکرار‬ ‫بار‬ ‫صفر‬ ‫برای‬ ‫فوق‬ ‫عبارت‬ ‫تکرار‬ ‫بار‬ ‫یک‬ ‫است‬ ‫درست‬ ‫تکرار‬ ‫بار‬ ‫هر‬ ‫تعداد‬ ‫و‬(‫حلقه‬ ‫اجرای‬ ‫از‬ ‫بعد‬ ‫و‬ ‫قبل‬.) 17‫مه‬17 q := 0 r := x; loop exit when r < y; q := q + 1; r := r – y; end loop; ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 58‫از‬68
  • 59. ‫ها‬ ‫نویسی‬ ‫حاشیه‬ ‫خالصه‬ 17‫مه‬17 package Divide is procedure IntDivide (X,Y : in Integer; R, Q : out Integer); --# derives R, Q from X, Y; --# pre (X >= 0) and (Y > 0); --# post (X = Q * Y + R) and (R >= 0) and (R < Y); end IntDivide; package body Divide is procedure IntDivide (X,Y : in Integer; R, Q : out Integer) is begin Q := 0; R := X; loop --# assert (X = Q*Y + R) and (R >= 0); exit when R < Y; Q := Q + 1; R := R - Y; end loop; end IntDivide; end Divide; ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 59‫از‬68
  • 60. ‫ها‬ ‫نویسی‬ ‫حاشیه‬ ‫خالصه‬ --# main_program ‫کند‬ ‫می‬ ‫مشخص‬ ‫را‬ ‫اصلی‬ ‫برنامه‬. --# inherit ‫دهد‬ ‫می‬ ‫را‬ ‫ها‬ ‫بسته‬ ‫دیگر‬ ‫در‬ ‫ها‬ ‫موجودیت‬ ‫به‬ ‫دسترسی‬ ‫اجازه‬. --# hide ‫کند‬ ‫می‬ ‫مشخص‬ ،‫شود‬ ‫واقع‬ ‫آزمایش‬ ‫مورد‬ ‫نیست‬ ‫قرار‬ ‫که‬ ‫را‬ ‫متنی‬. --# return ‫تابع‬ ‫یک‬ ‫برای‬ ‫شرط‬ ‫پس‬ 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 60‫از‬68
  • 61. ‫خالصه‬ ‫ساده‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫یک‬–SPARK Ada: ‫است‬ ‫قدرتمند‬ ‫کافی‬ ‫اندازه‬ ‫به‬ ‫کاربردی‬ ‫های‬ ‫برنامه‬ ‫تر‬ ‫بیش‬ ‫برای‬. ‫شده‬ ‫تعریف‬ ‫صوری‬ ‫شکل‬ ‫به‬ ‫آن‬ ‫قواعد‬ ‫است‬ ‫دسترس‬ ‫در‬ ‫آن‬ ‫برای‬ ‫باال‬ ‫بسیار‬ ‫کارامدی‬ ‫با‬ ‫کامپایلرهای‬: ‫کامپایلرهای‬ ‫شامل‬‫گواهی‬ ‫تحت‬RTCA DO-178B level A (FAA) ‫ساده‬ ‫نویسی‬ ‫حاشیه‬ ‫زبان‬ ‫یک‬: ‫نظیر‬ ‫هایی‬ ‫مشخصه‬ ‫بیان‬ ‫برای‬ ‫قدرتمند‬ ‫کافی‬ ‫اندازه‬ ‫به‬: ‫ای‬ ‫برنامه‬ ‫هر‬ ‫در‬ ‫ها‬ ‫دسترسی‬ ‫و‬ ‫ها‬ ‫داده‬ ‫جریان‬ ‫تمامی‬ ‫توابع‬ ‫و‬ ‫ها‬ ‫روال‬ ‫همه‬ ‫عملیاتی‬ ‫های‬ ‫نیازمندی‬ ‫اساسی‬ ‫قضیه‬ ‫یک‬ ‫خودکار‬ ‫اثبات‬ ‫برای‬ ‫ابزارهایی‬:Actual code => low-level specification ‫جدید‬ ‫افزار‬ ‫نرم‬ ‫توسعه‬ ‫الگوی‬:‫ساخت‬ ‫طریق‬ ‫از‬ ‫درستی‬ 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 61‫از‬68
  • 62. ‫مراجع‬  [1] J. Knight, Fundamentals of computing for software engineers. CRC Press Taylor & Francis Group, 2012.  Chapter 9: Software Fault Avoidance in Implementation  Book + Slides 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 62‫از‬68
  • 63. ‫توجه‬ ‫از‬ ‫تشکر‬ ‫با‬‫شما‬ M-ZAKERI@LIVE.COM
  • 64. ‫ن‬ ‫فصل‬ ‫پایان‬ ‫مسائل‬ ‫و‬ ‫ها‬ ‫تمرین‬ ‫به‬ ‫پاسخ‬‫هم‬
  • 65. ‫تمرین‬1 ‫شده‬ ‫نویسی‬ ‫حاشیه‬ ‫درستی‬ ‫به‬ ‫های‬ ‫برنامه‬ ‫روی‬ ‫بر‬ ‫که‬ ‫تحلیل‬ ‫نوع‬ ‫دو‬SPARK Ada‫قابل‬ ‫کدامند؟‬ ،‫است‬ ‫انجام‬ ‫پاسخ‬:‫در‬ ‫نویسی‬ ‫حاشیه‬SPARK Ada‫دارد‬ ‫مهم‬ ‫نقش‬ ‫دو‬: ‫برنامه‬ ‫داده‬ ‫جریان‬ ‫تعریف‬:‫است‬ ‫با‬ ‫و‬ ‫کند‬ ‫می‬ ‫مشخص‬ ‫برنامه‬ ‫در‬ ‫را‬ ‫ها‬ ‫داده‬ ‫بین‬ ‫ارتباط‬ ‫و‬ ‫حوزه‬ ‫که‬‫از‬ ‫فاده‬ ‫نویسی‬ ‫حاشیه‬Core‫شود‬ ‫می‬ ‫انجام‬. ‫برنامه‬ ‫عملکرد‬ ‫تعریف‬:‫ح‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫و‬ ‫کند‬ ‫می‬ ‫مشخص‬ ‫را‬ ‫توابع‬ ‫و‬ ‫ها‬ ‫روال‬ ‫عملکرد‬ ‫صحت‬ ‫که‬‫اشیه‬ ‫نویسی‬Proof‫شود‬ ‫می‬ ‫انجام‬. ‫است‬ ‫انجام‬ ‫قابل‬ ‫آن‬ ‫روی‬ ‫تحلیل‬ ‫نوع‬ ‫دو‬ ‫نتیجه‬ ‫در‬: ‫داده‬ ‫جریان‬ ‫تحلیل‬:‫ای‬ ‫داده‬ ‫های‬ ‫وابستگی‬ ‫و‬ ‫ها‬ ‫دهی‬ ‫مقدار‬ ‫رعایت‬ ‫از‬ ‫اطمینان‬ ‫منظور‬ ‫به‬ ‫عملیاتی‬ ‫تحلیل‬:‫اف‬ ‫نرم‬ ‫شده‬ ‫سازی‬ ‫پیاده‬ ‫های‬ ‫مشخصه‬ ‫درستی‬ ‫و‬ ‫صحت‬ ‫از‬ ‫اطمینان‬ ‫منظور‬ ‫به‬‫زار‬ 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 65‫از‬68
  • 66. ‫تمرین‬2 ‫نویسی‬ ‫حاشیه‬SPARK Ada‫کند‬ ‫می‬ ‫مستند‬ ‫را‬ ‫ای‬ ‫داده‬ ‫وابستگی‬ ‫که‬(--# derives) ‫تعیی‬ ‫کامپایلر‬ ‫توسط‬ ‫توانند‬ ‫می‬ ‫ها‬ ‫آن‬ ‫تر‬ ‫بیش‬ ‫که‬ ‫کند‬ ‫می‬ ‫فراهم‬ ‫را‬ ‫اطالعاتی‬‫شود‬ ‫ن‬.‫چرا‬ ‫است؟‬ ‫نشده‬ ‫واگذار‬ ‫دیگری‬ ‫مشابه‬ ‫ابزار‬ ‫یا‬ ‫و‬ ‫کامپایلر‬ ‫به‬ ‫امر‬ ‫این‬ ‫پاسخ‬:‫ک‬ ‫از‬ ‫مستقل‬ ‫را‬ ‫ها‬ ‫داده‬ ‫بین‬ ‫وابستگی‬ ‫که‬ ‫است‬ ‫این‬ ‫نویسی‬ ‫حاشیه‬ ‫از‬ ‫هدف‬‫د‬ ‫بررسی‬ ‫را‬ ‫آن‬ ‫بتوانند‬ ‫ابزارها‬ ‫نحوی‬ ‫به‬ ‫کند‬ ‫مشخص‬ ‫شده‬ ‫نوشته‬(Check)‫کنند‬.‫نتیجه‬ ‫در‬ ‫رود‬ ‫می‬ ‫انتظار‬ ‫داده‬ ‫جریان‬ ‫کند‬ ‫مشخص‬ ‫مهندس‬ ‫که‬ ‫است‬ ‫آن‬ ‫اینجا‬ ‫در‬ ‫اصلی‬ ‫ایده‬ ‫شده‬ ‫نوشته‬ ‫کد‬ ‫آیا‬ ‫که‬ ‫کند‬ ‫بررسی‬ ‫ابزار‬ ‫یک‬ ‫سپس‬ ‫و‬ ‫باشد‬ ‫چگونه‬(‫ا‬ ‫ممکن‬ ‫که‬‫توسط‬ ‫ست‬ ‫باشد‬ ‫شده‬ ‫نوشته‬ ،‫است‬ ‫نوشته‬ ‫را‬ ‫ها‬ ‫حاشیه‬ ‫که‬ ‫شخصی‬ ‫همان‬)‫د‬ ‫جریان‬ ‫این‬ ‫واقعا‬‫را‬ ‫اده‬ ‫محد‬ ‫بتوانند‬ ‫تا‬ ‫سازد‬ ‫می‬ ‫قادر‬ ‫را‬ ‫ابزارها‬ ،‫امر‬ ‫این‬ ‫بنابراین‬ ‫خیر؟‬ ‫یا‬ ‫کند‬ ‫می‬ ‫پیروی‬‫وده‬ ‫شده‬ ‫نوشته‬ ‫کد‬ ‫خصوصیات‬ ‫از‬ ‫وسیعی‬(‫دست‬ ،‫متغیرها‬ ‫به‬ ‫اولیه‬ ‫دهی‬ ‫مقدار‬ ‫شامل‬‫رسی‬ ‫غیره‬ ‫و‬ ‫ها‬ ‫آن‬ ‫به‬ ‫مناسب‬)‫کنند‬ ‫بررسی‬ ‫خودکار‬ ‫طور‬ ‫به‬ ‫را‬(‫ص‬281.) 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 66‫از‬68
  • 67. ‫تمرین‬3 ‫و‬ ‫بگیرید‬ ‫نظر‬ ‫در‬ ‫را‬ ‫زیر‬ ‫کد‬ ‫قطعه‬‫نامتغیر‬‫حلقه‬(Loop Invariant)‫مشخص‬ ‫آن‬ ‫برای‬ ‫را‬ ‫نمایید‬. ‫پاسخ‬: 17‫مه‬17 ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ Pre-conditions: n >= 0 Post-conditions: factorial = n! Loop Invariant: i >= 1 / i <= n / factorial = (i)! 67‫از‬68
  • 68. ‫ها‬ ‫بیت‬ ‫سازی‬ ‫پیاده‬(‫اصلی‬ ‫مرجع‬ ‫شکل‬) 17‫مه‬17 Specification Implementation In High Level Language Relocatable Binary Implementation Relocated Binary Implementation Humans Algorithms & Data structures Compiler Machine and Library Descriptions Linker & Loader Libraries ‫سازی‬ ‫پیاده‬ ‫در‬ ‫افزار‬ ‫نرم‬ ‫خطاهای‬ ‫از‬ ‫اجتناب‬-‫ذاکری‬ ‫مرتضی‬ 68‫از‬68