روش ترکیبی در واقع ترکیبى از دو روش قبل است. در این روش هم از افزونگی غیرفعال و هم از افزونگی فعال استفاده می شود. این روش کامل تر از دو روش قبلى است و تحلیل آن پیچیده تر است.
در این روش ترکیبى از NMR و استفاده از پشتیبان را خواهیم داشت. به این شکل که n تا از ماژولها به یک رای دهنده می روند، و اگر نتیجه یکی از آنها خطا داشته باشد، یک پشتیبان جایگزین آن ماژول خراب می شود. محاسبه قابلیت اطمینان در سیستم های ترکیبی به نسبت پیچیده است و با روشهای معمول به سادگی انجام نمی پذیرد. بهترین روش برای این کار استفاده از مدل مارکف است.
(( اینجا فقط تکه ای از متن درج شده است. برای خرید متن کامل فایل پایان نامه با فرمت ورد می توانید به سایت feko.ir مراجعه نمایید و کلمه کلیدی مورد نظرتان را جستجو نمایید. ))
شکل ۱۶ افزونگی ترکیبی
در روش ترکیبی هم چون دارای بخشی برای تشخیص خطا میباشد قابلیت استفاده دارد.
تحملپذیری خطای نرمافزاری
پیچیدگی باعث ایجاد نقص های نرمافزاری در سیستم های کامپیوتری می شود. تحملپذیری خطای نرمافزاری به دلیل اینکه ما در تولید نرم افزارهای بدون اشتباه ناتوان هستیم، مورد نیاز است. با وجود اعمال روشهایی برای کنترل وکاهش نقص های نرمافزاری، همچنان نقص هایی در نرم افزار نهفته می ماند و در عمل خود را نشان میدهند . تنها روش مقابله با این نقص ها و عوارض ناشی از آن استفاده از تاکتیکهای تحملپذیری خطای نرمافزاری است. این تاکتیک ها روی مولفه هایی اعمال می شوند که نقص های طراحی آنها ناشی از پیچیدگی شان است. با افزایش پیچیدگی نرم افزار احتمال به وجود آمدن نقص های طراحی نرم افزار بیشتر می شود. با آنکه استفاده از روش های پیشگیری از به وجود آمدن نقص های نرمافزاری مانند روش های مهندسی نرم افزار و آزمون نرم افزار در کاهش آنها موثر است اما همواره نقصهایی در نرم افزار نهفته می ماند که به هنگام عملیاتی شدن نرم افزار بروز می کنند. تحملپذیری خطای نرمافزاری می تواند در لایه های مختلف نرم افزار یا ساختارهای نرمافزاری از قبیل سیستم عامل، برنامه های کاربردی، فرآیندها، اشیاء، توابع و متدها فراهم شود.
تحملپذیری خطای نرمافزاری می تواند به دو گروه تقسیم شود: تاکتیکهای نرمافزاری تک نسخهای و چند نسخهای. تاکتیکهای تک نسخهای با پیاده سازی یک نسخه از نرم افزار خطاهای نرمافزاری را تحمل می کنند . تاکتیکهای تک نسخهای معمولاً از تکنیک های بازگشت به عقب، بازگشت به جلو و همچنین از افزونگی زمان و افزونگی اطلاعات استفاده می کنند. مثال هایی از تاکتیکهای تک نسخهای شامل کشف خطا، نقاط چک شده و شروع مجدد می باشد .
تاکتیکهای چند نسخهای، دو یا تعداد بیشتر از نسخه های نرم افزار را به صورت سریالی یا همروندی اجرا می کنند. این نسخه ها به وسیله گوناگونی طراحی از قبیل تیم های برنامهنویسی مختلف یا الگوریتم های مختلف با هدف جلوگیری از خطاهای طراحی ایجاد می شوند. تاکتیکهای چند نسخهای معمولاً خیلی پر هزینه هستند لذا آنها بیشتر سیستم های ایمنی-بحرانی استفاده می شوندمانند سیستم های کنترل پرواز .
شکل ۱۷ تاکتیکهای تحملپذیری خطای نرمافزاری
تاکتیکهای تحملپذیری خطای نرمافزاری تک نسخهای
تاکتیکهای نرمافزاری تک نسخهای به یک واحد نرمافزاری، قابلیت ها و توانایی هایی را اضافه می کنند که در یک محیط عاری از نقص غیرضروری است و سیستم را در مقابل نقص های نرمافزاری بعد از مرحله طراحی و ساخت تحمل پذیر می کنند. این تاکتیک ها با رخداد یک نقص، مکانیزم هایی را به نرم افزار ارائه می دهند که از رخداد هرگونه خرابی سیستم و انتشار آن جلوگیری می کنند. تاکتیکهای تحملپذیری خطای نرمافزاری تک نسخهای به سه گروه آشکارسازی نقص[۸۳]، محدودسازی نقص [۸۴]و بازیابی نقص[۸۵] تقسیم می شوند.
آشکارسازی نقص
هدف از آشکارسازی نقص در نرم افزار تشخیص رخداد نقص در سیستم است. تاکتیکهای تک نسخهای معمولا انواع مختلفی از آزمون های پذیرش را به منظور آشکارسازی نقص به کار می برند. خروجی نرم افزار در معرض آزمون پذیرش قرار می گیرد، اگر نتیجه آزمون موفقیت آمیز بود برنامه به اجرای خود ادامه میدهد. در غیر اینصورت آن خروجی به عنوان رخداد نقص شناخته می شود. تکنیک های موجود شامل بررسی های زمانی[۸۶]
، بررسی های کد[۸۷] ، بررسی های معکوس[۸۸]، بررسی های منطقی[۸۹] و بررسی های ساختاری[۹۰] می باشد.
کاربرد بررسی های زمانی در سیستم هایی است که مشخصات آنها شامل محدودیت های زمانی می باشد. بر مبنای این محدودیت های زمانی، فرایند بررسی کردن، انحراف از رفتار مورد نیاز سیستم را نشان می دهد . بطور مثال، تایمر نگهبان[۹۱] نمونه ای از بررسی های زمانی است. تایمر نگهبان به منظور نمایش کارایی یک سیستم و آشکارسازی نقص های آن بکار می رود. بررسی های کدینگ در سیستم هایی استفاده می شود که اطلاعات در آن سیستم ها با بهره گرفتن از تکنیک های افزونگی اطلاعات رمزنگاری می شوند. مثلا کدهای محاسباتی به منظور آشکارسازی خطاها در عملیات محاسباتی مورد استفاده قرار می گیرند. این بررسی ها در نمایش اطلاعات، از افزونگی استفاده می کنند. آشکارسازی خطا بر مبنای بررسی های میان اطلاعات اصلی و افزونه قبل و بعد از عملیات می باشد. بطور مشابه، بسیاری از تکنیکهای سخت افزاری در نرم افزار هم استفاده می شوند. بسیاری از عملیات حسابی، بعضی از ویژگی های خاص میان اطلاعات اصلی و افزونه را حفظ می کنند، بنابراین می توانند استفاده از این نوع بررسی را برای آشکارسازی خطاهایشان در هنگام اجرا فعال کنند. در برخی از سیستم ها، ممکن است که مقادیر خروجی معکوس شود و مقادیر ورودی متناظر محاسبه گردد. برای چنین سیستم هایی بررسی های معکوس می تواند اعمال گردد. این روش ورودی های واقعی سیستم را با ورودی های محاسبه شده مقایسه می کنند. نقص در صورت عدم تطابق آشکار می شود. بررسی های منطقی، ویژگی های مفهومی داده را برای آشکارسازی نقص بکار می برند )از قبیل محدوده داده، نرخ تغییر و ترتیب). این ویژگی ها بر مبنای نیازمندی ها یا طراحی ویژه یک ماجول می باشند . بررسی های ساختاری از ویژگیهای ساختاری داده استفاده می کنند. بطور مثال برای تعدادی از عنصرهای یک ساختار می توان لیست ها، صف ها و درخت ها، پیوندها و اشار ه گرها را بررسی و صحت سنجی نمود. با اضافه کردن داده افزونه به یک ساختار داده می توان بررسی ساختار ی را اعمال نمود .
مثلا افزودن شمارنده روی تعداد عناصر های موجود در یک لیست یا افزودن اشار ه گرهای اضافی.
محدودسازی نقص
محدودسازی نقص در نرم افزار با اصلاح ساختار سیستم و اعمال محدودیت هایی در سیستم بدست می آید . برای محدودسازی نقص چهار تکنیک وجود دارد که عبارتند از : ۱-پیمانه بندی[۹۲] ، ۲-تفکیک سازی[۹۳]،۳- محصورسازی سیستم[۹۴] و ۴-. عملیات اتمیک[۹۵]
معمولا یک سیستم نرمافزاری به واحدهایی تجزیه می گردد که یا وابستگی بین آنها وجود ندارد و یا وابستگی کمی وجود دارد. مقوله پیمانه بندی توسط محدودسازی ارتباط میان واحدها از انتشار نقصها جلوگیری می کند بین واحدهای مستقل از هم توسط تفکیک سازی واحدار ساختار نرم افزار به صورت ابعاد افقی و عمودی انجام می گیرد.
تفکیک به صورت افقی، عملکرد اصلی نرم افزار را به شاخه ای مستقل از هم مجزا میکند . اجرای عملیات و ارتباط میان واحدها توسط واحدهای کنترلی صورت می گیرد. تفکیک به صورت عمودی عملیات پردازشی و کنترلی را در یک ترتیب بالا به پایین توزیع می کند. واحدهای سطح بالا معمولا روی عملیات کنترلی متمرکز شده و واحد های سطح پایین فرایند پردازش را اجرا میکنند. تکنیک محصورسازی سیستم بر مبنای این اصل است که هیچ عملیاتی مجاز نیست مگر آنکه صریحاً اجازه داده شود. در یک محیط با محدودیت های زیاد و کنترل شدید، تمامی تعاملات بین اجزای سیستم قابل رویت است بنابراین مکان یابی نقص و از بین بردن آن براحتی صورت میگیرد.
بازیابی نقص[۹۶]
زمانی که نقصی آشکار می شود و در سیستم محدود می گردد، سیستم سعی می کند خود را از وضعیت معیوب بازیابی کند و مجدداً خود را به وضعیت عملیاتی اولیه بازگرداند. تکنیک های بازیابی وضعیت سیستم را زمانی که خطایی در برنامه رخ می دهد، به یک وضعیت درست و عاری از خطا تبدیل میکنند و به دو روش بازگشت به عقب [۹۷] و بازیابی به جلو این کار را انجام میدهند.
در بازیابی به عقب زمانی، فرایند عقب کشیدن سیستم به وضعیت ذخیره شده قبلی صورت می گیرد . معمولا فرض می شود که وضعیت ذخیره شده قبلی، قبل از اینکه نقص خود را نشان دهد صورت گیرد. یعنی وضعیت قبلی عاری از خطا می باشد. اگر وضعیت قبلی عاری از خطا نباشد همان خطا باعث رخداد مشکلاتی در فرایند بازیابی می شود .
حالت های سیستم در نقاط بازیابی از قبل تعیین شده ای ذخیره می شود. ضبط یا ذخیره این وضعیت قبلی را نقاط بررسی شده[۹۸] می نامند. این حالت باید در حافظه پایداری وارسی شود که تحت تاثیر هیچگونه خرابی قرار نگیرد . روش بازیابی به عقب کاربردی ترین تکنیک بازیابی برای تحملپذیری خطای نرم افزار می باشد.
در بازیابی رو به جلو[۹۹] این وضعیت با پیدا کردن یک وضعیت جدید که از آنجا سیستم می تواند به عملیات خود ادامه دهد، صورت می گیرد. این وضعیت می تواند یک مدل تنزل یافته و عاری از نقص قبلی باشد. در این نوع بازیابی از جبران خطا استفاده میشود. جبران خطا بر مبنای یک الگوریتمی است که از افزونگی استفاده میکند.
تاکتیکهای تحملپذیری خطای نرمافزاری چند نسخهای
تاکتیکهای چند نسخهای، دو یا چند نسخه از یک واحد نرمافزاری را به کار می برند که تحت عنوان تکنیک های گوناگونی طراحی نیز مطرح می شوند. به عنوان مثال به کارگیری تیم های مختلف کاری، زبان های کدینگ مختلف، یا الگوریتم های متفاوت باعث می شوند که تمامی نسخه های نرم افزار نقص های یکسانی نداشته باشند .
طبقه بندی کلی از تکنیکهای گوناگونی طراحی شامل ۱-تاکتیک بلوکهای بازیابی[۱۰۰] ۲-برنامهنویسی چند نسخه ای[۱۰۱] ۳- بلوک های بازیابی توزیعشده[۱۰۲] ۴-برنامهنویسی خود بررسی[۱۰۳] ۵-بلوکهای بازیابی اجماعی[۱۰۴] و رای گیری پذیرش[۱۰۵] میباشد.
گوناگونی طراحی[۱۰۶]
خطاهای طراحی و پیاده سازی تنها با تکرار واحدهای نرمافزاری یکسان قابل آشکارسازی نیستند. زیرا خطای رخ داده ممکن است در هر نسخه از نرم افزار اتفاق افتد. یک راه حل برای تشخیص این نوع خطاها، استفاده از گوناگونی در نرم افزار می باشد. روش پایه برای افزودن گوناگونی آن است که یک مشخصات نیازمندی سیستم به چند تیم مستقل برنامهنویسی داده شود تا گونه ها را به طور جداگانه توسعه دهند. نتیجه این کار ایجاد مولفه های نرمافزاری با وظایف یکسان خواهد بود. به مولفه های نرمافزاری افزوده شده گونه یا نسخه می گویند . هدف گوناگونی در مولفه های نرمافزاری آن است که احتمال خرابی های مشابه و با یک منشأ کمتر شود . برای استفاده از مولفه های نرمافزاری
گوناگون، لازم است نوعی داوری روی نتایج قابل قبول گونه ها اعمال شود. مولفه ای که این کار را انجام می دهد داور خوانده می شود که معمولاً بر اساس سیستم رأیگیری این کار را انجام میدهد.
در صورتی که گونه ها کاملاٌ به طور مستقل طراحی شده باشند با یک داوری ساده و کارآمد می توان به طور موثری نقص های طراحی را تحمل پذیر کرد. با وجود این در عمل به علت آنکه طراحی کاملاٌ مستقل انجام نشده و هزینه آن بالاست، در مواردی که نیاز به قابلیت اطمینان بالایی وجود داشته باشد از طراحی کاملاٌ مستقل استفاده می شود . با آنکه هزینه گوناگونی طراحی بالا است ولی مطالعات نشان می دهد که هزینه طراحی گونه دوم به اندازه ۱۰۰ درصد اضافه نمی شود، بلکه در حدود ۷۰ الی ۸۵ درصد نسبت به هزینه طراحی اول افزایش پیدا میکند. علت این نتیجه آن است که با آنکه بخشهایی از مراحل توسعه نرم افزار به طور جداگانه برای هر گونه انجام میگیرد ، ولی فرایند هایی وجود دارد که برای کل سیستم یکبار انجام می گیرد مانند تعیین مشخصات فنی، طراحی سطح بالا و آزمونهای سیستمی.
بلوکهای بازیابی
تاکتیک بلوکهای بازیابی(RCB) ترکیبی از روش شروع مجدد و نقاط چک شده همراه با افزونگی است. ساختار اصلی در شکل ذیل نشان داده شده است. نسخه های ۱ تا nنشان دهنده پیاده سازی های مختلف از یک برنامه میباشد.
تنها یکی از نسخه ها خروجی سیستم را تولید می کند. اگر خطایی توسط آزمون پذیرش(AT). آشکار شود، سیگنال سعی مجدد به سوئیچ ارسال می شود. در این صورت سیستم به وضعیت ذخیره شده در حافظه نقطه چک شده بر می گردد و سوئیچ نسخه دیگری از واحد را اجرا می کند. نقاط چک شده قبل از اجرای هر نسخه ایجاد می شوند. بررسی های مختلفی در آزمون پذیرش نسخه فعال واحد صورت می گیرد. فرایند بررسی کردن یا در خروجی یک واحد اعمال می گردد یا برای افزایش اثربخشی آشکارسازی نقص بصورت توکار در کد برنامه قرار میگیرد.[۱۰۷]
شکل ۱۸ مدل بلو کهای بازیابی
برنامهنویسی چند نسخهای
تاکتیک برنامهنویسی چندنسخهای( NVP) مشابه افزونگی سخت افزاری N-Modular است. نمودار بلوکی این تاکتیک در شکل ذیل نشان داده شده است. این نمودار بلوکی شامل n تا پیاده سازی مختلف نرمافزاری از یک واحد می باشد که بطور همزمان اجرا می شوند. تمامی نسخه ها یک وظیفه را ولیکن با روش های متفاوت انجام می دهند. الگوریتم انتخاب در این نمودار بلوکی تصمیم می گیرد که کدام یک از جواب ها درست است و جواب درست را به عنوان نتیجه ای از اجرای واحدها بر میگرداند. الگوریتم انتخاب معمولا به عنوان یک رأی گیرنده عمومی پیاده سازی می شود.
شکل ۱۹ تکنیک برنامهنویسی چند نسخهای
برنامهنویسی خود بررسی
برنامهنویسی خود بررسی(NSCP) ترکیبی از تاکتیکهای بلوکهای بازیابی و برنامهنویسی چندنسخهای است. فرایند بررسی کردن یا توسط آزمون های پذیرش و یا فرآیندهای مقایسه صورت می گیرد. برنامهنویسی خود بررسی به کمک آزمون های پذیرش در شکل ۱۳ نشان داده شده است. نسخه های مختلف از واحدهای برنامه و آزمون های پذیرش مستقل از نیازمندی های عمومی طراحی شده است. فرایند بررسی کردن یا منحصر به فرد برای هر نسخه به صورت توکار در کد برنامه به کار می رود و یا در خروجی اعمال می شود. تنها تفاوت اصلی این تاکتیک با تاکتیک بلوکهای بازیابی، در استفاده از آزمونهای مجزا برای هر نسخه است. اجرای هر نسخه می تواند به صورت سریال و یا به صورت همزمان انجام گیرد. در هر دو مورد خروجی از نسخه های با اولویت بالا که از مرحله آزمون پذیرش خود عبور کرده اند،گرفته می شود.