بخشی از مقاله
در این مقاله پس از تعریف مختصر قابلیت اطمینان نرمافزار بهعنوان یکی از مهمترین شاخصه هاي کیفی محصول نرم افزاري و بیان تفاوت دلایل بروز شکست نرمافزارها و سختافزارها، به تأثیر شیوههاي مختلف طراحی بر قابلیت اطمینان نرمافزار پرداخته شده و سه رویکرد عمدهاي که باید در طراحی و برنامه نویسی در نظر داشت تا به سطح بالاتري از قابلیت اطمینان نرمافزار منجر شود مورد بحث قرار میگیرد.
مقدمه
شیوهها و مشخصههاي طراحی نرم افزارها نسبت به سختافزارها، پویایی و انعطافپذیري بیشتر داشته و در عین حال پیچیدگی بالاتري نیز دارند. به همین میزان مباحث کیفی محصولات نرمافزاري که تابعی از شیوة طراحی نیز هستند از پویایی و بالطبع پیچیدگیهاي خاص خود برخوردارند و در عین حال نقاط ابهام و مشکلات خاص خود را دارند. یکی از موارد بسیار مهم در نرمافزارها مبحث قابلیت اطمینان نرمافزار است. قابلیت اطمینان نرمافزار یکی از مهمترین پارامترهاي کیفی نرمافزار بوده و در مباحث مدیریت کیفیت محصولات نرمافزاري از جایگاه مهمی برخوردار است. در اینجا به یکی از مهمترین عوامل تأثیرگذار روي این پارامتر که همان طراحی است بهطور اختصار پرداخته شده است.
قابلیت اطمینان نرمافزار
تعریف جامع و استاندارد قابلیت اطمینان نرمافزار بدین شرح است: »احتمال کارکرد بدون شکست نرمافزار در یک دورة زمانی مشخص و شرایط محیطی معین.« در این تعریف پارامتر قابلیت اطمینان براساس چهار رکن اصلی تعریف شده است:
1. تئوري احتمالات
2. وظیفه مورد انتظار1
3. بازة زمانی مشخص
4. شرایط محیطی معین اگرچه قابلیت اطمینان نرمافزار برطبق تعریف فوق به زمان ربط داده شده است ولی همانند سختافزارها ارتباط مستقیمی با زمان ندارد. قطعات الکترونیکی و مکانیکی با گذشت زمان و یا سیکل کارکردي دچار کهنگی و فرسودگی میشوند ولی نرمافزارها اینگونه نیستند. با اینکه توسعه تئوريهاي قابلیت اطمینان نرمافزار نیز بر پایه دانش قابلیت اطمینان در حوزة سختافزار شکل گرفته است، ولی بین تئوريها، روشهاي آزمون و تکنیکهاي تحلیلی تفاوتهایی وجود دارد که این به تفاوت این دو برمیگردد. نرمافزارها و سختافزارها یک تفاوت اساسی با هم دارند که سازوکار شکست را در آنها متمایز میکند. عیوب سختافزارها عموماً »عیوب فیزیکی«1 بوده ولی عیوب نرمافزارها »عیوب طراحی«2 هستند که غالباً سختتر قابل مشاهده، کلاسبندي، شناسایی و تصحیح هستند. عیوب طراحی تا حد زیادي وابسته به عوامل انسانی و فرایندهاي طراحی هستند که کاملاً قابل شناسایی نیستند. البته در سختافزارها نیز عیوب طراحی وجود دارند ولی غلبه با عیوب فیزیکی است.
»شکست« نرمافزار داراي تعاریف مختلفی است از جمله:
» −اجراي نرمافزار در مسیري ناخواسته« » −انحراف نتایج خروجی نرمافزار از آنچه مورد انتظار بوده است« و ...
آنچه موجب بروز شکست نرمافزار میشود، »عیب« نامیده میشود. تعریف عیب که در نرمافزار باگ هم گفته میشود:
»هرگونه نقص در نرمافزار که احتمال شکست نرمافزار را تحت شرایط خاصی موجب گردد.«
ممکن است یک عیب تحت یک یا چند سري شرایط مختلف باعث شکست نرمافزار گردد ضمن اینکه ممکن است این شرایط هرگز پیش نیایند. بنابراین وجود یک عیب لزوماً باعث شکست نخواهد شد و »عیب« شرط لازم براي »شکست« است نه شرط کافی. دلیل عمدة وجود عیب در نرمافزار نیز بروز »خطا3« از جانب طراحان - یا برنامهنویسان - نرمافزار است.
البته براي خطا میتوان علاوهبر اشتباه طراحان نرمافزار تعریف دیگري نیز درنظر گرفت که آن نیز ممکن است باعث بروز عیب و شکست شود:
»وقوع خطا در سیستم نرمافزاري بر اثر هرگونه ناهمخوانی
æ تفاوت بین مقادیر و شرایط محاسباتی و اندازهگیري شده با مقادیر
æ شرایط صحیح، معین و دقیق علمی.«
تأثیر طراحی بر قابلیت اطمینان
موضوع اصلی این بحث دربارة تأثیرگذاري شیوههاي طراحی نرمافزار بر قابلیت اطمینان آن است؛ زیرا همانند سختافزارها در مورد نرمافزارها نیز ارتباط صریحی بین شیوههاي طراحی و قابلیت اطمینان وجود دارد. از آنجایی که عیوب نرمافزار عمدتاً عیوب طراحی بوده و دلیل اصلی و بهعبارتی لازم براي شکستهاي نرمافزاري هستند، نظارت بر تعداد عیوب ایجادشده در هر مرحله از توسعه نرمافزار و تعداد عیوب منتقلشده به مرحله بعدي توسعه، در فرایند مدیریت قابلیت اطمینان نرمافزار از اهمیت بسزایی برخوردار است. در واقع عیوب باید در تمامی مراحل طراحی و توسعه نرمافزار تحت کنترل بوده و مدیریت شوند. در این راستا توجه به روشهایی که مدیریت عیوب را در فرایند طراحی و توسعه نرمافزار تحت تأثیر قرار میدهند، از اهمیت بسزایی برخوردار است.
در اینجا به برخی روشهاي رایج در طراحی نرمافزار که در راستاي افزایش سطح قابلیت اطمینان کاربرد دارند اشاره میشود:
− تولید نرمافزارهاي ماژولار: از تعدادي اجزاي نرمافزاري مستقل و ساده تشکیل شده است که از طریق واسطهاي متقابلاً سادهاي با هم ارتباط دارند. طراحی و برنامهنویسی این اجزاي ساده و کوچک براي مهندسان آسانتر بوده و احتمال بروز عیوب در آنها کمتر خواهد بود.
− استفاده از اجزاي نرمافزاري قبلاً استفادهشده: اگر در تولید نرمافزار جدید از اجزاي نرمافزاري که قبلاً در سیستم دیگري استفاده شدهاند و امتحان خود را با موفقیت پس دادهاند و به اندازة کافی مناسب طرح جدید نیز هستند، استفاده شود احتمال بروز خطا و ایجاد عیوب بسیار کمتر خواهد بود.
− آزمونهاي واحد و یکپارچه: آزمون هاي مختلف مهمترین نقش را در هر مرحله از توسعه براي جلوگیري از گسترش عیوب به مراحل بعدي دارند. بنابراین انجام آزمونهاي مناسب براي هرکدام از اجزاي نرمافزار بهصورت جداگانه و همچنین براي کل نرمافزار به صورت یکپارچه اهمیت زیادي دارد.
− نظارت و بازنگري مستمر: با اجراي دائمی و برنامهریزيشدة نظارت و بازنگري بر مراحل مختلف چرخه عمر نرمافزار از قبیل تعریف ملزومات طراحی، طراحی نرمافزار، برنامهنویسی، تدوین دستورالعملهاي استفاده و آزمونها میتوان براي کاهش کاستیها و نواقص، اصلاحاتی را درنظر گرفت.
این کاملاً قابل درك است که هرچه عیوب کمتري در نرمافزار وجود داشته باشد، بالطبع قابلیت اطمینان آن نیز بیشتر خواهد بود. بنابراین طراحان و توسعهدهندگان نرمافزار باید با اتخاذ سه رویکرد ذیل - گاهی بهطور همزمان - در جهت کاهش عیوب و افزایش سطح قابلیت اطمینان نرمافزار گام بردارند:
1. هرچه بیشتر از بروز عیوب در نرمافزار جلوگیري کنند - اجتناب از عیوب. - 1
2. نرمافزار را به نحوي توسعه دهند که در صورت بروز عیوب توان تعمیرپذیري و اصلاح داشته باشد - حذف عیوب. - 2
3. نرمافزار را در برابر عیوب احتمالی مقاوم کنند - تحمل عیوب. - 3
به همین جهت در طراحی سیستمهاي قابل اطمینان صرفنظر از انجام هرگونه تحلیل قابلیت اطمینان، توجه به سه رویکرد فوق میتواند بسیار کارساز باشد. در ادامه به شرح کاملتري از این سه رویکرد اساسی پرداخته می شود:
.1 اجتناب از عیوب
اولین رویکرد در طراحی نرمافزار، کاهش احتمال ورود عیوب به نرمافزار است. تعریف ساختار نرمافزار در هر مرحله از طراحی باید با تعیین مشخصات دقیق اجزاي طراحی در آن مرحله تکمیل شود. براي رسیدن به سطح قابلیت اطمینان موردنظر باید از همان ابتداي طراحی، قابلیت اطمینان را هدف طراحی قرار داد. البته قابلیت اطمینان نمیتواند مشخصه طراحی باشد بلکه میتواند بستگی به دیگر مؤلفههاي کیفی طراحی نظیر قابلیت درك4، قابلیت بررسی5، تغییرپذیري6 و پیچیدگی7 داشته باشد.
در این رویکرد در راستاي پیشگیري بروز عیوب در نرمافزار، توجه به موارد ذیل ضروري است:
− دستیابی به یک نرمافزار قابلاطمینان بستگی به اعتبارسنجی8 مستمر در طول دورة توسعه آن دارد و فرایند اعتبارسنجی زمانی آسانتر خواهد بود که واحدهاي مختلف طراحی مستقلتر بوده و ارتباط کمتري با دیگر واحدها داشته باشند.
− تحلیل استاتیک طراحی میتواند ابزار بسیار مؤثري در یافتن عیوب طراحی باشد. اگر گذر از هر مرحله طراحی به مرحله بعدي کاملاً شفاف و بدون ابهام باشد این تحلیل کاملتر و سادهتر اجرا میشود و احتمال کشف عیوب و خطاهاي طراحی نیز بیشتر خواهد بود.
− اصلاح عیوب یک زیرسیستم نرمافزاري در یک سیستم با اجزاي مستقل منجر به کمتر شدن احتمال بروز عیوب جدید در دیگر زیرسیستمها میشود.
2. حذف عیوب
علاوهبر اینکه باید از بروز عیوب و خطاهاي طراحی در نرمافزار اجتناب کرد براي رسیدن به یک نرمافزار باکیفیتتر و قابلاطمینانتر لازم است تا با نظارت مستمر و یافتن عیوب در هر مرحله در راستاي حذف آن و اصلاحات لازم اقدامات مؤثر انجام گیرد. در این رویکرد، ردیابی عیوب را میتوان به درستی همان آزمونهایی نامید که در طول دورة توسعه انجام میگیرند. توسعه یک نرمافزار طی چندین فاز مختلف انجام میگیرد. در انتهاي هر فاز بسیار مهم است تا عیوب و نواقص نرمافزار به حداقل کاهش یافته و محصول آن فاز به بعدي منتقل شود. تصحیحات، ممکن است به دوبارهکاريهاي زیادي نیاز داشته باشند زیرا باید مشکلات و عیوب را ردیابی کرده و ریشه آن را در مراحل قبلی یافته و دوباره مراحل توسعه را با اصلاحات لازم انجام داد. بنابراین هرچه در فازهاي انتهاییتر کار کشف و حذف عیوب دنبال شود پرهزینهتر و پردردسرتر خواهد بود. به همین جهت بهتر است از همان مراحل ابتدایی طراحی و توسعه فرایند، کشف و حذف عیوب با دقت کافی و تلاش مستمر دنبال شود تا عیوب در همان مراحل اولیه حذف شده و هزینه اصلاح در مراحل پایانی کاهش یابد.
در آزمونهایی که در این رویکرد مورد استفاده قرار میگیرند، دو اصطلاح متداول ارزیابی9 و اعتبارسنجی بسیار استفاده میشوند. تفاوت ظریف این دو مفهوم را میتوان بدین شرح بیان کرد:
− ارزیابی: آزمودن آنکه آیا سیستم بهدرستی توسعه یافته است؟
− اعتبارسنجی: آزمودن آنکه آیا سیستم بهدرستی توسط طراحان توسعه داده شده است؟ در هر فاز از توسعه، محصول آن فاز براساس ملزومات10
اعمالشده بر آن فاز مورد آزمون قرار میگیرد. بنابراین بسیار مهم است که ملزومات تعریفشده، آزمونپذیر باشند یعنی هر ملزوماتی باید در خود ابزاري را نیز براي ارزیابی تطابق فرایند توسعه آن فاز با