Practical implementation of automated joint fault measuerment
Software Fault Avoidance in Implementation
-
Upload
morteza-zakeri -
Category
Engineering
-
view
45 -
download
2
Transcript of Software Fault Avoidance in Implementation
دانشکده مهندسی کامپیوتر
اجتناب از خطای نرم افزار در پیاده سازی
Software Fault Avoidance in Implementation
پژوهش درس سیستم های نرم افزاری اتکا پذیر
(نسخه کامل)
:دانشجو
مرتضی ذاکری
:استاد
دکتر محمد عبدللهی ازگمی
1396اردیبهشت ماه
رئوس مطالب
زبان و چارچوبSPARK Ada
فرایند تحلیل نرم افزار درSPARK Adaتحلیل جریان دادهتحلیل جنبه های عملیاتی
مقایسهAda وSPARK Ada
حاشیه نویسی درSPARK Ada
حلقهنامتغیرخالصه و نتیجه گیری
پیاده سازی و مشکالت ناشی از آنزبان های برنامه نویسی مطالعه موردی برخی اشکاالت مشکالت زبان برنامه نویسیC
استانداردهای برنامه نویسی زبان برنامه نویسیAda
ساختدرستی از طریق گانهرویکردهای سه
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 2
پیاده سازی
مشخصات با شروع از یک سند(specification ) که صوری ترجیحا(formal) و اعالنیاحتماال در یک زبان(declarative) ،بیان شده است ،
می رسیمپیاده سازی به مرحله.پیاده سازی معموال توسط یک زبان برنامه نویسی سطح باال انجام می شود. است که در حافظه جای می گیردبیت هایی اما برنامه!
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 3
پیاده سازی بیت ها
17مه 17
مشخصات
پیاده سازی در یکزبان سطح باال
پیاده سازی کد دودوییقابل حمل
پیاده سازی کد دودوییقابل حمل
انسانداده ساختارها و الگوریتم ها
کامپایلرتوصیفات ماشین و کتابخانه
کتابخانه های بارکنندهو پیوند دهنده
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 4
اشتباه است؟چه چیزی در نرم افزار
کارکرد اشتباه(commission) کارکرد گم شده(omission)مدیریت اشتباه منابع
پردازنده ها در سیستم های همروند در همه سیستم ها( حافظه)ذخیره سازیخروجی در همه سیستم ها-فایل ها و دستگاه های وروردی
استثناهای پیش بینی نشدهخطاهای ترجمه و کتابخانه ها
ط، اتصال خطا در کدهای تولید شده، کتابخانه نادرست، کتابخانه معیوب، نمونه پیاده سازی شده غلدهنده یا بارکننده معیوب
اشکال های پیکربندی17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 5
زبان های برنامه نویسی
زبان برنامه نویسی خوب، نرم افزار خوب را تضمین نمی کند؛ با این حال:زبان های خوب می توانند به برنامه نویسی کمک کنند.زبان های ضعیف می توانند مانع کار برنامه نویس شوند.
گونه های زیادی از اشتباهات ناشی از امکانات زبان هستند، در نتیجه نیازمند: از بعضی زبان ها« امن»زیر مجموعه هایاستانداردهایی که شیوه های مشکل ساز شناخته شده در برنامه نویسی را مانع شوند.
زبان برنامه نویسی پایه ای ترین ابزاری است که توسعه دهنده در اختیار دارد.انتخاب زبان بایستی اهداف اتکاپذیری را پشتیبانی کند.
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 6
ویژگی های مهم زبان
قواعد نحوی واضح(Clear Syntax )ساز و کارهای ساختاری و تجرید جامع انواع داده ای قوی(Strong Typing)پشتیبانی از همروندی و جامع( صوری)تعاریف خیلی دقیق
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 7
نمونه هایی از مشکل
برگرفته از مقاله: A Software Fault Prevention Approach in Coding and Root Cause Analysis
By Weider D. Yu, 1998.
حاصل تحلیل چندین میلیون خط کد درLucent 5ESS switching system
بیشتر کدها به زبانCبوده است.اجتناب از خطا در سیستم های بزرگی که به زبان : هدف پروژهCنوشته می شوند.
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 8
نمونه هایی از مشکل
ح درصد از اشکال هایی که پیدا شدند، اشکال های برنامه نویسی سط50نزدیک به.پایین بودند
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 9
تقدم عملگر
تقدم متفاوت برای مثال. باالتر است&از عملگر ==تقدم عملگر:
if (blkptr -> rpthead.fltdesc & HMFLTCLAS == HWMATEFLT)
(:اسبتغییر تقدم با استفاده از پرانتز گذاری من)قطعه کد باال، باید به شکل زیر اصالح شود if ((blkptr -> rpthead.fltdesc & HMFLTCLAS)== HWMATEFLT)
در تقدم یکسان، شرکت پذیری حایز اهمیت است.یکسان است اما شرکت پذیری آن از راست به چپ است++و * در قطعه کد زیر تقدم:
*numretry++;
الح که نادرست است و باید اص! کد باال یعنی افزایش یک اشاره گر و سپس ارجاع به محتوای آن:شود
(*numretry)++;
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 10
forکنترل حلقه
دپس باید به صورت زیر اصالح شو! استوابسته به کامپایلر کد باال در واقع:
17مه 17
for (idx = 0; idx < 40; dispstring[idx] =
COTsuccess[idx++]);
for (idx = 0; idx < 40; idx++) {
dispstring[idx] = COTsuccess[idx]
};
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 11
Lucent 5ESSخطاهای منطقی در
برابری/ تخصیص مقدار فیلدهای بیتی عالمت دار و غیرenum
AND منطقی و عملگرهایmaskنادرست
اشتباهات شرطی پیش پردازنده جدا کننده های توضیح(comment)متغیرهای بی عالمت و مقایسه هااستفاده نادرست از تبدیل نوع
(Type Casting)
استفاده از متغیرهای مقداردهی اولیهنشده
استفاده نادرست از دستوراتbreak وcontinue
تقدم عملگرهاشرایط مرزی حلقه هااندیس های خارج از محدوده آرایه هاتقریب و برش مقادیراستفاده نادرست از اشاره گرها تست هایAND وORاشتباه
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 12
نتایج پروژه
ویسیتوسعه تکنیک هایی برای کمک به کم کردن تعداد اینگونه از مشکالت کد ن درصدی نرخ وقوع خطا در نسخه های 34.5نتیجه کاهشT وT+1بود. (هزینه آزمون به ازای هر خط کد)درصدی هزینه آزمون 18.3کاهش میلیون 7هزار دالر؛ هزینه صرفه جویی شده در بازنگری و آزمون 100هزینه تکنیک ها
!بله، انجام این کار به صرفه استدالر آیا این کار به اندازه کافی خوب است؟
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 13
Cمشکالت زبان برنامه نویسی
زبانCاساسا بدون نوع است. نحو زبانCگیج کننده است.
اشاره گرها معانی اشتباهی برای پارامترها هستند.بیش تر آموزش ها در مجموع ناقص و ناکافی هستند.زبان های بهتری وجود دارند. اگر ازC ،بسیار مراقب باشیداستفاده می کنید!
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 14
استانداردهای برنامه نویسی
آیا همه مشکالت با رعایت استانداردهای حل می شوند؟بله:در تئوری!خیر: در عمل!
چرا خیر؟استانداردها به ندرت به شکل سیستماتیک و با ابزار اعمال می شوند.استانداردها به هیچ وجه کامل نیستند.اجتناب از خطا هدف اولیه بسیاری از استانداردها نیست.
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 15
برخی استانداردهای برنامه نویسی
استاندارد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 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 16
MISRA Cاستاندارد
47قانون هیچ گونه وابستگی نباید روی قواعد تقدم عملگر در عبارت های زبانCقرار داده شود.
59قانون دستوراتی که بدنه عبارت هایif ،else if ،else ،while ،do . . . While وfor ،را تشکیل می دهند
(.حتی اگر یک دستور باشد)، قرار گیرند ({ })بایستی همیشه داخل آکوال 66قانون
فقط عبارت هایی که مرتبط با کنترل حلقه هستند بایستی در داخل دستورforبه کار روند.
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 17
یک انتخاب برتر–Adaزبان
پروژه توسط وزارت دفاع امریکا(DoD) میالدی شکل گرفت70در اواخر دهه. انتظار می رفت تا تمام پروژه هایDoD از زبان ،Adaاستفاده کنند.اده تالش برای جایگزینی تعداد زیادی زبان برنامه نویسی که در آن زمان مورد استف
(زبان مختلف۵۰۰بیش از )بودند میالدی و تحت عنوان 1983استاندارد اصلی در سالAda’ 83منتشر شد.
بر مبنای زبان پاسکال و نتیجه یک رقابت در طراحی گسترده
دو نگارش اصلی بعد از نگارش اولیه :Ada’ 95 وAda 2005
نگارش پایدار فعلی :Ada 2012 TC1
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 18
2005بر گرفته از راهنمای مرجع نسخه Adaهدف اصلی طراحی
بهکنند،میسادهرانگهداریوبخشیدهارتقارااطمینانقابلیتکههاییزبانبهنیازردمونوشتن،درسهولتعیندربرنامهخواناییروایناز.استشدهاثباتخوبیرنامهبمتغیرهایکهاستنیاززبانقواعدطبقمثال،برای.استگرفتهقرارتاکید
ثابتمتغیرنوعکهجاییآناز.باشدمشخصهاآننوعوشدهتعریفصریحادرهایمشخصهبامتغیررویعملگرهایکهشودمطمئنتواندمیکامپایلراست،
هایگذارینشانهاینبرافزون.دارندسازگارینوع،ایناشیابرایشدهگرفتهنظربهیریجلوگرمزگونههایشکلبردنکاربهاززباننحو.اندشدهاجتنابخطامستعد
در.ندکمیاستفادهرامانندانگلیسیساختارهایتوجهیقابلطوربهوآوردمیعملوتوسعههکنحویبهرابرنامههایقسمتجداگانهکامپایلازپشتیبانیزباننهایت،
متقسبینرابررسیازدرجههمانونمایدمیپیشنهادشود،تسهیلآننگهداری.بردمیکاربهبرنامهازقسمتیکداخلدرکهکندمیلحاظمختلفهای
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 19
Adaچیست؟
سیستم های مورد هدف آن عبارتند از: سیستم های توکار یا نهفته(Embedded systems )نرم افزارهای پیچیده با عمر طوالنی
زبان های موجود تا حد امکان« پر خطر»حذف بسیاری از المان هایمبتنی بر اشیا و شی گرا انواع پارامتری(generics) برنامه نویسی بالدرنگ(Real-time ) و همروند(concurrent)مدیریت استثنای جامعسیستم نوع قدرتمند
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 20
Adaچیست؟
برنامه نویسی سیستمیکنترل دقیق روی نحوه نمایش ماشیندسترسی به اجزای وابسته به سیستم (عریان)ماشین های بدون سیستم عامل
بسته های استاندارد برای بسیاری از اهدافپشتیبانی جامع از کامپایل جداگانه پشتیبانی جامع از انواع داده ای عددی(numeric ) به همراه نمایش مختص ماشین
هدف
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 21
Adaچیست؟
هیچ زیرمجموعه ای از زبان مجاز نیست. تا مرحله پیوند ( کامپایلر)زبان(link time )حضور دارد.فرایند اعتبار سنجی کامپایلر:
همه کامپایلر ها نیاز دارند تا یک مجموعه تست جامع را رد(pass )کنند.Ada Compiler Validation Capability (ACVC)
استانداردهایANSI وISO
دارای یک زیرساخت کامل:کامپایلر و ابزارهای دیگرتعاریف دقیق و با جزئیاتکتاب ها و آموزش های فراوان
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 22
کامپایل جداگانه: مثال
یک قابلیت ضروری در هر محیط توسعهقواعد معنایی چه هستند؟به طور معمول قواعد معنایی زبان:
هستندمتفاوتبرای هر کامپایل جداگانه.انواع پارمتر و عدد بررسی نمی شوند. متکی بر پیونددهنده سیستم و ابزارهایی نظیرmakeهستند.
قواعد معناییAda:ها به عنوان کامپایل تنبل، به نحوی که کامپایل جداگانه چند قسمت عینا مانند کامپایل کل قسمت
.یک برنامه کامل استپیوند دادن بخشی از عملیات کامپایل است.بررسی وابستگی ها بخشی از عملیات کامپایل است.
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 23
(Correctness By Construction)درستی از طریق ساخت
آیا می توانیم بهتر عمل کنیم؟ برنامه از فرایند ساخت آن، منتج گردد( صحت)پیاده سازی به شیوه ای که درستی.
ع خطا را تا بخش کوچکی از این فرایند استفاده از یک زبان برنامه نویسی است که مناب.حد ممکن حذف می کند
ند تا رویکرد یا مجموعه ای از رویکردها نیاز است که به مهندس برنامه نویس کمک کن.در حد امکان به این مهم دست یابد
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 24
سه رویکرد مختلف: درستی از طریق ساخت
17مه 17
Specification Implementation
Specification Implementation
انتزاع واقعیت
Specification Implementation
Human GuidedSynthesis
Human Created Refinementand Proof
Human Created Synthesisand Static Analysis
Synthesis
E.g. Simulink
Refinement
E.g. B
Analysis
E.g. SPARK
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 25
درستی از طریق ساخت
«مشخصا بهترین رویکرد به شمار می آید، اما در حال حاضر محدود است« سنتز.«خوب است ولی بسیار محدود کننده است« پاالیش.«عام تر است و به خوبی کار می کند« تحلیل.تحلیل سعی دارد تا به موارد زیر دست یابد:
یک نرم افزار بسیار بهتریک نرم افزار بسیار ارزان تر
ایده اولیه پروژهSPARK Ada
رویکرد اولیه مشابهی برای زبان هایC# وJavaنیز توسعه داده شده است.SPARKستدر بسیاری از پروژه های صنعتی استفاده شده ا! یک اسباب بازی نیست.
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 26
SPARK Ada
یک زبان برنامه نویسی با قواعد نحوی و معنایی دقیق و خوش تعریف:SPARK از یک زیرمجموعه زبانAda (و نه تمام قسمت های آن)استفاده می کند
سازو کار حاشیه نویسی(Annotation ) سطح طراحی شده تا مشخصه های نرم افزار در.قابل بیان باشدپایین
SPARK توضیحات(Comments)سبک یافته ای را به کار می برد.طح کد از مشخصه های سطح پایین ساخته می شود، نه مستقیما از مشخصه های س
باالی سیستمبه)االبسطحهایمشخصهمی تواندپایینسطحطراحیکهموضوعاینیابیدرستی
جداگانه ایمسئله،کندسازیپیادهرا(Zتوسطشدهتعریفهایمشخصهمثالعنوان.است
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 27
منابع مرتبط
وب سایت رسمی :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 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 28
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 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 29
نگاه اجمالی
SPARKابزارهای زیر را فراهم می کند:Examiner, Simplifier, Prover
به طور کامل در مرجعHigh Integrity Software by John Barnesتعریف شده است. مشخص شده است که درAda درصد اشکال های موجود در زبان 10تقریباC باقی
(.درصد اشکال ها برطرف شده است90در واقع )مانده است SPARK Ada درصد اشکال های نسخه کامل 10هم تقریباAdaرا دارد.لذا زبان برنامه نویسی موضوع حایز اهمیتی است.
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 30
SPARKتصویر کلی برنامه
17مه 17
Notation ForAnnotations
Language With PreciseSyntax & Semantics
Tools—AppliedDuring
Development
Properties
Correctness by construction
CompilerLinkerLoader
ExecutableSoftware
SoftwareAda + Annotations
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 31
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
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 32
SPARKتحلیل در
17مه 17
SoftwareSource + Annotations
SyntaxAnalysis
TypeAnalysis
Data FlowAnalysis
Control FlowAnalysis
FunctionalCorrectness
Low Level Design
Annotations
Compiler Examiner
Simplifier&
Prover
Not the high-level (Z) specification!
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 33
تحلیل نحوی
می شودمطمئن می شود برنامه با قواعد زبان کامپایل.
زیر مجموعهSPARK ازAdaو حاشیه نویسی هاگرامر مستقل از متن:
BNF
تحلیل گرهای تولید شده به صورت خودکارگرامر وابسته به متن
تعریف متغیر قبل از استفادهقوانین مربوط به حوزهو غیره
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 34
تحلیل نوع
سیستم نوع داده ای قویکمک به کاهش اشکال هانتایج به اثبات رسیده در عمل
مشخصا به ایجاد مشکل منجر می شودسخت افزارانواع داده ای اولیه موجود در ،:در اصل، انواع داده ای، انواع داده ای ماشین بودند. می شوندناشی برنامه کاربردی، از قواعد معنایی مدرننوع سیستم های.
بهاز که برنامه نویس تعریف می کند باعث انعطاف پذیری می شود اما نیانواع داده ای.بررسی اضافی دارد
قواعد تبدیل نوع باید خیلی دقیق تعریف شوند.ناورانواع محاسباتی نیز مشکل ساز هستند؛ برای مثال تعیین دقیق اعداد ممیز ش.
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 35
تحلیل جریان داده
جریان داده به معنای واقعی عبارت است از حرکت داده به سمت استفاده های آن.مقدار زیادی از داده در بسیاری از سیستم ها:
به مکان اشتباهی می رودبه هیچ جایی نمی رودبه مکان درستی می رود اما خود داده اشتباه است.داده استفاده نمی شود.داده اشتباه استفاده می شود.
ا نمی توان همه اشکال های مربوط به داده را پیدا کرد، اما قطعا کسر بزرگی از آن ها ر.می توان تشخیص داد
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 36
تحلیل جریان داده
مسائل و مشکالت جریان داده عبارت است از: اسامی مستعار(Aliasing )بی نظمی زنجیره های تعریف و استفاده
بی نظمی های مشاهده شده در تعریف و استفاده:استفاده قبل از تعریف (تعاریف پشت سر هم)تعریف و سپس تعریف مجددتعریف و عدم استفاده
پیچیدگی هاساختارهای کنترلی، زیر برنامه ها، همروندی.
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 37
تحلیل جریان کنترلی
اجرای جریان کنترلیمسائل و مشکالت اصلی عبارت است از:
(کدی که کنترل اجرا هرگز به آن نمی رسد)کد مرده بن بست(deadlock ) وlivelocks
(نظیر انحصار متقابل)اشکال های همگام سازی در سیستم های همروند
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 38
(صحت عملکرد)درستی جنبه های عملیاتی
پیش شرط ها توسط(pre-conditions ) پس شرط ها و(post-condition ) مشخص.می شود
شرط های درستی یابی(verification conditions )را می سازد. ا از هستند، آن گاه پس شرط هصحیحاگر بتوان نشان داد شرط های درستی یابی
.پیش شرط ها پیروی می کنند شرط های درستی یابی می توانند در یک سیستم اثبات قضایا(theorem-proving) ،
.ثابت شوند
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 39
یک مثال ساده
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;
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 40
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 .
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 41
خالصه اثبات
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 | | | | |
----------------------------------------------------------------------------
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 42
SPARK Adaزیر مجموعه
موارد حذف شده عبارتند از:Generics
Access types
Goto statements
Most tasking
Exceptions
Dynamically sized arrays
Implicit subtypes
اقی در نتیجه یک زبان قدرتمند و مفید ب.می ماند
17مه 17
Ada SubsetPrecise Syntax & Semantic Definitions
AdaCarefully Designed
Programming Language
Select Language SubsetEliminate Features For Which Proof
Would Be Problematic
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 43
SPARK Adaخصوصیات
هیچ ابهام زبانی وجود ندارد–صحت منطقی.تعریف صوری نحو و قواعد معنایی منطقی. دارندا ماشین رتوسط بررسیبه طور بهینه قابلیت همه قواعد معنایی زبان –امنیت. اثبات پذیری(Verifiability)
کد معنای کامال دقیقی دارد.امکان اثبات به صورت ریاضی در مورد آن وجود دارد. آزمون گر(Examiner )امکان درستی یابی ماشینی را می دهد:
درستی یابی مشخصه هابرای نشان دادن قابلیت های مفید:
برای مثال، کد وارد استثنا نخواهد شد.
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 44
SPARK Adaخصوصیات
منابع بایستی به صورت ایستا محاسبه شوند–زمان و فضای محدود. برنامه های کاربردی مستحکم صنعتی–قدرت مثال زدنی زبان کاملAdaسیستم زمان اجرای پیچیده ای دارد:
اجرا شود( بدون سیستم عامل)طراحی شده است تا روی ماشین عریان.نیازمند پشتیبان زمان اجرای خاص خود است.
SPARK Adaیک سیستم زمان اجرای کمینه دارد:Taskها حذف شده اند.مدیریت استثنا در کار نیست. نیستنیازی به بررسی سیستم زمان اجرای پیچیده.
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 45
SPARK Adaچه چیزی را به ارث برده است؟
(:اما فقط محدود به این موارد نیست)شامل موارد زیر هست (شمارشی، کاراکتر، بولی، اعشاری، ثابت)انواع داده ای عددیانواع داده ای آرایه و رشتهرکوردهاطیف کامل عبارت ها دستورات(assignment, case, loop, if, exit, procedure call, entry call, return, delay )زیربرنامه ها (یعنی همان کالس ها)بسته هاجداسازی کامل مشخصه ها و پیاده سازیارث بری وظیفه ها شاملentries وentry calls
کامپایل جداگانه
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 46
SPARK Adaچه چیزی را حذف کرده است؟
وظیفه(Task )ها بیشتر امکانات در رابطه با وظیفه ها درSPARK Adaحذف شده اند . کلیاتRavenscarکماکان باقی مانده است.بسیاری از جنبه های وظیفه ها که از اثبات جلوگیری می کرد، حذف شده اند.
استثناها: (. مانع اثبات می شود)جریان کنترل پویای پیچیده استثناها از اثبات جلوگیری می کند
قالب ها(Generics ) (.زیاد مهم نبودند)نداشتند ( اساسی)قدرت بنیادیاثبات در حضور قالب ها پیچیده است.
اشاره گرهاآرایه با ابعاد پویا (ضمنی)انواع بدون نام دستورgoto
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 47
حذف شدند؟SPARK Adaچرا استثناها در
ندزیرا استثناها به طور کلی جریان کنترلی برنامه را بیش از حد پیچیده می کن.زبان قواعد معنایی سخت گیرانهAdaرا در انتشار استثناها تصور کنید!قواعد کلی مربوط به حوزه استثناها را تصور کنید.و از همه مهم تر :
دیک برنامه درست و قابل تایید به هیچ وجه نبایست استثناهای غیر منتظره داشته باش.
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 48
مشکالت استثناها در چیست؟
مشکالت عبارت است از: قواعد معنایی انشعاب دلخواه(arbitrary branch)قواعد معنایی تعیین کنترل کننده استثنامحلی که کنترل کننده استثنا در آن عمل می کندقواعد معنایی خاتمه کنترل کننده استثنااستثنا در وظیفه هاانواع استثناها و محدوده آن ها
بایستی مطمئن شویم با وجود این قواعد سیستم درست عمل می کند.
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 49
حذف شدند؟SPARK Adaدر قالب ها چرا
تندقالب ها نمونه سازی چندگانه را تسهیل می کنند ولی دارای قدرت بنیادی نیس. ( نبه کار گرفت)جمع آوری خواص قالب ها خیلی پیچیده است و نیاز به کمی سازی
.روی انوع مختلف دارد را آزمایش کنیم؟( عام)برای مثال چگونه یک نوع داده ای قالب
لذا درستی یابی جداگانه ی نمونه ها بیان می دارد که آن ها باید کامال جدا باشند و.نیازی به قالب ها احساس نمی شود
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 50
حذف شدند؟SPARK Adaاشاره گرها در چرا
اشاره گرها برای مدیریت پویای حافظه مورد نیاز هستند.تخصیص پویای حافظه یک مسئله واقعی در اتکاپذیری است.
نیازمند اثبات این هستیم که حافظه هرگز در حین اجرا تمام نمی شود.این امر عموما غیر ممکن است.کالتی از افزون بر این نیاز است تا مطمئن باشیم که خرابی حافظه، اشاره گر معلق و مش
.این قبیل رخ نمی دهد که این امر هم در عمل غیر ممکن استی به هر حال بر خالف قالب ها، از قدرت اشاره گرها به این راحتی نمی توان چشم پوش
(مترجم!!! )/کرد
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 51
SPARKهای ( Annotations)حاشیه نویسی
حاشیه نویسی زبانSPARK قوانین و حقوق مختص خود را دارد( مستقل از زبانAda.) شروع می شوند، جاسازی می شود#--در توضیحاتی که با عالمت.SPARK یک زیر مجموعه از زبانAda شده استترکیباست که با حاشیه نویسی!حاشیه نویسی ها موارد زیر را تعریف می کنند:
مشخصه های نرم افزاروابستگی های مورد انتظار بین اقالم داده ای
بنابراین، دو دسته حاشیه نویسی داریم: اثبات(Proof )
جهت اثبات درستی خصوصیات برنامه جریان داده(Data Flow)
منبعکداجزای بین مختلف تارتباطادر مورد هاابزاردادن به آگاهی آسان تر می نمایندرسمی را تشکیل می دهند، درک کد را مشخصه هایحاشیه نویسی هایی که. شوندحاشیه نویسی ها باید قبل از کد اصلی نوشته.
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 52
خالصه حاشیه نویسی ها
--# 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;
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 53
خالصه حاشیه نویسی ها
--# global
سراسریمشخص می کند که یک متغیر در داخل بسته(global )است.خروجی را نیز مشخص می کند-همچنین مد دسترسی متغیر شامل ورودی، خروجی و ورودی.اغلب اوقات به کار گرفته می شود، یعنی در وابستگی ها نیز ظاهر می شود.
--# ownمشخص می کند که متغیر در بدنه بسته تعریف شده است.آن نماد را برای سایر قسمت های حاشیه نویسی قابل دسترس می کند. شناخته شده استتنها در بدنه و در مشخصه ها شناخته شده نیست متغیر.
--# initializes
اولیه شده استمقداردهی بستهمشخص می کند که متغیر توسط.
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 54
خالصه حاشیه نویسی ها
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;
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 55
خالصه حاشیه نویسی ها
--# 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;
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 56
(Loop Invariant)حلقه نامتغیر
--# assert :ادعا می کند عبارت درست است.کاربرد اصلی در تعریف مقادیر مستقل از حلقه دستورSچندبار اجرا می شود؟دفعات اجرای . ایده ای در اختیار نداریمSبستگی به داده ها در طول اجرا دارد.پس چگونه می توانیم هر چیزی را اثبات کنیم؟مقدار مستقل یا نامتغیر:
خود حلقه را مستند سازی می کند، تعداد دفعات تکرار حلقه مهم نیست. است« درست»قبل و بعد از هر اجرای دستورات بدنه حلقه.در حین اجرای دستورات بدنه درست نیست. استعبارت جبری منطقی یک.مقدار عبارت منطقی به تعداد دفعات حلقه بستگی ندارد.محاسبات حلقه را مستند می کند.
17مه 17
while B loop
S;
end loop;
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 57
حلقهنامتغیرمثالی از
برنامه ساده تقسیم صحیح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;
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 58
خالصه حاشیه نویسی ها
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;
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 59
خالصه حاشیه نویسی ها
--# main_programبرنامه اصلی را مشخص می کند.
--# inheritاجازه دسترسی به موجودیت ها در دیگر بسته ها را می دهد.
--# hideمتنی را که قرار نیست مورد آزمایش واقع شود، مشخص می کند.
--# return
پس شرط برای یک تابع
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 60
خالصه
یک زبان برنامه نویسی ساده–SPARK Ada :برای بیش تر برنامه های کاربردی به اندازه کافی قدرتمند است.قواعد آن به شکل صوری تعریف شدهکامپایلرهای با کارامدی بسیار باال برای آن در دسترس است:
تحت گواهی شامل کامپایلرهایRTCA DO-178B level A (FAA)
یک زبان حاشیه نویسی ساده:به اندازه کافی قدرتمند برای بیان مشخصه هایی نظیر:
تمامی جریان داده ها و دسترسی ها در هر برنامه اینیازمندی های عملیاتی همه روال ها و توابع
ابزارهایی برای اثبات خودکار یک قضیه اساسی :Actual code => low-level specification
درستی از طریق ساخت: الگوی توسعه نرم افزار جدید
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 61
مراجع
[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 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 62
شمابا تشکر از توجه
هم پاسخ به تمرین ها و مسائل پایان فصل ن
1تمرین
دو نوع تحلیل که بر روی برنامه های به درستی حاشیه نویسی شدهSPARK Ada قابلانجام است، کدامند؟
حاشیه نویسی در : پاسخSPARK Adaدو نقش مهم دارد:فاده از که حوزه و ارتباط بین داده ها را در برنامه مشخص می کند و با است: تعریف جریان داده برنامه
.انجام می شودCoreحاشیه نویسی اشیه که صحت عملکرد روال ها و توابع را مشخص می کند و با استفاده از ح: تعریف عملکرد برنامه
.انجام می شودProofنویسی در نتیجه دو نوع تحلیل روی آن قابل انجام است:
به منظور اطمینان از رعایت مقدار دهی ها و وابستگی های داده ای: تحلیل جریان دادهزاربه منظور اطمینان از صحت و درستی مشخصه های پیاده سازی شده نرم اف: تحلیل عملیاتی
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 65
2تمرین
حاشیه نویسیSPARK Ada که وابستگی داده ای را مستند می کند(--# derives)چرا . ن شوداطالعاتی را فراهم می کند که بیش تر آن ها می توانند توسط کامپایلر تعیی
این امر به کامپایلر و یا ابزار مشابه دیگری واگذار نشده است؟د هدف از حاشیه نویسی این است که وابستگی بین داده ها را مستقل از ک: پاسخ
در نتیجه . کنند( Check)نوشته شده مشخص کند به نحوی ابزارها بتوانند آن را بررسی ایده اصلی در اینجا آن است که مهندس مشخص کند جریان داده انتظار می رود
ست توسط که ممکن ا)چگونه باشد و سپس یک ابزار بررسی کند که آیا کد نوشته شده اده را واقعا این جریان د( همان شخصی که حاشیه ها را نوشته است، نوشته شده باشد
وده پیروی می کند یا خیر؟ بنابراین این امر، ابزارها را قادر می سازد تا بتوانند محدرسی شامل مقدار دهی اولیه به متغیرها، دست)وسیعی از خصوصیات کد نوشته شده
(.281ص )را به طور خودکار بررسی کنند ( مناسب به آن ها و غیره
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 66
3تمرین
حلقه نامتغیرقطعه کد زیر را در نظر بگیرید و(Loop Invariant ) را برای آن مشخص.نمایید
پاسخ :
17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی
Pre-conditions: n >= 0
Post-conditions: factorial = n! Loop Invariant: i >= 1 /\ i <= n /\ factorial = (i)!
68از 67
(شکل مرجع اصلی)پیاده سازی بیت ها
17مه 17
Specification
ImplementationIn High Level
Language
RelocatableBinary
Implementation
RelocatedBinary
Implementation
HumansAlgorithms & Data structures
CompilerMachine and Library
Descriptions
Linker & LoaderLibraries
مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 68