تحملپذیری اشکال یا عیبتابی[۱] (به انگلیسی: Fault tolerance) ویژگی ای است که سامانه را قادر میسازد تا با به وجود آمدن اشکال (یک یا چندین اشکال) در اجزایش، به صورت صحیح به کار خود ادامه دهد. در این دسته از سامانهها در صورت بروز اشکال، در صورتی که کیفیت عملکرد کلی سامانه کاهش یابد، میزان این کاهش متناسب با میزان بزرگی شدت اشکال است، در حالی که در طراحیهای سادهتر، این اشکالها میتوانند بهطور کلی موجب از کار افتادن سامانه شوند. توجه به موضوع تحمل پذیری اشکال بعد از پیدایش سامانههای همیشه روشن و ایمن بحران اهمیت ویژهای یافت. از ویژگی ادامهٔ کارکرد سامانهها با وجود کارکرد ناصحیح بعضی از بخشهای آن ها، تحت عنوان شکست امن یاد میشود.[۲]
طراحی مقاوم در برابر خطا به طراحی ای گفته میشود که به سامانه این امکان را میدهد در مواجه با خطا در بعضی از بخش هایش، کارکرد خود را در همان سطح یا در سطحی پایینتر ادامه دهد و از کار افتادن کلی سامانه جلوگیری کند.[۴] این طراحی در بحثهای مربوط به معماری رایانه بهطور معمول به این برمیگردد که در صورت کاهش عملکرد رایانه، با کاهش توان عملیاتی یا افزایش زمان پاسخ دهی به کار خود ادامه دهد. این طراحی در هر دو حوزهٔ سختافزار و نرمافزار وجود دارد.
روشهای تحملپذیری اشکال
بهطور عمومی تحمل اشکال میتواند با دو روش عمومی حاصل شود:
در این روش طراحان شرایطی را که ممکن است سامانه دچار خطا شود را تشخیص میدهند و سامانه را به گونهای طراحی میکنند که از پس این شرایط بتواند برآید. در نهایت هدف اصلی طراحان در این روش رسیدن به یک سامانهٔ خود تثبیت است تا هیچوقت دچار خطا نشود.
معایب: مشکلات اصلی این روش وقتی است که سلسلهای از خطاهای حیاتی در سامانه رخ دهد یا هزینهٔ سامانه با ضریب اطمینان بالا خیلی زیاد شود.
در این روش سامانه به صورتی طراحی میشود که در صورت بروز هر گونه خطای حیاتی بتواند به حالت ایمن قبلی بازگردد. راهبرد این روش به این گونه است که از حالت قبلی خود نسخهٔ ذخیره دارد و در صورت لزوم میتواند آن را بازیابی کند. این روش معایب کمتری نسبت به روش خودتثبیت دارد.
روشهای تحملپذیری اشکال در نرمافزار
روشهای تحمل اشکال در حوزهٔ نرمافزار به سه دستهٔ کلی تقسیم میشود:[۵]
جلوگیری یا اجتناب از خطا
حذف خطا
پیشبینی خطا
تحمل اشکال
جلوگیری یا اجتناب از خطا
این روش رویکردی شبه خودتثبیت دارد و نرمافزاری بدون خطا طراحی میشود.
حذف خطا
این رویکرد به این صورت است که بعد از طراحی نرمافزار، آزمونهای زیادی بر روی آن انجام میشود تا نرمافزار نهایی بدون هرگونه خطا شود.
پیش بینی خطا
پیشبینی خطاهای احتمالی در نرمافزار و شرایط رخدادشان و خطرهای احتمالی ناشی از آنها.
تحمل خطا
در این روش طراحان با این تفکر که خطا وجود دارد سامانه را به گونهای که بتواند در این شرایط هم عملکرد صحیح داشته باشد، طراحی میکنند.
درمان خطا: تلاش میکند که از بروز خطاها ی بعدی جلو گیری کند و قبل از خرابکاری و رسیدن به شرایط بحرانی، به اتمام برسد.
پردازش خطا: در این رویکرد سامانه دو راه دارد، یا به دنبال پاک کردن خطا است که بازیابی خطا نام دارد یا با استفاده از نسخه برداری این کار را انجام میدهد که جبران خطا نام دارد.