容錯能力

又叫故障容許度，係一個系統可以有嘅一種特性，指個系統「喺某個或者某啲組成部份故障嗰陣，有幾能夠繼續正常運作」，亦都包埋個系統喺呢種情況下「表現會跌幾多」：
冇容錯能力：一旦個系統其中一橛出咗錯，就成個系統軭嗮；
有咁上下容錯能力：一旦個系統其中一橛出咗錯，佢依然行到，但表現會明顯變差；
「得體」嘅容錯能力：隨住系統越來越多出錯，佢依然行到，表現只會細微噉變差。
舉個例說明，想像家陣有隻電腦軟件，佢會接收由用家等來源嚟嘅 input；想像有吓 input 嘅數值異常，搞到隻軟件其中一部份計錯數；如果隻軟件完全冇容錯能力，就會輕機；現實世界嘅軟件工程師多數都會將隻軟件設計成有些少容錯能力，即係例如就算其中一橛計錯數，隻軟件都唔輕機，而係揼咗個錯嘅數，用第個用得嘅數頂替，再彈條信息出嚟話俾用家知出咗問題－隻軟件表現差咗，但仲行得到。容錯能力嘅概念喺電腦以外嘅工程學領域都用得著－例如一架車其中有條呔爆咗，用家換條新呔架車就可以繼續行，唔會進入完全郁唔到嘅狀態－架車有一定嘅容錯能力。

喺廿一世紀初嘅工程學上，容錯能力一般俾人認為係一個理想嘅特徵：工程師設計產品嗰陣－包括軟件工程師寫軟件，或者汽車工程師設計汽車呀噉，都會想自己設計件嘢有返咁上下容錯能力。有唔少做工程學學術研究嘅人，仲會深入噉諗同討論「啲系統要點設計，先可以容錯能力高」噉嘅問題。

基本特徵

一個系統要算得上係「有容錯能力」，起碼需要滿足以下呢啲條件：
冇故障單點：一個系統嘅故障單點係指一個「一旦軭咗，就成個系統軭嗮」嘅部份，例如附圖嗰個電腦網絡，成個網絡啲訊號都要經部路由器，先可以由一部電腦傳去第部電腦度，噉部路由器一軭，成個網絡就通唔到訊－個路由器就係個系統嘅通訊嘅故障單點；一個容錯嘅系統最理想係冇故障單點。
故障隔離：當個系統出問題嗰陣，個系統需要能夠探測個問題，並且話俾用家知「出錯嘅係個系統邊一橛」；例如機械工程上好興喺機械上面裝感應器，俾用家知部機邊一忽有唔妥；
故障壓制：當個系統出問題嗰陣，個系統要能夠確保個問題唔會「傳播開去」－軭咗嗰忽可以繼續軭，但唔可以拖累個系統嘅其餘部份，搞到淨低嗰啲部份跟住佢一齊軭。
好似噉嘅系統能夠做到得體降級－就算有嘢出咗故障，個系統都能夠或多或少噉繼續運作－「表現會降級，但降起級上嚟得體」噉解。要留意嘅係，上述呢度係講緊「個系統最理想要有呢啲特性」－喺現實世界嘅某啲情況下，呢啲特性好多時一係冇可能達到，一係有可能達到但要花費嘅資源量大得滯，所以設計者唔會嘗試追求。

工程設計

設計技巧

喺實際應用上，工程師有唔少方法可以提升個系統嘅容錯能力：
冗餘：指同個系統加啲「多餘」嘅功能，呢啲「多餘」功能喺冇故障嘅世界入面係唔必要；攞住「要提升佢容錯力」嘅系統部份，設計者可以將個系統部份複製幾次，啲複製品用嚟做後備；噉一旦個系統部份軭咗，個系統就可以即刻改為用啲後備部件頂替；舉例說明，啲大型嘅船同飛機好興設計成有多過一部發動機；噉如果架嘢嘅主發動機出咗故障，佢哋就可以改為用後備發動機嚟推動架嘢，等架嘢仲可以繼續行，或者起碼有足夠時間駛去安全嘅地方。
又例如程式編寫噉，控制流程上就有所謂嘅例外處理，好似以下呢段 Python 源碼噉：
  try: #「試吓行 try 嘅碼先。」
    print(x)
  except: #「如果 try 段碼出錯，噉就行 except 嘅碼。」
    print("An exception occurred")
當中 except: 入面嗰段碼就係冗餘嘅部份－喺冇出錯嘅世界入面，嗰段碼係冇需要存在嘅，但有咗 except: 段碼喺度，就可以喺 try: 段碼出事嗰陣有個後備保障。Python 以外嘅多種程式語言都有例外處理嘅功能。

複製：一種提升電腦軟硬件系統容錯能力嘅技巧；「複製」係指將一個系統部份複製幾次，不過唔係攞嚟做後備，而係要求呢幾件複雜品冚唪唥一齊平行噉計數，等到要攞個運算結果去用嗰時，就睇勻嗮嗰幾件複雜品嘅運算結果先做決定；例如想像家吓想叫電腦計條好複雜嘅數，研究者可以要 5 部機分別計一次，再攞 5 部機之間嘅主流結果去用，理由係「5 部機冚唪唥都計錯數」嘅機率細過「其中一部計錯數」嘅機率。
... 呀噉。

現實考量

喺實用嘅工程學上，通常淨係得一小部份嘅部件會有容錯設計：特登加容錯設計係要成本嘅；例如一架車要整得硬淨，就梗要用更多或者更貴嘅材料整；而一隻電腦軟件要加啲容錯設計就要落更多行嘅源碼，教部電腦做例外處理，就實令到隻軟件最後大咗。因為噉，工程師決定「好唔好同呢個部件加容錯設計」嗰時，有諸多考量要諗：
故障可能性：假設第啲因素不變，一個系統部份愈有大機率會出故障，就愈有需要同佢落容錯設計。
重要：假設第啲因素不變，一個系統部份愈重要，工程師就愈大機會想加容錯設計－當中「重要」係指「嗰部份一故障就會搞到個系統喪失功能，或者引致人命財產損失」；例如一架私家車上面嘅收音機對架車嘅功能唔係咁必要，所以工程師正路唔會專登同架車嘅收音機落容錯設計；相比之下，架車嘅發動機嘅重要部份，就比較有可能會落容錯設計。
成本：假設第啲因素不變，一款容錯設計嘅成本愈高，工程師就愈細機會會想採用隻設計；例如想像而家要同架車嘅發動機落容錯，原則上，工程師可以索性加多部發動機落去做後備，但現實表明，要同架車加多部發動機成本極高－汽車係要量產嘅，所以吓吓都加後備發動機要使多好錢，而且架車個殼又裝唔落兩部發動機；所以工程師想同架車嘅發動機做容錯設計，唔會用「加多部發動機做後備」呢種做法。
... 等等。

相關概念

失效安全同失效致命：如果話一個系統係特登設計到「失效安全」，即係指佢有故障局部或者完全喪失功能嗰陣，都仲能夠做到保護人、財產同數據免受傷害；例如一架車，架車設計到有返咁上下硬淨，架車就算失控撞車，架車都唔會變形變得太犀利，坐喺入面嘅人同財產唔會受大傷害－就算係達致失效安全；失效致命可以話係失效安全嘅相反，指就算個系統故障局部或者完全喪失功能，佢都能夠成功傷害或者殺死目標－呢種設計喺武器嘅設計上成日見到。
人為錯誤：指若干個人冇意圖噉做咗啲嘢，搞到個系統出現故障，例如一架車失控可以係因為揸嗰個人揸車技術唔好；人為錯誤喺工程學上廣受關注，因為對工程師嚟講呢種錯誤難以控制；亦都可以睇吓人因工程同相關領域上對「點樣設計到個系統一睇就知點用」嘅思考。
順應力
損傷容限
錯誤檢測同糾正
平均故障間隔
縱深防禦

攷

拎

fault-tolerant. TechTarget.

工程
軟件工程
安全