کتاب های مرتبط
حتما تاکنون در زمينههاي مختلف مهندسي با واژههايي همانند اشکال، خطا، خرابي، نقص، شکست و مفاهيمي از اين دست برخورد کردهايد. بديهي است که تمامي اين مفاهيم بار معنايي نامطلوب و منفي دارند و در کتابها و مستندات علمي معمولا تفاوت چنداني در استفاده از يکي از اين واژگان بطور خاص وجود ندارد. اما هنگامي که بحث در مورد اتکاپذيري، تحملپذيري اشکال، قابليت اعتماد و مواردي از اين قبيل است، کاملا استفاده از هر يک اين واژگان بار معنايي متفاوتي دارد و هر يک را بايد دقيقا در مکان مناسب خود بکار برد. مبتني بر اين اهميت، در اين فصل قصد بر اين است تا در مورد مفاهيم پايهاي صحبت کنيم.
اتکاپذيري[1] يک ويژگي تجميعي سيستمي است. بدين معني که خود ويژگيهاي ديگري را دربرميگيردکه از جملة اين ويژگيها عبارتند ازقابليت اطمينان[2]، قابليت در دسترس بودن[3]، ايمني[4]، امنيت[5]، قابليت احيا، قابليت نگهداري[6]. در اين فصل بر روي سه جنبه از مفهوم اتکاپذيري صحبت ميکنيم:
الف)تهديدها[7] هماننداِشکال[8]ها، خطا[9]ها و خرابي[10]ها
ب)صفتها[11]که عبارتند از قابليت در دسترس بودن، قابليت اطمينان، ايمني، محرمانگي[12]، جامعيت[13] و قابليت نگهداري.
ج)ابزارها[14]: روشهاي پيشگيري از اشکال[15]، روشهاي تحملپذيري اشکال[16]، روشهاي برداشتن اشکال[17] و روشهاي پيشبيني اشکال[18]
اين توصيف را ميتوان در درخت اتکاپذيري مشاهده نمود که در شکل 1-1 نشان داده شده است.
شکل 1-1 درخت اتکاپذيري
سيستمهاي محاسباتي با 5 ويژگي پايهاي مشخص ميگردند:
همانگونه که مشاهده ميشود، اتکاپذيري يکي از مشخصههاي اصلي هر سيستم محاسباتي و کامپيوتري است. در اينجا اولين تعريف از مفهوم اتکاپذيري را ارائه ميکنيم:
"اتکاپذيري يک سيستم محاسباتي، توانايي تحويل سرويس به گونهاي است که آن سرويس قابل اعتماد باشد."
سرويستحويل داده شده توسط يک سيستم، رفتاري است که کاربر و يا کاربران آن سيستم، از آن انتظار دارند. يک کاربريک سيستم ديگر است (که خود ميتواند يک شخص و يا يک سيستم ديگر باشد)، که با واسط سرويس در تعامل است. کارکرديک سيستم، چيزي است که سيستم قصد دارد تا انجام دهد که اين کارکرد در مشخصههاي کارکردي سيستم توصيف ميشود. هنگامي سرويس صحيح ارائه ميشود که سرويس، کارکرد سيستم را پيادهسازي کند. يک خرابي سيستمي، رويدادي است که زماني اتفاق ميافتد که سرويس از حالت ارائة سرويس صحيح منحرف ميشود. بنابراين يک خرابييک گذر از ارائة سرويس صحيح به سرويس ناصحيح است. به عبارتي اين که کارکرد سيستم پيادهسازي نشود. تحويل سرويس ناصحيح را قطعي[23] سيستم نيز ميگويند. يک گذر از سرويس ناصحيح به سرويس صحيح را بازيابي سرويس[24] ميگويند. برمبناي تعريفي که از خرابي ارائه شد، يک تعريف مکمل براي اتکاپذيري سيستم عبارتست از:
"توانايي سيستم در اجتناب از خرابيهايي که تعداد رخداد آنها يا شدت آنها و يا بازة زماني خرابي آنها از حد قابل قبول بيشتر باشد".
1-2-1 تهديدها: اشکالها، خطاها و خرابيها
يک سيستم به دلايل متفاوتي ممکن است خراب شود. براي مثال ممکن است مشخصههاي مورد نياز به خوبي برآورده نشوند و يا اين که اين مشخصهها به خوبي توصيف نشده باشند. يک خطا (که در اين کتاب ما آن را به عنوان ترجمة واژه Error استفاده ميکنيم)، يک بخش از حالت سيستم است که ممکن است منجر به خرابي شود (در اين کتاب، خرابي به عنوان ترجمة واژة Failure استفاده ميشود.). يک خرابي زماني رخ ميدهد که يک خطا به واسط سرويس برسد و سرويس را تغيير دهد. يک اشکال رخدادي است که علت رخداد خطا ميباشد (در اين کتاب، اشکال به عنوان ترجمة واژه Fault استفاده ميشود). ميتوان از يک نقطه نظر، اشکال را به دو دستة کلي تقسيمبندي نمود. اشکال ميتواند يا فعال[25] باشد و يا خوابيده[26] در سيستم. يک اشکال زماني فعال است که خطايي را توليد کند. در غير اينصورت اشکال را خوابيده ميگويند.
يک سيستم همواره به يک روش خراب نميشود. اين روشهاي مختلف خراب شدن سيستم را مدهاي خرابي ميگويند که ميتوان آنها را بر مبناي شدت خرابيها دستهبندي نمود. اين مدها، سرويس ناصحيح را از چهار نقطه نظر کلاسبندي ميکنند:
- دامنة خرابي[27]
- کنترلپذيري خرابي[28]
- سازگاري خرابيها[29] در هنگامي که يک سيستم دو و يا بيشتر کاربر دارد
- عواقب خرابيها[30] بر روي محيط
شکل 1-2، مدهاي خرابي را بر مبناي اين چهارنقطه نظر نمايش ميدهد.
شکل 1-2 مدهاي خرابي
يک سيستم مجموعهاي از مولفههايي است که با هم تعامل ميکنند. بنابراين حالت سيستم، مجموعهاي از حالتهاي مولفههاي آن است.
از نقطه نظر دامنه، خرابيها را ميتوان به دو دسته خرابيهاي مقداري[31]و خرابيهاي زمانيتقسيمبندي نمود. خرابيهاي مقداري، خرابيهايي هستند که در نتيجة آنها مقدار و محتوايي که سيستم بايستي توليد کند دچار خرابي ميشود. براي مثال يک موتور جستجو را تصور کنيد که شما يک عبارت جستجو را در آن وارد ميکنيد و موتور عبارتي ديگر را براي شما برميگرداند. خرابيهاي زماني، خرابيهايي هستند که در نتيجة آنها، زمانبندي سيستم دچار خرابي ميشود. به عبارتي ديگر سيستم طبق سناريوي زماني خود عمل نميکند، حتي اگر مقدار و يا محتواي صحيح را توليد کند. براي مثال همان موتور جستجو را تصور کنيد که شما يک عبارت جستجو را وارد کردهايد، اما موتور پس از گذشت مدت زمان زيادي خروجي را توليد کند. بديهي است که پس از گذشت اين مدت زمان، حتي اگر خروجي صحيح نيز باشد، ديگر مطلوب شما نخواهد بود و يا نياز به توليد خروجيها در سيستمهاي بيدرنگ. بنابراين، اين دسته از خرابيها بيشتر در سيستمهاي بيدرنگ[32] معني پيدا ميکنند.
از نقطه نظر کنترلپذيري، خرابيها را ميتوان به دو دستة کنترل شده[33] و کنترل نشده[34] تقسيمبندي کرد. بديهي است خرابيهاي کنترل شده، خرابيهايي هستند که پس از رخداد در حيطة کنترل کاربر و يا سيستم هستند. حريق درختي را تصور کنيد که پس از رخداد اين حريق بتواند آن را اطفا نمود. اما يک خرابي کنترلنشده پس از رخداد در حيطة کنترل نيست. براي مثال حريق درختي که منجر به حريق جنگلي شود ديگر تحت کنترل نيست.
از نقطه نظر سازگاري، خرابيها را ميتوان به دو دستة خرابيهاي سازگار[35] و خرابيهاي ناسازگار[36] تقسيمبندي نمود. اين دستهبندي را ميتوان با توجه به اين مساله که کاربران سرويس، چگونه مدهاي خرابي را مشاهده ميکنند، مطرح نمود. خرابيهاي سازگار، خرابيهايي هستند که تمامي کاربران از آنها درک يکساني دارند. براي مثال، خرابيهاي کارايي[37]از اين دسته خرابيها هستند. اما در خرابيهاي ناسازگار، کاربران متفاوت، درک مختلفي را از خرابي سيستم دارند.
در سه جنبة گذشته، تقسيمبندي خرابيها بصورت دو کلاسه بود. اما خرابيها از نقطه نظر عواقبي که ممکن است داشته باشند، طيفي را دربرميگيرند. عواقب خرابيها ميتواند ناچيز، قابل توجه، مهم و فاجعهبار باشد.
خطاها را بطور کلي ميتوان به دو دسته تقسيمبندي نمود: خطاهاي تشخيص داده شده[38] و خطاهاي معوق[39].يک خطا، زماني تشخيص داده شده است که حضور آن توسط يک پيغام خطا و يا سيگنال خطا اعلان شود. خطاهايي که حضور دارند، اما تشخيص داده نميشوند، خطاهاي معوق ناميده ميشوند.
اشکالها و علل رخداد آنها بسيار متفاوت است. ميتوان در شکل 1-3، يک دستهبندي از اشکال را مشاهده نمود.
شکل 1-3 يک دستهبندي نمونه از اشکال
از نقطه نظر فاز رخداد و يا ايجاد اشکال[40]، اشکالها را ميتوان به دو دستة اشکالهاي طراحي[41] و اجرايي[42] تقسيمبندي نمود. اشکالهاي طراحي، اشکالهايي هستند که در حين طراحي سيستم توسط طراح سيستم بصورت ناخودآگاه يا تعمدي رخ ميدهند. اشکالهاي اجرايي، اشکالهايي هستند که در حين اجراي سيستم، پس از اتمام طراحي رخ ميدهند.
از نقطه نظر مرزهاي سيستمي، اشکالها را ميتوان به دو دستة اشکالهاي داخلي[43] و خارجي[44] تقسيمبندي نمود. اشکالهاي طراحي، اشکالهايي هستند که علت رخداد آنها در داخل سيستم است. براي مثال اشکالهاي طراحي خود نمونهاي از اشکالهاي داخلي هستند. در حالي که اشکالهاي خارجي، اشکالهايي هستند که علت رخداد آنها از بيرون سيستم است. براي مثال نويزي که از بيرون سيستم بر سيستم اعمال ميشوند و عملکرد سيستم را مختل ميکند، نمونهاي از اين دسته از اشکالهاست.
از نقطه نظر دامنه[45]، اشکالها را ميتوان به دو دستة اشکالهاي سختافزاري[46] و نرمافزاري[47] تقسيمبندي نمود. بديهي است که اشکالهاي سختافزاري، اشکالهايي هستند که علت رخداد آنها بصورت سختافزاري و اشکالهاي نرمافزاري، اشکالهايي هستند که علت رخداد آنها نرمافزاري است.
از نقطه نظر دلايل پديدهشناختي[48]، اشکالها را ميتوان به دو دستة اشکالهاي طبيعي[49] و اشکالهاي دست بشر[50] تقسيمبندي نمود. اشکالهاي طبيعي، اشکالهايي هستند که کاربر انساني هيچ نقشي در ايجاد آنها ندارد. در حالي که اشکالهاي دست بشر به اشکالهايي گفته ميشود که کاربر در ايجاد آنها بصورت مستقيم تاثيرگذار بوده است.
از نقطه نظر تعمد[51]، اشکالها را ميتوان به دو دستة اشکالهاي تصادفي يا غيرمخرب و اشکالهاي تعمدي مخرب تقسيمبندي نمود. بديهي است که اشکالهاي تصادفي، اشکالهايي هستند که قصد و تعمدي در رخداد آنها وجود ندارد؛ در حالي که اشکالهاي تعمدي بصورت قصدي و عامدانه ايجاد ميشوند.
از نقطه نظر تداوم[52]، اشکالها را ميتوان به دو دستة اشکالهاي هميشگي[53] و اشکالهاي گذرا[54] تقسيمبندي نمود. اشکالهاي هميشگي، اشکالهايي هستند که هنگامي که در سيستم رخ ميدهد، تاثير آنها بصورت هميشگي است. براي مثال پين پردازندهاي را تصور کنيد که تحت تاثير اشکالي سوخته باشد؛ بنابراين، اين خرابي بصورت هميشگي است. اما اشکال گذرا در سيستم، تاثير لحظهاي دارد. براي مثال نويزي را تصور کنيد که مقدار رجيستري را در يک پردازنده بصورت لحظهاي تغيير دهد. اما آن رجبستر در اجراي بعدي مقدار صحيح را خواهد داشت.
ترکيب کلاسهاي اشکال که در شکل 1-3 به آنها پرداخته شد، منجر به تشکيل سه بخش بالايي شکل 4 ميشود. برگهاي درخت با هم ترکيب شده و سه کلاس عمده را ايجاد ميکنند: اشکالهاي طراحي[55]، اشکالهاي فيزيکي[56] و اشکالهاي تعاملي[57].
شکل 1-4 کلاسهاي اشکال ترکيب شده
اتکاپذيري، يک مفهوم تجمعي است که شامل صفات پايهاي زير است:
- قابليت در دسترسبودن: آمادگي تحويل سرويس صحيح.
- قابليت اطمينان: تداوم تحويل سرويس صحيح.
- ايمني: عدم حضور عواقب فاجعهبار براي کاربر(ان) و محيط.
- محرمانگي: عدم افشاي بدون مجوز اطلاعات.
- جامعيت: عدم تغييرات حالت سيستمي نامناسب.
- قابليت نگهداري: توانايي تعمير و يا بهبود سيستم.
حال بسته به نوع برنامة کاربردي مورد نظر، وزني که به هر يک از صفات داده ميشود، متفاوت خواهد بود. البته بايستي توجه داشت که افزون بر اين صفات پايهاي، اتکاپذيري صفات ديگري نيز دارد که ترکيبي از يک يا چند صفت پايهاي ذکر شده هستند. براي مثال امنيت[58]وجود همزمان الف) قابليت در دسترس بودن براي کاربران احراز هويت شده ب) محرمانگي، و ج) جامعيت است. مقاوم بودن[59]يک صفت تکميلي ديگر اتکاپذيري است که اتکاپذيري با در نظر گرفتن وروديهاي ناصحيح است. به عبارتي سيستمي را مقاوم ميگوييم که به ازاي ورودي ناصحيح کماکان عملکرد صحيحي را از خود نشان دهد. از جمله نمونههاي ديگر صفات ثانوية اتکاپذيري ميتوان به موارد زير اشاره نمود:
- پاسخگويي[60]: در دسترس بودن و جامعيت هويت شخصي که عملياتي را انجام ميدهد.
- صحت[61]: جامعيت محتوي و فرستندة يک پيام و شايد برخي اطلاعات ديگر همانند زمان ارسال پيام.
- انکارناپذيري[62]: در دسترس بودن و جامعيت هويت فرستندة يک پيام (انکارناپذيري ارسال) يا گيرندة پيام (انکارناپذيري دريافت).
وزندهي متفاوتي که به صفات مختلف اتکاپذيري ميشود، توازن تکنيکهاي مورد استفادهاي که براي اتکاپذير ساختن سيستم بکار گرفته ميشوند را تحت تاثير قرار ميدهد. اين مساله زماني دشوار ميشود که با صفاتي مواجه باشيم که همراستا نباشند؛ براي مثال در قابليت در دسترس بودن و ايمني يا قابليت در دسترس بودن و امنيت.
1-2-3 روشهاي دستيابي به اتکاپذيري
طراحي يک سيستم محاسباتي اتکاپذير، نيازمند بکارگيري مجموعهاي از چهار تکنيک زير است:
- تزريق اشکال:عبارتست از تزريق تصنعي اشکال.
- پيشگيري از اشکال: اين که چگونه بتوان از رخداد و يا مطرح شدن اشکال ممانعت به عمل آورد.
- تحملپذيري اشکال: اين که چگونه بتوان در حين حضور اشکال، سرويس صحيح را ارائه نمود.
- برداشتن اشکال: اين که چگونه بتوان تعداد و يا شدت اشکال را کاهش داد.
- پيشبيني اشکال: اين که چگونه بتوان تعداد اشکال، رخداد آنها در آينده و عواقب احتمالي آنها را برآورد نمود.
جهت تشخيص اين که سيستم ميتوان اشکالها را تشخيص داده، ايزوله کند و سپس بردارد، لازم است تا در ابتدا سيستم بصورت تصنعي دچار اشکال شود. به عبارتي بايستي به سيستم اشکال را تزريق نمود. بديهي است که هر چقدر اين اشکالها به اشکالهاي واقعي و طبيعي شبيهتر باشد ميتواند برآورد واقعبينانهتري از رفتار سيستم تحت آزمون داشت. روشهاي تزريق اشکال را ميتوان به سه دستة کلي تقسيمبندي نمود:
- روشهاي تزريق اشکال سختافزاري: در اين دسته از روشهاي تزريق اشکال سعي ميشود تا سيستم را بصورت سختافزاري دچار اشکال نمود. براي مثال ميتوان به افزايش يا کاهش ناگهاني ولتاژ منبع تغذيه، افزايش يا کاهش ناگهاني فرکانس، تاباندن اشعهها و مواردي از اين دست اشاره نمود.
- روشهاي تزريق اشکال نرمافزاري:در اين دسته از روشهاي تزريق اشکال سعي ميشود تا سيستم را بصورت نرمافزاري دچار اشکال نمود. براي مثال ميتوان به تغيير دادههاي متغيرها، پاک کردن و يا اضافه نمودن حلقهها، پاک کردن else در شرطها و مواردي از اين دست اشاره نمود.
- روشهاي تزريق اشکال مبتني بر شبيهسازي: در اين دسته از روشها، به دليل محدوديتهاي سيستم، سعي ميشود تا اشکال مورد نظر براي سيستم شبيهسازي شود و يا از اشکالهايي استفاده شود که تاثير مشابهي را همانند اشکالهاي مورد نظر داشته باشند. براي مثال اگر امکان تزريق اشکال تشعشع بر روي رجيستر PC پردازنده وجود نداشته باشد، ميتوان با استفاده از ابزارهاي برنامهريزي پردازندهها مقدار اين پردازنده را بصورت دستي و يا با استفاده از يک نرمافزار تغيير داد.
از يک نقطهنظر ديگر، روشهاي تزريق اشکال را ميتوان به دو دسته تقسيمبندي نمود:
- روشهاي تزريق اشکال ايستا: در اين دسته از روشها، اجراي سيستم متوقف شده و سپس عمليات تزريق اشکال انجام ميشود. اجراي سيستم، پس از عمليات تزريق اشکال از سر گرفته ميشود.
- روشهاي تزريق اشکال پويا: در اين دسته از روشها، عمليات تزريق اشکال در حين اجراي سيستم انجام ميشود.
پيشگيري از اشکال با استفاده از تکنيکهاي کنترل کيفيت که در طول طراحي و پيادهسازي و ساخت سختافزار و نرمافزار مورد استفاده قرار ميگيرد، ميسر خواهد شد. از جملة اين تکنيکها ميتوان به برنامهنويسي ساختاريافته[63]، پنهانسازي اطلاعات[64]، ماژولاريزاسيون[65] براي نرمافزار و طراحي مقاوم[66] براي سختافزار اشاره نمود. براي مثال استفاده از حفاظها در برابر تشعشعات ميتواند از وقوع اشکالهاي فيزيکي ممانعت کند. از جمله موارد ديگر ميتوان استفاده از ديوارآتشين[67] در نرمافزار را اشاره نمود.
منظور از تحملپذيري اشکال در يک سيستم اين است که آن سيستم بتواند در حين حضور اشکالهاي فعال کماکان عملکرد صحيح خود را ارائه کند و يا اگر قرار بر اين است که کارايي آن کاهش يابد، اين کاهش کارايي بصورت تدريجي باشد. به عبارتي تنزل تدريجي کارايي را داشته باشد. روشهاي تحملپذيري اشکال معمولا از طريق تشخيص خطا و بازيابي سيستمي پيادهسازي ميشوند.
تشخيص خطا، يک سيگنال خطا و يا يک پيغام را در سيستم توليد ميکند. تکنيکهاي تشخيص خطا را ميتوان به دو کلاس تقسيمبندي نمود:
- تشخيص خطاي همروند: که در حين تحويل سرويس رخ ميدهد.
- تشخيص خطاي قبضهاي:که هنگامي انجام ميشود که تحويل سرويس معلق شده و سپس فرآيند تشخيص خطاهاي معوق و اشکالهاي خوابيده بر روي آن انجام ميشود.
فرآيند بازيابي[68]، يک حالت سيستمي را که شامل يک يا چند خطا و يا احتمالا چند اشکال است را به حالتي تبديل ميکند که آن خطاها و يا اشکالهاي تشخيص داده شده ديگر وجود نداشته باشند. بنابراين بايستي توجه نمود که فرآيند بازيابي، حالت سيستم را به حالتي که بدون اشکال و خطا است تبديل نميکند. بلکه ميتوان تنها ادعا نمود که آن دسته از اشکالها و خطاهايي که گزارش شده بودند، ديگر وجود ندارند.
بازيابي شامل دو فرآيند مديريت اشکال[69]و مديريت خطاست[70]. مديريت خطا، خطاها را از حالت سيستمي حذف ميکند که ممکن است سه فرم داشته باشد:
- بازگشت به عقب[71] که در آن تبديل حالت شامل برگشت سيستم به عقب به يک حالت قابل اطمينان است. چنين حالتي را نقطه وارسي[72] ميناميم که در فصلهاي بعدي بطور مفصل به آن ميپردازيم.
- جبران کردن[73] که در آن سيستم به اندارة کافي داراي افزونگي[74] است تا بتواند خطاهاي موجود را از سيستم حذف کند.
- حرکت به جلو[75] که در آن سيستم به يک حالتي برود که از پيش مشخص است که يک حالت بدون خطا ميباشد.
مديريت اشکال فرآيندي است که سعي ميکند که از فعال شدن مجدد اشکالها جلوگيري کند. مديريت اشکال شامل چهار گام است:
- تشخيص اشکال[76]که فرآيندي است که سعي ميکند تا مکان و نوع دلايل رخداد خطا را مشخص سازد.
- ايزولهسازي اشکال[77]که فرآيندي است که سعي ميکند تا مولفههاي اشکالدار را از سيستم خارج سازد.
- بازپيکربندي سيستم[78]که فرآيندي است که سعي ميکند تا ماموريت سيستم را بر روي مولفههاي يدک سوئيچ کند و يا وظايف را به مولفههايي که دچار خرابي نشدهاند، انتساب کند.
- بازمقداردهي سيستم[79]که فرآيندي است که پيکربندي جديد را چک و رکورد کرده و جداول سيستمي را به روزرساني ميکند.
پس از مديريت اشکال، نگهداري اصلاحي صورت ميگيرد که اشکالهاي ايزوله شده توسط فرآيند مديريت اشکال را از سيستم استخراج ميکند. آنچه که تحملپذيري اشکال را از نگهداري اشکال متمايز ميکند، اين است که نگهداري اشکال به مشارکت يک عامل خارجي نياز دارد.
برداشتن اشکال در طول فازهاي طراحي و عملياتي يک سيستم انجام ميشود. برداشتن اشکال در طول فاز طراحي چرخة عمر يک سيستم شامل 3 فاز است: درستييابي[80]، تشخيص و تصحيح. درستي بدين معني است که آيا سيستم، مشخصههاي مورد نظر را داراست يا خير. اگر سيستم، اين مشخصهها را دارا نبود، دو گام برداشته ميشود: تشخيص اشکالهايي که موجب شدند تا درستي يابي مورد قبول واقع نشود و سپس اجراي تصحيحات مورد نياز. پس از انجام تصحيحات، فرآيند درستييابي بايستي تکرار شود تا اين اطمينان حاصل شود که فرآيند برداشتن اشکال، تاثيرات جانبي نداشته است.
چک کردن و بررسي مشخصهها معمولا اعتبارسنجي[81] ناميده ميشود. يافتن اشکالهاي مشخصهها ميتواند در هر فازي از طول عمر سيستم اتفاق بيفتد.
تکنيکهاي درستييابي را ميتوان بر مبناي اين که سيستم در حال استفاده است يا خير کلاسبندي نمود. درستييابي يک سيستم بدون اجراي واقعي را درستييابي ايستا ميگويند. درستييابي پويا، درستييابي سيستم در حين اجراي سيستم است.
پيشبيني اشکال از طريق ارزيابي رفتار سيستم با در نظرگرفتن رخداد و يا فعالسازي اشکال انجام ميشود. ارزيابي دو جنبه دارد:
- ارزيابي کيفي[82] يا توصيفي[83] که هدف آن، تعيين، کلاسبندي و رتبهبندي مدهاي خرابي و يا ترکيبي از رويدادهاست (خرابيهاي مولفهاي يا شرايط محيطي) که ميتوانند منجر به خرابي سيستم شوند.
- ارزيابي کمّي[84] يا احتمالاتي[85] که هدف آن ارزيابي احتمالاتي ويژگيهاي اتکاپذيري است.
روشهاي ارزيابي کيفي و کمّي کاملا مشخص هستند(همانند مد خرابي و آناليز تاثير براي ارزيابي کيفي يا زنجيرة مارکوف[86] و شبکههاي پتري[87] براي ارزيابي کمّي). روشهاي ارزيابي قابليت اطمينان همانند دياگرامهاي بلوکي قابليت اطمينان[88] و يا درختهاي اشکال[89] براي هر دوي اين ارزيابيهاي قابل استفاده هستند.
ارزيابي اتکاپذيري بر روي چرخة عمر يک سيستم را ميتوان با استفاده از نماد پايداري[90]، رشد[91] و کاهش که ميتوانند براي ويژگيهاي مختلف اتکاپذيري استفاده شوند، مشخص نمود. اين نمادها با شدت خرابي[92](تعداد خرابي به ازاي هر واحد) نمايش داده ميشوند. در طول عمر يک سيستم، شدت خرابي، ابتدا کاهش مييابد(قابيت اطمينان افزايش مييابد)، سپس پايدار شده(قابيت اطمينان پايدار ميشود) و در نهايت با فرسايش سيستم افزايش مييابد(قابيت اطمينان کاهش مييابد).
ميتوان از تغييرات تحويل سرويس صحيح-ناصحيح براي تعريف قابليت اطمينان، قابليت در دسترس بودن و قابليت نگهداري به عنوان اندازههايهاي اتکاپذيري استفاده نمود:
- قابليت اطمينان: يک اندازه از تحويل مداوم سرويس صحيح که معادل معياري از مدت زمان تا وقوع خرابي است.
- قابليت در دسترس بودن: يک اندازه از تحويل سرويس صحيح با در نظرگرفتن تغييرات سرويس صحيح و ناصحيح. به عبارتي مدت زماني که سيستم، سرويس صحيح ارائه ميکند به مجموع زماني که سيستم، سرويس صحيح و سرويس ناصحيح را ارائه ميکند.
- قابليت نگهداري: يک اندازه از مدت زمان لازم براي احياي سيستم از زمان رخداد آخرين خرابي است که معادل معياري از مدت زمان تحويل مداوم سرويس ناصحيح است.
- ايمني: يک بسط از قابليت اطمينان است؛ هنگامي که حالت سرويس صحيح و حالتهاي سرويس ناصحيح منجر به خرابي غيرفاجعهبار در سيستم ميشوند. ايمني، اندازهاي از ايمنبودن مداوم است که معادل مدت زمان لازم تا خرابيهاي فاجعهبار است. بنابراين، ايمني همان قابليت اطمينان با در نظر گرفتن خرابيهاي فاجعهبار است. به عبارتي، قابليت اطمينان، مدت زمان مورد تا وقوع خرابي است؛ در حالي که ايمني، مدت زمان مورد نياز تا وقوع خرابيهاي فاجعهبار است.
واژهشناسي خرابي: ارتباط مابين اشکال، خطا، خرابي
در اين بخش، تقدم و تاخر زماني رويدادهاي اشکال، خطا و خرابي مورد بررسي قرار ميگيرد:
- يک اشکال، زماني اشکال فعال[93] ناميده ميشود که منجر به رخداد خطا شود. در غيراينصورت، اشکال را اشکال خوابيده[94] مينامند. يک اشکال فعال ميتواند يک اشکال داخلي[95] يا دروني (که قبلا در سيستم خوابيده بود و هماکنون به دليل فرآيندهاي محاسباتي و يا شرايط محيطي فعال شده است) و يا يک اشکال خارجي[96] باشد. فعالسازي اشکال[97]، فرآيندي است که موجب ميشود تا يک اشکال خوابيده در سيستم تيديل به يک اشکال فعال شود. بيشتر اشکالهاي داخلي معمولا در حالتهاي خوابيده و فعال نوسان ميکنند.
- انتشار خطا در يک مولفه (انتشار داخلي) به دليل يک فرآيند محاسباتي صورت ميگيرد. در اين فرآيند، يک خطا به خطا يا خطاهاي ديگر تبديل ميشود. با توجه به شکل 1-5، انتشار خطا از مولفة C1 به مولفة C2 که سرويس را از C1 دريافت ميکند (انتشار خارجي) هنگامي رخ ميدهد که از طريق انتشار داخلي، يک خطا به واسط سرويس مولفة C1 برسد. در اين زمان، سرويس تحويل داده شده به C2 خراب ميشود و خرابي C1 همانند يک اشکال خارجي براي C2 خواهد شد.
- يک خرابي زماني رخ ميدهد که يک خطا به واسط سرويس برشد و منجر شود تا سيستم، سرويس ناصحيح را ارائه کند. خرابي يک مولفه ميتواند منجر به يک اشکال گذرا[98] و يا دائمي[99] خارجي براي سيستم ديگري شود که با اين سيستم خراب در تعامل
همانگونه که قابل مشاهده است، اشکال پس از فعالسازي منجر به رخداد خطا ميشود. يک خطا در صورتي که در سيستم کنترل نشده و نقاببندي نشود، ميتواند به انواع ديگري از خطاها شده و يا بطور مستقيم منجر به رخداد خرابي شود. البته بايستي توجه نمود، يک خرابي زماني رخ ميدهد که خطا به واسط سرويس سيستم برسد و خروجي سيستم را تغيير دهد. رخداد يک خرابي، به نوبة خود ميتواند منجر به رخداد يک اشکال در يک سيستم ديگر شود.
در کتب درسي ديگر، واژههاي اشکال، خطا، خرابي، نقص، قطعي و مواردي از اين دست، اگرچه واژههاي نامطلوبي براي عملکرد سيستم تلقي ميشوند، اما ميتوان گاها آنها را به جاي هم استفاده نمود. اما همانگونه که سعي گرديد تا بدينجا تاکيد شود، در کتابهايي که با محوريت اتکاپذيري، تحملپذيري اشکال و مواردي از اين قبيل ارائه ميگردند، استفادة صحيح از اين واژهها در جايگاه خود حائز اهميت است. بنابراين، بايستي سعي شود، تا از استفادههاي نادرست اين واژگان در اين حيطه اجتناب نمود.
دنياي مهندسي، دنياي توازن، موازنه و بده-بستان است. بدين معني که همواره بهبود يک سيستم از يک نقطهنظر در تناظر تحميل هزينههايي از نقطهنظرات ديگر به همان سيستم است. به عبارتي براي به دست آوردن يک مزيت، به ناچار بايستي مزيتي ديگر را با مخاطره مواجه نمود. هزينهاي که در ازاي افزايش قابليت اتکاپذيري بايستي پرداخت شود، افزونگي[100] است. افزونگي به طور کلي به معناي چندتايي کردن سيستم است. حال ميتوان اين چندتايي کردن را از جوانب مختلفي براي سيستم در نظر گرفت: سختافزار، نرمافزار، زمان و نرمافزار.
انواع افزونگيها
تمامي روشهاي افزايش تحملپذيري اشکل، تمريني براي بکارگيري و مديريت افزونگي هستند. در صورتي کار يک سيستم با تعداد مشخصي از منابع انجام ميشود، افزونگي به معناي داشتن تعدادي بيش از آن تعداد معين است. هنگامي که يک سيستم، دچار خرابي ميشود، از آن منابع افزونة سيستم استفاده ميشود.
چهارنوع افزونگي وجود دارد:
اشکالهاي سختافزاري را معمولا ميتوان با استفاده از افزونگيهاي سختافزاري، زماني و اطلاعاتي محافظت نمود؛ در حالي که اشکالهاي سختافزاري معمولا با استفاده از افزونگي نرمافزاري محافظت ميشوند.
در افزونگي سختافزاري، به جاي استفاده از يک سختافزار از چندين سختافزار استفاده ميشود. حال ميتوان کل سختافزار را چندتايي کرد و يا بخشهايي از سختافزار اصلي را چندتايي نمود. براي مثال، به جاي داشتن يک تک پردازنده، ميتوان دو يا چند پردازنده داشت که هر يک از اين پردازنده کارکرد يکساني دارند. با داشتن دو پردازنده، ميتوان خرابي يک پردازنده را تشخيص داد (اما اين که کدام پردازنده خراب شده است را خير). با داشتن سه پردازنده و رايگيري اکثريت ميتوان پردازندة خراب را تشخيص داد. اين دسته از افزونگيها، افزونگيهاي ايستا[105] ناميده ميشوند که هدف اصلي آنها، نقاب بندي فوري خرابيهاي سيستم است. در افزونگيها ايستا، افزونگيهاي از پيشدرنظرگرفته شدة سيستم، خرابي را در سيستم تحمل ميکنند و در حين اجراي سيستم، بازپيکربندي[106] صورت نميگيرد. يعني هيچ مولفهاي در سيستم در صورت رخداد خرابي، جايگزين مولفة ديگري نميشود. فرم ديگري از افزونگي سختافزاري، افزونگي پويا[107]ست که در اين نوع از افزونگي، در صورت رخداد خرابي، بازپيکربندي صورت ميگيرد. براي مثال مولفههاي افزونة جايگزين، جايگزين مولفههاي اصلي ميشوند که خرابي آنها محرز شده است. البته، ترکيب اين دو نوع از افزونگيها نيز ميسر است که به آن افزونگي سختافزاري ترکيبي ميگويند.
افزونگي سختافزاري ميتواند از يک دوتايي کردن تا يک ساختار پيچيده که در هنگام خرابي به واحدهاي يدک سوئيچ ميکند، متنوع باشد. بديهي است که اين دسته از افزونگيها سربارهايي را از جمله هزينه، وزن، مساحت مورد نياز، سيمکشي، نويزپذيري را به سيستم تحميل ميکنند. بنابراين زماني که رويکرد افزونگي مورد نظر انتخاب ميشود، بايستي به اين سربارها نيز توجه شود.
افزونگي نرمافزاري غالبا در برابر خرابيهاي نرمافزاري مورد استفاده قرار ميگيرد. بطور کلي، هر قطعة نرمافزار که طراحي و پيادهسازي ميشود، شامل تعداد زيادي اشکال يا باگ است که اشکالزدايي اين دسته از اشکالها ممکن است هزينة زيادي را به سيستم تحميل کند. يک روش مقابله با اين دسته از خرابيهاي نرمافزار، استفاده از دو نسخة متفاوت نرمافزاري است که کارکرد يکساني دارند. براي مثال دو الگوريتم متفاوت با دو زبان برنامهنويسي مختلف که توسط برنامهنويسان متفاوتي برنامهنويسي شدهاند که هر دوي آنها مرتبسازي اعداد را انجام ميدهند. استفاده از نسخهها متفاوت نرمافزاري، موجب ميشود تا اشکال و يا باگي که يک نسخه را با خرابي مواجه کرده است با احتمال کمي در نسخة ديگري وجود داشته باشد.
شناختهشده ترين فرم افزونگي اطلاعاتي، کدينگ تشخيص خطا و تصحيح خطاست. در اين دسته از افزونگي، تعداد بيتهاي بيشتري به همراه بيتهاي دادة اصلي ارسال ميشود. اين بيتها، بيتهاي چک[108] يا بيتهاي کنترلي[109] يا بيتهاي افزونه[110] ناميده ميشوند. با استفاده از اين بيتهاي افزونه ميتوان در صورت رخداد خطا بر روي کل اطلاعات ارسالي، عمليات تشخيص و يا تصحيح خطا را انجام داد. از کدهاي تشخيص و تصحيح خطا، امروزه به طور گسترده در واحدهاي حافظة پردازندهها و دستگاههاي ذخيرهسازي استفاده ميشود. بايستي توجه نمود که کدهاي کنترل خطا همانند ديگر انواع افزونگي اطلاعاتي به سختافزارهاي اضافي براي پردازش دادههاي افزونه نياز دارند. لذا افزونگي اطلاعاتي، خود نيازمند افزونگي سختافزاري در سيستم است. از کدهاي تشخيص و تصحيح خطا، همچنين براي محافظت از دادههاي ارتباطي در کانالهاي نويزي استفاده ميشود. اين کانالها، در معرض خرابيهاي گذراي زيادي هستند. اين کانالها ميتوانند لينکهاي ارتباطي مابين پردازندههاي مختلفي باشند که در مکانهاي مختلفي هستند (اينترنت) و يا پردازندههايي که در يک شبکة ناحية محلي[111](LAN) وجود دارند. در صورتي که از کدهاي تشخيص خطا استفاده شود، گيرندة اطلاعات، به فرستنده اطلاع ميدهد تا فرستنده، اطلاعات را مجددا ارسال نمايد. در حالي که در کدهاي تصحيح خطا، گيرنده، ميتوان خود بصورت مستقل، اطلاعات دريافتي خطادار را تصحيح نمايد.
گرههاي محاسباتي ميتوانند از افزونگي زماني از طريق اجراي مجدد همان برنامه در همان نرمافزار و بر روي همان سختافزار استفاده بهره ببرند. از افزونگيهاي زماني ميتوان در برابر اشکالهاي گذرا بيشترين بهره را با کمترين هزينه برد. براي مثال، اگر يک تابع بر روي يک پردازنده، دو بار اجرا شود، در صورتي که يکي از اين بارها، تابع خروجي ناصحيحي را توليد کند، مبتني بر اين که خروجيهاي يک تابع نرمافزاري در يک سختافزار در دو اجراي مختلف بايستي يکسان باشند ميتوان تشخيص داد که يکي از اين اجرا ناصحيح بوده است. همچنين با اجراي سه بار همان تابع ميتوان اجراي ناصحيح را تشخيص داد. اگرچه افزونگي زماني در مقايسه با ديگر انواع افزونگيها، سربار کمتري را به سيستم تحميل ميکند، اما سربار کارايي آن در مقايسه به ديگر افزونگيها بسيار بالاست. از اين رو گزينة مناسبي براي استفاده در سيستمهاي بيدرنگ نيستند؛ چرا که در اين سيستم،ها، سرحدهاي زماني بسيار حائز اهميت هستند و خروجيها بايستي در اين سرحدها توليد شوند.
تحملپذيري اشکال بدين معني است که سيستم به گونهاي طراحي شود که در حين حضور اشکال و يا در عين حضور اشکال کماکان عملکرد صحيح خود را ارائه کند و يا در صورت اختلال کارکرد سيستم، کارايي سيستم تنزل تدريجي داشته باشد و يکباره دچار خرابي نشود.
از آنجايي که تحملپذيري اشکال پيرامون افزايش قابليت اتکاپذيري سيستم است، اين مساله مهم است که شاخصهاي مناسبي را براي ارزيابي در اختيار داشت. در اين بخش، برخي از اين شاخصها را مورد بررسي قرار ميدهيم.
در ابتدا شاخصهاي سنتي ارزيابي اتکاپذيري را بررسي ميکنيم. دو شاخص مهم از اين دسته از شاخصها، قابليت اطمينان و قابليت در دسترسبودن است.
اگر قابليت اطمينان را با R(t) بصورت تابعي از زمان نمايش دهيم، احتمال درست کار کردن سيستم در بازة زماني [0,t) خواهد بود. اين شاخص در سيستمهايي حائز اهميت است که تداوم عملکرد صحيح سيستم مدنظر ميباشد. به عنوان مثال ميتوان به يک قلب مصنوعي اشاره نمود که بايد در تمامي لحظات زماني درست کار کند و يا يک هواپيما که اختلال عملکرد در کسري از زمان ميتواند منجر به عواقب فاجعهباري شود.
دو پارامتر همراستا با قابليت اطمينان MTTF يا Mean Time to Failure يا متوسط زمان تا خرابي و MTBF يا Mean Time Between Failures يا متوسط زمان مابين خرابيهاست. MTTF، متوسط زماني که سيستم اجرا ميشود تا زماني که يک خرابي رخ ميدهد؛ در حالي که دومي متوسط زمان مابين دو خرابي متوالي است. تفاوت مابين اين به دليل مدت زمان مورد نياز براي تعمير خرابي نخست است که اين زمان MTTR يا Mean Time to Repair يا متوسط زمان تعمير ناميده ميشود. رابطة زير مابين اين سه پارامتر برقرار است:
MTBF= MTTF + MTTR
شکل 1-7 ارتباط بين پارامترهاي MTBF، MTTR و MTTF
شکل 1-7، ارتباط مابين اين پارامترها را نمايش ميدهد.
اگر قابليت در دسترس بودن را با A(t) نمايش دهيم، متوسط سهم و کسري از زمان [0,t] است که در آن سيستم سرويس صحيح خود را ارائه ميکند. اين شاخص براي کاربردهايي که در آن تداوم عملکرد صحيح سيستم مهم است، ضروري و مهم نيست؛ اما براي سيستمهايي که خارج از دسترس بودن سيستم حتي در زمانهايي کوچکي ميتواند هزينة زيادي داشته باشد، بسيار مهم است. سيستمهاي رزرواسيون هواپيمايي نياز دارند تا همواره در دسترس باشند؛ لذا خارج از دسترس بودن مقطعي آنها ميتواند منجر به از دست دادن مشتريان شود.
قابليت در دسترس بودن بلند مدت را که با A نمايش ميدهند ميتوان بصورت زير تعريف نمود:
A را ميتوان بصورت احتمال اين که سيستم در برخي از نقاط تصادفي صحيح کار کند، تعريف نمود. البته تنها در سيستمهايي اين تعريف صادق است که امکان تعمير مولفههاي اشکالدار وجود دارد. قابليت در دسترسبودن بلند مدت را ميتوان از MTTF، MTBF و MTTR محاسبه نمود:
يک شاخص مرتبط ديگر، قابليت در دسترس بودن نقطهاي[112] است که با Ap(t) نمايش داده ميشود که احتمال در دسترس بودن سيستم در يک نقطة مشخص زماني است.
يک سيستم با قابليت اطمينان پايين ميتواند قابليت دسترسبودن بالايي داشته باشد. سيستمي را فرض کنيد که هر ساعت دچار خرابي ميشود، اما يک ثانيه پس از هر خرابي دوباره عملياتي ميشود.
چنين سيستمي داراي MTBF برابر با يک ساعت است و درنتيجه قابليت اطمينان اين سيستم پايين است. با اين وجود، قابليت در دسترس بود بالاست:
A=3500/3600=0.99972
افزون بر شاخصهاي سيستمي کلي که در بخش گذشته بررسي شد، شاخصهاي تخصصيتري نيز وجود دارند که بر روي شبکههاي کامپيوتري تمرکز ميکنند. اين شبکه، پردازندهها را به هم متصل ميکنند. سادهترين شاخص در اين زمينه، اتصال[113] است. منظور از اين اتصال، مينيمم تعداد گرهها و خطهايي است که بايستي خراب شوند تا شبکه منقطع شود. براي مثال، شبکهاي که با خرابي يک گره يا لينک منقطع ميشود، آسيبپذيرتر از شبکهاي است که دست کم با خرابي چهار گره منقطع ميشود.
اتصال، يک شاخص پايهاي از قابليت اطمينان شبکه است که با استفاده از آن ميتوان شبکه را به دو حالت متمايز تقسيمبندي کرد: متصل و منقطع. براي مثال شکل 1-8 را در نظر بگيريد. هر دو شبکه در اين شکل متصل هستند. اما شبکة N1 نسبت به شبکة N2 متصلتر است. بنابراين، احتمال اين که N2 به واحدهاي کوچکتري در صورت رخداد خرابي تقسيم شود، بيشتر است.
براي بيان اين نوع از مقاومتهاي اتصالاتي، ميتوان از شاخصهاي ديگري نيز استفاده نمود. دو شاخص از اين دسته از شاخصها، متوسط زوج-گره به ازاي مسافت[114] و قطر شبکه[115] (ماکسيمم مسافت زوج-گرهاي) هستند که با استفاده از آنها ميتوان خرابي لينکها و يا گرهها را محاسبه نمود.
شکل 1-8 اتصال به عنوان يک شاخص تحملپذيري اشکال
[1]Dependability
[2]Reliability
[3]Availability
[4] Safety
[5] Security
[6] Maintainability
[7]Threats
[8]Fault
[9] Error
[10] Failure
[11]Attitudes
[12] Confidentiality
[13]Integrity
[14]Means
[15]Fault Prevention
[16] Fault Tolerance
[17] Fault Removal
[18] Fault Forecasting
[19]Function
[20] Usability
[21] Performance
[22]Cost
[23]Outage
[24]Service Restoration
[25]Active Fault
[26] Latent Fault
[27]Failure Domain
[28]Controllability of Failures
[29]Consistency of Failures
[30]Consequences of Failures
[31]Value Failure
[32]Realtime Systems
[33]Controlled Failure
[34]Uncontrolled Failure
[35]Consistent Failure
[36]Inconsistent Failure
[37]Performance Failure
[38] Detected Error
[39] Latent Error
[40]Phase of Creation or Occurrence
[41]Design Faults
[42]Operational Faults
[43]Internal Faults
[44]External Faults
[45] Domain
[46]Hardware Faults
[47]Software Faults
[48] Phenomenological Cause
[49]Natural Faults
[50]Human-Made Faults
[51] Intent
[52]Persistence
[53] Permanent Faults
[54] Transient Faults
[55]Design Faults
[56] Physical Faults
[57] Interaction Faults
[58]Security
[59]Robustness
[60]Accountability
[61] Authenticity
[62] Non-Repudiability
[63]Structured Programming
[64]Information Hiding
[65]Modularization
[66]Rigorous Design
[67]Firewall
[68]Recovery
[69]Fault Handling
[70]Error Handling
[71]Rollback
[72]Checkpoint
[73]Compensation
[74]Redundancy
[75]Rollforward
[76]Fault Diagnosis
[77]Fault Isolation
[78]System Reconfiguration
[79]System Reinitialization
[80]Verification
[81]Validation
[82] Qualitative
[83] Ordinal
[84] Quantitative
[85] Probabilistic
[86] Markov Chain
[87] Petri Net
[88] Reliability Block Diagram
[89] Fault Trees
[90] Stability
[91] Growth
[92] Failure Intensity
[93] Active Fault
[94] Dormant Fault
[95] Internal Fault
[96] External Fault
[97] Fault Activation
[98] Transient
[99] Permanent
[100] Redundancy
[101] Hardware Redundancy
[102] Software Redundancy
[103] Time Redundancy
[104] Information Redundancy
[105] Static Redundancy
[106] Reconfiguration
[107] Dynamic Redundancy
[108] Check bits
[109] Control bits
[110] Redundant bits
[111] Local Area Network
[112] Point Availability
[113] Connectivity
[114] Average Node-Pair Distance
[115] Network Diameter
Reviews