software fault avoidance in implementation

68
کامپیوتر مهندسیانشکده داده سازیم افزار در پیز خطای نرب اجتنا اSoftware Fault Avoidance in Implementation تکا پذیرم افزاری استم های نر سی پژوهش درس( نسخه کامل) دانشجو: ذاکری مرتضیستاد ا: لهی ازگمیحمد عبدل دکتر مشت ماه اردیبه1396

Upload: morteza-zakeri

Post on 22-Jan-2018

44 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: Software Fault Avoidance in Implementation

دانشکده مهندسی کامپیوتر

اجتناب از خطای نرم افزار در پیاده سازی

Software Fault Avoidance in Implementation

پژوهش درس سیستم های نرم افزاری اتکا پذیر

(نسخه کامل)

:دانشجو

مرتضی ذاکری

:استاد

دکتر محمد عبدللهی ازگمی

1396اردیبهشت ماه

Page 2: Software Fault Avoidance in Implementation

رئوس مطالب

زبان و چارچوبSPARK Ada

فرایند تحلیل نرم افزار درSPARK Adaتحلیل جریان دادهتحلیل جنبه های عملیاتی

مقایسهAda وSPARK Ada

حاشیه نویسی درSPARK Ada

حلقهنامتغیرخالصه و نتیجه گیری

پیاده سازی و مشکالت ناشی از آنزبان های برنامه نویسی مطالعه موردی برخی اشکاالت مشکالت زبان برنامه نویسیC

استانداردهای برنامه نویسی زبان برنامه نویسیAda

ساختدرستی از طریق گانهرویکردهای سه

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 2

Page 3: Software Fault Avoidance in Implementation

پیاده سازی

مشخصات با شروع از یک سند(specification ) که صوری ترجیحا(formal) و اعالنیاحتماال در یک زبان(declarative) ،بیان شده است ،

می رسیمپیاده سازی به مرحله.پیاده سازی معموال توسط یک زبان برنامه نویسی سطح باال انجام می شود. است که در حافظه جای می گیردبیت هایی اما برنامه!

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 3

Page 4: Software Fault Avoidance in Implementation

پیاده سازی بیت ها

17مه 17

مشخصات

پیاده سازی در یکزبان سطح باال

پیاده سازی کد دودوییقابل حمل

پیاده سازی کد دودوییقابل حمل

انسانداده ساختارها و الگوریتم ها

کامپایلرتوصیفات ماشین و کتابخانه

کتابخانه های بارکنندهو پیوند دهنده

مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 4

Page 5: Software Fault Avoidance in Implementation

اشتباه است؟چه چیزی در نرم افزار

کارکرد اشتباه(commission) کارکرد گم شده(omission)مدیریت اشتباه منابع

پردازنده ها در سیستم های همروند در همه سیستم ها( حافظه)ذخیره سازیخروجی در همه سیستم ها-فایل ها و دستگاه های وروردی

استثناهای پیش بینی نشدهخطاهای ترجمه و کتابخانه ها

ط، اتصال خطا در کدهای تولید شده، کتابخانه نادرست، کتابخانه معیوب، نمونه پیاده سازی شده غلدهنده یا بارکننده معیوب

اشکال های پیکربندی17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 5

Page 6: Software Fault Avoidance in Implementation

زبان های برنامه نویسی

زبان برنامه نویسی خوب، نرم افزار خوب را تضمین نمی کند؛ با این حال:زبان های خوب می توانند به برنامه نویسی کمک کنند.زبان های ضعیف می توانند مانع کار برنامه نویس شوند.

گونه های زیادی از اشتباهات ناشی از امکانات زبان هستند، در نتیجه نیازمند: از بعضی زبان ها« امن»زیر مجموعه هایاستانداردهایی که شیوه های مشکل ساز شناخته شده در برنامه نویسی را مانع شوند.

زبان برنامه نویسی پایه ای ترین ابزاری است که توسعه دهنده در اختیار دارد.انتخاب زبان بایستی اهداف اتکاپذیری را پشتیبانی کند.

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 6

Page 7: Software Fault Avoidance in Implementation

ویژگی های مهم زبان

قواعد نحوی واضح(Clear Syntax )ساز و کارهای ساختاری و تجرید جامع انواع داده ای قوی(Strong Typing)پشتیبانی از همروندی و جامع( صوری)تعاریف خیلی دقیق

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 7

Page 8: Software Fault Avoidance in Implementation

نمونه هایی از مشکل

برگرفته از مقاله: 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

Page 9: Software Fault Avoidance in Implementation

نمونه هایی از مشکل

ح درصد از اشکال هایی که پیدا شدند، اشکال های برنامه نویسی سط50نزدیک به.پایین بودند

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 9

Page 10: Software Fault Avoidance in Implementation

تقدم عملگر

تقدم متفاوت برای مثال. باالتر است&از عملگر ==تقدم عملگر:

if (blkptr -> rpthead.fltdesc & HMFLTCLAS == HWMATEFLT)

(:اسبتغییر تقدم با استفاده از پرانتز گذاری من)قطعه کد باال، باید به شکل زیر اصالح شود if ((blkptr -> rpthead.fltdesc & HMFLTCLAS)== HWMATEFLT)

در تقدم یکسان، شرکت پذیری حایز اهمیت است.یکسان است اما شرکت پذیری آن از راست به چپ است++و * در قطعه کد زیر تقدم:

*numretry++;

الح که نادرست است و باید اص! کد باال یعنی افزایش یک اشاره گر و سپس ارجاع به محتوای آن:شود

(*numretry)++;

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 10

Page 11: Software Fault Avoidance in Implementation

forکنترل حلقه

دپس باید به صورت زیر اصالح شو! استوابسته به کامپایلر کد باال در واقع:

17مه 17

for (idx = 0; idx < 40; dispstring[idx] =

COTsuccess[idx++]);

for (idx = 0; idx < 40; idx++) {

dispstring[idx] = COTsuccess[idx]

};

مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 11

Page 12: Software Fault Avoidance in Implementation

Lucent 5ESSخطاهای منطقی در

برابری/ تخصیص مقدار فیلدهای بیتی عالمت دار و غیرenum

AND منطقی و عملگرهایmaskنادرست

اشتباهات شرطی پیش پردازنده جدا کننده های توضیح(comment)متغیرهای بی عالمت و مقایسه هااستفاده نادرست از تبدیل نوع

(Type Casting)

استفاده از متغیرهای مقداردهی اولیهنشده

استفاده نادرست از دستوراتbreak وcontinue

تقدم عملگرهاشرایط مرزی حلقه هااندیس های خارج از محدوده آرایه هاتقریب و برش مقادیراستفاده نادرست از اشاره گرها تست هایAND وORاشتباه

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 12

Page 13: Software Fault Avoidance in Implementation

نتایج پروژه

ویسیتوسعه تکنیک هایی برای کمک به کم کردن تعداد اینگونه از مشکالت کد ن درصدی نرخ وقوع خطا در نسخه های 34.5نتیجه کاهشT وT+1بود. (هزینه آزمون به ازای هر خط کد)درصدی هزینه آزمون 18.3کاهش میلیون 7هزار دالر؛ هزینه صرفه جویی شده در بازنگری و آزمون 100هزینه تکنیک ها

!بله، انجام این کار به صرفه استدالر آیا این کار به اندازه کافی خوب است؟

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 13

Page 14: Software Fault Avoidance in Implementation

Cمشکالت زبان برنامه نویسی

زبانCاساسا بدون نوع است. نحو زبانCگیج کننده است.

اشاره گرها معانی اشتباهی برای پارامترها هستند.بیش تر آموزش ها در مجموع ناقص و ناکافی هستند.زبان های بهتری وجود دارند. اگر ازC ،بسیار مراقب باشیداستفاده می کنید!

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 14

Page 15: Software Fault Avoidance in Implementation

استانداردهای برنامه نویسی

آیا همه مشکالت با رعایت استانداردهای حل می شوند؟بله:در تئوری!خیر: در عمل!

چرا خیر؟استانداردها به ندرت به شکل سیستماتیک و با ابزار اعمال می شوند.استانداردها به هیچ وجه کامل نیستند.اجتناب از خطا هدف اولیه بسیاری از استانداردها نیست.

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 15

Page 16: Software Fault Avoidance in Implementation

برخی استانداردهای برنامه نویسی

استاندارد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

Page 17: Software Fault Avoidance in Implementation

MISRA Cاستاندارد

47قانون هیچ گونه وابستگی نباید روی قواعد تقدم عملگر در عبارت های زبانCقرار داده شود.

59قانون دستوراتی که بدنه عبارت هایif ،else if ،else ،while ،do . . . While وfor ،را تشکیل می دهند

(.حتی اگر یک دستور باشد)، قرار گیرند ({ })بایستی همیشه داخل آکوال 66قانون

فقط عبارت هایی که مرتبط با کنترل حلقه هستند بایستی در داخل دستورforبه کار روند.

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 17

Page 18: Software Fault Avoidance in Implementation

یک انتخاب برتر–Adaزبان

پروژه توسط وزارت دفاع امریکا(DoD) میالدی شکل گرفت70در اواخر دهه. انتظار می رفت تا تمام پروژه هایDoD از زبان ،Adaاستفاده کنند.اده تالش برای جایگزینی تعداد زیادی زبان برنامه نویسی که در آن زمان مورد استف

(زبان مختلف۵۰۰بیش از )بودند میالدی و تحت عنوان 1983استاندارد اصلی در سالAda’ 83منتشر شد.

بر مبنای زبان پاسکال و نتیجه یک رقابت در طراحی گسترده

دو نگارش اصلی بعد از نگارش اولیه :Ada’ 95 وAda 2005

نگارش پایدار فعلی :Ada 2012 TC1

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 18

Page 19: Software Fault Avoidance in Implementation

2005بر گرفته از راهنمای مرجع نسخه Adaهدف اصلی طراحی

بهکنند،میسادهرانگهداریوبخشیدهارتقارااطمینانقابلیتکههاییزبانبهنیازردمونوشتن،درسهولتعیندربرنامهخواناییروایناز.استشدهاثباتخوبیرنامهبمتغیرهایکهاستنیاززبانقواعدطبقمثال،برای.استگرفتهقرارتاکید

ثابتمتغیرنوعکهجاییآناز.باشدمشخصهاآننوعوشدهتعریفصریحادرهایمشخصهبامتغیررویعملگرهایکهشودمطمئنتواندمیکامپایلراست،

هایگذارینشانهاینبرافزون.دارندسازگارینوع،ایناشیابرایشدهگرفتهنظربهیریجلوگرمزگونههایشکلبردنکاربهاززباننحو.اندشدهاجتنابخطامستعد

در.ندکمیاستفادهرامانندانگلیسیساختارهایتوجهیقابلطوربهوآوردمیعملوتوسعههکنحویبهرابرنامههایقسمتجداگانهکامپایلازپشتیبانیزباننهایت،

متقسبینرابررسیازدرجههمانونمایدمیپیشنهادشود،تسهیلآننگهداری.بردمیکاربهبرنامهازقسمتیکداخلدرکهکندمیلحاظمختلفهای

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 19

Page 20: Software Fault Avoidance in Implementation

Adaچیست؟

سیستم های مورد هدف آن عبارتند از: سیستم های توکار یا نهفته(Embedded systems )نرم افزارهای پیچیده با عمر طوالنی

زبان های موجود تا حد امکان« پر خطر»حذف بسیاری از المان هایمبتنی بر اشیا و شی گرا انواع پارامتری(generics) برنامه نویسی بالدرنگ(Real-time ) و همروند(concurrent)مدیریت استثنای جامعسیستم نوع قدرتمند

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 20

Page 21: Software Fault Avoidance in Implementation

Adaچیست؟

برنامه نویسی سیستمیکنترل دقیق روی نحوه نمایش ماشیندسترسی به اجزای وابسته به سیستم (عریان)ماشین های بدون سیستم عامل

بسته های استاندارد برای بسیاری از اهدافپشتیبانی جامع از کامپایل جداگانه پشتیبانی جامع از انواع داده ای عددی(numeric ) به همراه نمایش مختص ماشین

هدف

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 21

Page 22: Software Fault Avoidance in Implementation

Adaچیست؟

هیچ زیرمجموعه ای از زبان مجاز نیست. تا مرحله پیوند ( کامپایلر)زبان(link time )حضور دارد.فرایند اعتبار سنجی کامپایلر:

همه کامپایلر ها نیاز دارند تا یک مجموعه تست جامع را رد(pass )کنند.Ada Compiler Validation Capability (ACVC)

استانداردهایANSI وISO

دارای یک زیرساخت کامل:کامپایلر و ابزارهای دیگرتعاریف دقیق و با جزئیاتکتاب ها و آموزش های فراوان

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 22

Page 23: Software Fault Avoidance in Implementation

کامپایل جداگانه: مثال

یک قابلیت ضروری در هر محیط توسعهقواعد معنایی چه هستند؟به طور معمول قواعد معنایی زبان:

هستندمتفاوتبرای هر کامپایل جداگانه.انواع پارمتر و عدد بررسی نمی شوند. متکی بر پیونددهنده سیستم و ابزارهایی نظیرmakeهستند.

قواعد معناییAda:ها به عنوان کامپایل تنبل، به نحوی که کامپایل جداگانه چند قسمت عینا مانند کامپایل کل قسمت

.یک برنامه کامل استپیوند دادن بخشی از عملیات کامپایل است.بررسی وابستگی ها بخشی از عملیات کامپایل است.

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 23

Page 24: Software Fault Avoidance in Implementation

(Correctness By Construction)درستی از طریق ساخت

آیا می توانیم بهتر عمل کنیم؟ برنامه از فرایند ساخت آن، منتج گردد( صحت)پیاده سازی به شیوه ای که درستی.

ع خطا را تا بخش کوچکی از این فرایند استفاده از یک زبان برنامه نویسی است که مناب.حد ممکن حذف می کند

ند تا رویکرد یا مجموعه ای از رویکردها نیاز است که به مهندس برنامه نویس کمک کن.در حد امکان به این مهم دست یابد

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 24

Page 25: Software Fault Avoidance in Implementation

سه رویکرد مختلف: درستی از طریق ساخت

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

Page 26: Software Fault Avoidance in Implementation

درستی از طریق ساخت

«مشخصا بهترین رویکرد به شمار می آید، اما در حال حاضر محدود است« سنتز.«خوب است ولی بسیار محدود کننده است« پاالیش.«عام تر است و به خوبی کار می کند« تحلیل.تحلیل سعی دارد تا به موارد زیر دست یابد:

یک نرم افزار بسیار بهتریک نرم افزار بسیار ارزان تر

ایده اولیه پروژهSPARK Ada

رویکرد اولیه مشابهی برای زبان هایC# وJavaنیز توسعه داده شده است.SPARKستدر بسیاری از پروژه های صنعتی استفاده شده ا! یک اسباب بازی نیست.

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 26

Page 27: Software Fault Avoidance in Implementation

SPARK Ada

یک زبان برنامه نویسی با قواعد نحوی و معنایی دقیق و خوش تعریف:SPARK از یک زیرمجموعه زبانAda (و نه تمام قسمت های آن)استفاده می کند

سازو کار حاشیه نویسی(Annotation ) سطح طراحی شده تا مشخصه های نرم افزار در.قابل بیان باشدپایین

SPARK توضیحات(Comments)سبک یافته ای را به کار می برد.طح کد از مشخصه های سطح پایین ساخته می شود، نه مستقیما از مشخصه های س

باالی سیستمبه)االبسطحهایمشخصهمی تواندپایینسطحطراحیکهموضوعاینیابیدرستی

جداگانه ایمسئله،کندسازیپیادهرا(Zتوسطشدهتعریفهایمشخصهمثالعنوان.است

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 27

Page 28: Software Fault Avoidance in Implementation

منابع مرتبط

وب سایت رسمی :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

Page 29: Software Fault Avoidance in Implementation

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

Page 30: Software Fault Avoidance in Implementation

نگاه اجمالی

SPARKابزارهای زیر را فراهم می کند:Examiner, Simplifier, Prover

به طور کامل در مرجعHigh Integrity Software by John Barnesتعریف شده است. مشخص شده است که درAda درصد اشکال های موجود در زبان 10تقریباC باقی

(.درصد اشکال ها برطرف شده است90در واقع )مانده است SPARK Ada درصد اشکال های نسخه کامل 10هم تقریباAdaرا دارد.لذا زبان برنامه نویسی موضوع حایز اهمیتی است.

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 30

Page 31: Software Fault Avoidance in Implementation

SPARKتصویر کلی برنامه

17مه 17

Notation ForAnnotations

Language With PreciseSyntax & Semantics

Tools—AppliedDuring

Development

Properties

Correctness by construction

CompilerLinkerLoader

ExecutableSoftware

SoftwareAda + Annotations

مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 31

Page 32: Software Fault Avoidance in Implementation

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

Page 33: Software Fault Avoidance in Implementation

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

Page 34: Software Fault Avoidance in Implementation

تحلیل نحوی

می شودمطمئن می شود برنامه با قواعد زبان کامپایل.

زیر مجموعهSPARK ازAdaو حاشیه نویسی هاگرامر مستقل از متن:

BNF

تحلیل گرهای تولید شده به صورت خودکارگرامر وابسته به متن

تعریف متغیر قبل از استفادهقوانین مربوط به حوزهو غیره

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 34

Page 35: Software Fault Avoidance in Implementation

تحلیل نوع

سیستم نوع داده ای قویکمک به کاهش اشکال هانتایج به اثبات رسیده در عمل

مشخصا به ایجاد مشکل منجر می شودسخت افزارانواع داده ای اولیه موجود در ،:در اصل، انواع داده ای، انواع داده ای ماشین بودند. می شوندناشی برنامه کاربردی، از قواعد معنایی مدرننوع سیستم های.

بهاز که برنامه نویس تعریف می کند باعث انعطاف پذیری می شود اما نیانواع داده ای.بررسی اضافی دارد

قواعد تبدیل نوع باید خیلی دقیق تعریف شوند.ناورانواع محاسباتی نیز مشکل ساز هستند؛ برای مثال تعیین دقیق اعداد ممیز ش.

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 35

Page 36: Software Fault Avoidance in Implementation

تحلیل جریان داده

جریان داده به معنای واقعی عبارت است از حرکت داده به سمت استفاده های آن.مقدار زیادی از داده در بسیاری از سیستم ها:

به مکان اشتباهی می رودبه هیچ جایی نمی رودبه مکان درستی می رود اما خود داده اشتباه است.داده استفاده نمی شود.داده اشتباه استفاده می شود.

ا نمی توان همه اشکال های مربوط به داده را پیدا کرد، اما قطعا کسر بزرگی از آن ها ر.می توان تشخیص داد

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 36

Page 37: Software Fault Avoidance in Implementation

تحلیل جریان داده

مسائل و مشکالت جریان داده عبارت است از: اسامی مستعار(Aliasing )بی نظمی زنجیره های تعریف و استفاده

بی نظمی های مشاهده شده در تعریف و استفاده:استفاده قبل از تعریف (تعاریف پشت سر هم)تعریف و سپس تعریف مجددتعریف و عدم استفاده

پیچیدگی هاساختارهای کنترلی، زیر برنامه ها، همروندی.

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 37

Page 38: Software Fault Avoidance in Implementation

تحلیل جریان کنترلی

اجرای جریان کنترلیمسائل و مشکالت اصلی عبارت است از:

(کدی که کنترل اجرا هرگز به آن نمی رسد)کد مرده بن بست(deadlock ) وlivelocks

(نظیر انحصار متقابل)اشکال های همگام سازی در سیستم های همروند

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 38

Page 39: Software Fault Avoidance in Implementation

(صحت عملکرد)درستی جنبه های عملیاتی

پیش شرط ها توسط(pre-conditions ) پس شرط ها و(post-condition ) مشخص.می شود

شرط های درستی یابی(verification conditions )را می سازد. ا از هستند، آن گاه پس شرط هصحیحاگر بتوان نشان داد شرط های درستی یابی

.پیش شرط ها پیروی می کنند شرط های درستی یابی می توانند در یک سیستم اثبات قضایا(theorem-proving) ،

.ثابت شوند

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 39

Page 40: Software Fault Avoidance in Implementation

یک مثال ساده

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

Page 41: Software Fault Avoidance in Implementation

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

Page 42: Software Fault Avoidance in Implementation

خالصه اثبات

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

Page 43: Software Fault Avoidance in Implementation

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

Page 44: Software Fault Avoidance in Implementation

SPARK Adaخصوصیات

هیچ ابهام زبانی وجود ندارد–صحت منطقی.تعریف صوری نحو و قواعد معنایی منطقی. دارندا ماشین رتوسط بررسیبه طور بهینه قابلیت همه قواعد معنایی زبان –امنیت. اثبات پذیری(Verifiability)

کد معنای کامال دقیقی دارد.امکان اثبات به صورت ریاضی در مورد آن وجود دارد. آزمون گر(Examiner )امکان درستی یابی ماشینی را می دهد:

درستی یابی مشخصه هابرای نشان دادن قابلیت های مفید:

برای مثال، کد وارد استثنا نخواهد شد.

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 44

Page 45: Software Fault Avoidance in Implementation

SPARK Adaخصوصیات

منابع بایستی به صورت ایستا محاسبه شوند–زمان و فضای محدود. برنامه های کاربردی مستحکم صنعتی–قدرت مثال زدنی زبان کاملAdaسیستم زمان اجرای پیچیده ای دارد:

اجرا شود( بدون سیستم عامل)طراحی شده است تا روی ماشین عریان.نیازمند پشتیبان زمان اجرای خاص خود است.

SPARK Adaیک سیستم زمان اجرای کمینه دارد:Taskها حذف شده اند.مدیریت استثنا در کار نیست. نیستنیازی به بررسی سیستم زمان اجرای پیچیده.

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 45

Page 46: Software Fault Avoidance in Implementation

SPARK Adaچه چیزی را به ارث برده است؟

(:اما فقط محدود به این موارد نیست)شامل موارد زیر هست (شمارشی، کاراکتر، بولی، اعشاری، ثابت)انواع داده ای عددیانواع داده ای آرایه و رشتهرکوردهاطیف کامل عبارت ها دستورات(assignment, case, loop, if, exit, procedure call, entry call, return, delay )زیربرنامه ها (یعنی همان کالس ها)بسته هاجداسازی کامل مشخصه ها و پیاده سازیارث بری وظیفه ها شاملentries وentry calls

کامپایل جداگانه

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 46

Page 47: Software Fault Avoidance in Implementation

SPARK Adaچه چیزی را حذف کرده است؟

وظیفه(Task )ها بیشتر امکانات در رابطه با وظیفه ها درSPARK Adaحذف شده اند . کلیاتRavenscarکماکان باقی مانده است.بسیاری از جنبه های وظیفه ها که از اثبات جلوگیری می کرد، حذف شده اند.

استثناها: (. مانع اثبات می شود)جریان کنترل پویای پیچیده استثناها از اثبات جلوگیری می کند

قالب ها(Generics ) (.زیاد مهم نبودند)نداشتند ( اساسی)قدرت بنیادیاثبات در حضور قالب ها پیچیده است.

اشاره گرهاآرایه با ابعاد پویا (ضمنی)انواع بدون نام دستورgoto

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 47

Page 48: Software Fault Avoidance in Implementation

حذف شدند؟SPARK Adaچرا استثناها در

ندزیرا استثناها به طور کلی جریان کنترلی برنامه را بیش از حد پیچیده می کن.زبان قواعد معنایی سخت گیرانهAdaرا در انتشار استثناها تصور کنید!قواعد کلی مربوط به حوزه استثناها را تصور کنید.و از همه مهم تر :

دیک برنامه درست و قابل تایید به هیچ وجه نبایست استثناهای غیر منتظره داشته باش.

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 48

Page 49: Software Fault Avoidance in Implementation

مشکالت استثناها در چیست؟

مشکالت عبارت است از: قواعد معنایی انشعاب دلخواه(arbitrary branch)قواعد معنایی تعیین کنترل کننده استثنامحلی که کنترل کننده استثنا در آن عمل می کندقواعد معنایی خاتمه کنترل کننده استثنااستثنا در وظیفه هاانواع استثناها و محدوده آن ها

بایستی مطمئن شویم با وجود این قواعد سیستم درست عمل می کند.

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 49

Page 50: Software Fault Avoidance in Implementation

حذف شدند؟SPARK Adaدر قالب ها چرا

تندقالب ها نمونه سازی چندگانه را تسهیل می کنند ولی دارای قدرت بنیادی نیس. ( نبه کار گرفت)جمع آوری خواص قالب ها خیلی پیچیده است و نیاز به کمی سازی

.روی انوع مختلف دارد را آزمایش کنیم؟( عام)برای مثال چگونه یک نوع داده ای قالب

لذا درستی یابی جداگانه ی نمونه ها بیان می دارد که آن ها باید کامال جدا باشند و.نیازی به قالب ها احساس نمی شود

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 50

Page 51: Software Fault Avoidance in Implementation

حذف شدند؟SPARK Adaاشاره گرها در چرا

اشاره گرها برای مدیریت پویای حافظه مورد نیاز هستند.تخصیص پویای حافظه یک مسئله واقعی در اتکاپذیری است.

نیازمند اثبات این هستیم که حافظه هرگز در حین اجرا تمام نمی شود.این امر عموما غیر ممکن است.کالتی از افزون بر این نیاز است تا مطمئن باشیم که خرابی حافظه، اشاره گر معلق و مش

.این قبیل رخ نمی دهد که این امر هم در عمل غیر ممکن استی به هر حال بر خالف قالب ها، از قدرت اشاره گرها به این راحتی نمی توان چشم پوش

(مترجم!!! )/کرد

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 51

Page 52: Software Fault Avoidance in Implementation

SPARKهای ( Annotations)حاشیه نویسی

حاشیه نویسی زبانSPARK قوانین و حقوق مختص خود را دارد( مستقل از زبانAda.) شروع می شوند، جاسازی می شود#--در توضیحاتی که با عالمت.SPARK یک زیر مجموعه از زبانAda شده استترکیباست که با حاشیه نویسی!حاشیه نویسی ها موارد زیر را تعریف می کنند:

مشخصه های نرم افزاروابستگی های مورد انتظار بین اقالم داده ای

بنابراین، دو دسته حاشیه نویسی داریم: اثبات(Proof )

جهت اثبات درستی خصوصیات برنامه جریان داده(Data Flow)

منبعکداجزای بین مختلف تارتباطادر مورد هاابزاردادن به آگاهی آسان تر می نمایندرسمی را تشکیل می دهند، درک کد را مشخصه هایحاشیه نویسی هایی که. شوندحاشیه نویسی ها باید قبل از کد اصلی نوشته.

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 52

Page 53: Software Fault Avoidance in Implementation

خالصه حاشیه نویسی ها

--# 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

Page 54: Software Fault Avoidance in Implementation

خالصه حاشیه نویسی ها

--# global

سراسریمشخص می کند که یک متغیر در داخل بسته(global )است.خروجی را نیز مشخص می کند-همچنین مد دسترسی متغیر شامل ورودی، خروجی و ورودی.اغلب اوقات به کار گرفته می شود، یعنی در وابستگی ها نیز ظاهر می شود.

--# ownمشخص می کند که متغیر در بدنه بسته تعریف شده است.آن نماد را برای سایر قسمت های حاشیه نویسی قابل دسترس می کند. شناخته شده استتنها در بدنه و در مشخصه ها شناخته شده نیست متغیر.

--# initializes

اولیه شده استمقداردهی بستهمشخص می کند که متغیر توسط.

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 54

Page 55: Software Fault Avoidance in Implementation

خالصه حاشیه نویسی ها

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

Page 56: Software Fault Avoidance in Implementation

خالصه حاشیه نویسی ها

--# 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

Page 57: Software Fault Avoidance in Implementation

(Loop Invariant)حلقه نامتغیر

--# assert :ادعا می کند عبارت درست است.کاربرد اصلی در تعریف مقادیر مستقل از حلقه دستورSچندبار اجرا می شود؟دفعات اجرای . ایده ای در اختیار نداریمSبستگی به داده ها در طول اجرا دارد.پس چگونه می توانیم هر چیزی را اثبات کنیم؟مقدار مستقل یا نامتغیر:

خود حلقه را مستند سازی می کند، تعداد دفعات تکرار حلقه مهم نیست. است« درست»قبل و بعد از هر اجرای دستورات بدنه حلقه.در حین اجرای دستورات بدنه درست نیست. استعبارت جبری منطقی یک.مقدار عبارت منطقی به تعداد دفعات حلقه بستگی ندارد.محاسبات حلقه را مستند می کند.

17مه 17

while B loop

S;

end loop;

مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 57

Page 58: Software Fault Avoidance in Implementation

حلقهنامتغیرمثالی از

برنامه ساده تقسیم صحیح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

Page 59: Software Fault Avoidance in Implementation

خالصه حاشیه نویسی ها

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

Page 60: Software Fault Avoidance in Implementation

خالصه حاشیه نویسی ها

--# main_programبرنامه اصلی را مشخص می کند.

--# inheritاجازه دسترسی به موجودیت ها در دیگر بسته ها را می دهد.

--# hideمتنی را که قرار نیست مورد آزمایش واقع شود، مشخص می کند.

--# return

پس شرط برای یک تابع

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 60

Page 61: Software Fault Avoidance in Implementation

خالصه

یک زبان برنامه نویسی ساده–SPARK Ada :برای بیش تر برنامه های کاربردی به اندازه کافی قدرتمند است.قواعد آن به شکل صوری تعریف شدهکامپایلرهای با کارامدی بسیار باال برای آن در دسترس است:

تحت گواهی شامل کامپایلرهایRTCA DO-178B level A (FAA)

یک زبان حاشیه نویسی ساده:به اندازه کافی قدرتمند برای بیان مشخصه هایی نظیر:

تمامی جریان داده ها و دسترسی ها در هر برنامه اینیازمندی های عملیاتی همه روال ها و توابع

ابزارهایی برای اثبات خودکار یک قضیه اساسی :Actual code => low-level specification

درستی از طریق ساخت: الگوی توسعه نرم افزار جدید

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 61

Page 62: Software Fault Avoidance in Implementation

مراجع

[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

Page 63: Software Fault Avoidance in Implementation

شمابا تشکر از توجه

[email protected]

Page 64: Software Fault Avoidance in Implementation

هم پاسخ به تمرین ها و مسائل پایان فصل ن

Page 65: Software Fault Avoidance in Implementation

1تمرین

دو نوع تحلیل که بر روی برنامه های به درستی حاشیه نویسی شدهSPARK Ada قابلانجام است، کدامند؟

حاشیه نویسی در : پاسخSPARK Adaدو نقش مهم دارد:فاده از که حوزه و ارتباط بین داده ها را در برنامه مشخص می کند و با است: تعریف جریان داده برنامه

.انجام می شودCoreحاشیه نویسی اشیه که صحت عملکرد روال ها و توابع را مشخص می کند و با استفاده از ح: تعریف عملکرد برنامه

.انجام می شودProofنویسی در نتیجه دو نوع تحلیل روی آن قابل انجام است:

به منظور اطمینان از رعایت مقدار دهی ها و وابستگی های داده ای: تحلیل جریان دادهزاربه منظور اطمینان از صحت و درستی مشخصه های پیاده سازی شده نرم اف: تحلیل عملیاتی

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 65

Page 66: Software Fault Avoidance in Implementation

2تمرین

حاشیه نویسیSPARK Ada که وابستگی داده ای را مستند می کند(--# derives)چرا . ن شوداطالعاتی را فراهم می کند که بیش تر آن ها می توانند توسط کامپایلر تعیی

این امر به کامپایلر و یا ابزار مشابه دیگری واگذار نشده است؟د هدف از حاشیه نویسی این است که وابستگی بین داده ها را مستقل از ک: پاسخ

در نتیجه . کنند( Check)نوشته شده مشخص کند به نحوی ابزارها بتوانند آن را بررسی ایده اصلی در اینجا آن است که مهندس مشخص کند جریان داده انتظار می رود

ست توسط که ممکن ا)چگونه باشد و سپس یک ابزار بررسی کند که آیا کد نوشته شده اده را واقعا این جریان د( همان شخصی که حاشیه ها را نوشته است، نوشته شده باشد

وده پیروی می کند یا خیر؟ بنابراین این امر، ابزارها را قادر می سازد تا بتوانند محدرسی شامل مقدار دهی اولیه به متغیرها، دست)وسیعی از خصوصیات کد نوشته شده

(.281ص )را به طور خودکار بررسی کنند ( مناسب به آن ها و غیره

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 66

Page 67: Software Fault Avoidance in Implementation

3تمرین

حلقه نامتغیرقطعه کد زیر را در نظر بگیرید و(Loop Invariant ) را برای آن مشخص.نمایید

پاسخ :

17مه 17 مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی

Pre-conditions: n >= 0

Post-conditions: factorial = n! Loop Invariant: i >= 1 /\ i <= n /\ factorial = (i)!

68از 67

Page 68: Software Fault Avoidance in Implementation

(شکل مرجع اصلی)پیاده سازی بیت ها

17مه 17

Specification

ImplementationIn High Level

Language

RelocatableBinary

Implementation

RelocatedBinary

Implementation

HumansAlgorithms & Data structures

CompilerMachine and Library

Descriptions

Linker & LoaderLibraries

مرتضی ذاکری -اجتناب از خطاهای نرم افزار در پیاده سازی 68از 68