JBM / 安全のためには 4 / 安全設計資料
Posted by guideboard on 2007/10/07/Sun
信頼性設計 ( ウィキペディア )
信頼性設計(しんらいせいせっけい)とは、工学分野において、システム・装置または部品が使用開始から寿命を迎えるまでの期間を通して、予め期待した機能を果たせるように、すなわち故障や性能の劣化が発生しないように考慮して設計する手法のこと。
フェイルセーフ設計
フェイルセーフ設計(Fail safe design)とは、機械は必ず故障が発生するということを念頭に置き、故障が発生した場合にも、常に安全側にその機能が作用する設計思想。
機械であれば、「壊れたまま動作することで、周囲に損害や危険を及ぼすことの無い設計」をいう。(例えば「壊れやすい部分を設けておき、高い負荷がかかった場合に意図的にその部分が壊れるようにしておくことで、全体が動作しなくなる」など) 電気のヒューズは電気機械のショートなどによる過電流が流れると焼き切れ、機器の過熱による他の部品の故障や、使用者への危険を回避することができる。
フールプルーフ設計
フールプルーフ(fool-proof)は日本語では馬鹿除けまたは馬鹿避けとも言い、なんら知識をもたない者が誤った用法で事故に至らないようにする仕組みと知識を持たずとも簡単に操作できるようにした相反する仕組み・設計・思想を指す。同じ意味としてフールセーフティ (Foolish Safty)を用いる場合もある。
乳幼児などは目に付くものを手に取り、口に入れることが多く、医薬品などの蓋を開けて中身を飲み込み重篤な事故に至ることがある。医薬品を製造する企業はこれら事故への方策として、蓋を回すだけでは開かない仕組みとして特定のボタンを押しながら回さないと開かない仕組みを考案して対処した。
人間工学の観点からはパニック時に予期せぬ行動をとることを観察して、万一の場合にも重大な事故が起きないように複数手順を経なければ実行できない仕組みや検証を行なった。この過程からフィードバックという事後処理への対処方法が生まれ、その後、予期できることはあらかじめ対処するフィードフォワードの考え方が生まれた。
冗長性設計
(Redundancy design)機械は普通、多くの部品から成り立っており、そのうちのひとつが壊れても機械全体が連鎖的に停止してしまう場合がある。このようなことが起きないためには部品が故障しても他の部品により機能を代替できるようにするなど、故障を予め考慮した構成の機械とする。このように故障時の代替機能を果たす機能を「冗長系」という。冗長系を有するような設計、すなわち冗長性設計を行い、信頼度を高めることができる。
特に故障により人命や財産が失われたり、企業における営業活動が大きな打撃を受けるよう機器・システムの場合、冗長性設計が必須である。例えば、中型以上の航空機ではエンジンを複数備え、1基が故障しても残ったエンジンで飛行が継続できるのが普通である。電化された鉄道では変電所を複数もち、どこかの変電所が故障しても、他から電力を供給することによって一定の運転を続けることができる。また9.11テロの時、NYの企業の多くは「バックアップ・オフィス」で仕事を継続した。
———-
フェイルセーフ ( ウィキペディア )
フェイルセーフ(fail safe)は、なんらかの装置、システムにおいて、誤操作、誤動作による障害が発生したした場合、常に安全側に制御すること。またはそうなるような設計手法で信頼性設計のひとつ。これは装置やシステムは必ず故障する、あるいはユーザは必ず誤操作をするということを前提にしたものである。
機械は壊れたときに自然にあるいは必然的に安全側となることが望ましいが、そうならない場合は意識的な設計が必要である。 たとえば自動車はエンジンが故障した場合、エンジンの回転を制御できないような故障ではなく、回転が停止するような故障であれば車自体が止まることになり安全である。このため、回転を止めるような故障モードに自動的に(自然に)落とし込むような設計思想がフェイルセーフとなる。 飛行機の場合はエンジンが回転停止した場合、墜落ということになりフェイルセーフとはならない。しばらくは滑空し無事着陸できるような機体設計にする、フォールトトレラントという別の思想が必要である。
鉄道車両は、(空気圧で動作する)ブレーキに故障があった場合、非常ブレーキがかかるように設計することがフェイルセーフとなる。たとえば、何らかの衝撃で車両間の連結が外れた場合は必ず非常ブレーキが作動するようにするため、空気圧をかけなければブレーキが緩解しないように設計されている。これにより、連結が外れて配管が切れた場合でも、大気圧の力によって非常ブレーキがかかる。
鉄道信号は、何らかの異常で故障した場合や、停電となった場合は赤信号(停止)になるように設計することにより、これより先には進めないようになっているのが、フェイルセーフである。交通信号においても、制御機が故障した場合などは、全方向の信号を赤にし、交通の混乱が最低限避けられるようになっている。停電した場合は、発電機付きの信号を除いて灯火が消える。
踏切の遮断機においても、遮断棹が上がっている状態を維持する場合に力をかけなければならないように設計されている。そのため、停電などが起きて遮断機が作動しなくなっても、重力によって自然と遮断棹は下りたままになり踏切内への立ち入りを防止するようになっている。
—–
【なぜバグは起きるのか】
まずは質問。
椅子と椅子の間に幅30cm長さ1mの板が渡してあるとする。この間を落ちずに渡ることができるか?
これは多分たいていの人ができます。
それでは同じ幅・長さの板が、高層ビルと高層ビルの間の非常避難路に渡してあった時はどうか?
これは渡れる人はたぶん半分くらいでしょう。
符号1個の付け忘れのプログラムのバグで宇宙ロケットが誤って爆発してしまったという事故が以前アメリカでありました。多くの人は「なんでそんな簡単なものをミスるんだ」と思ったかも知れませんが、バグというのは上の板のようなものです。
通常の状態の中で見れば気づくはずのものが、その高度に組み上げられた長大なシーケンスの中では見落とされてしまう。
それをプログラマ個人の責任だというのは、あまりにも酷でしょうし、そうとしか考えなかったら、人類にはある程度以上のサイズのソフトは組めません。またもう今後プログラマーになろうという人は出てこないでしょう。
(同様の問題が近年病院で起きつつあります。早めに手を打つ必要があります。でないと50年後には医学生も看護学生もいなくなります)
更にこうしたらどうでしょうか。
幅30cmの板を、ドーバー海峡に渡した。この海峡をこの板の上を歩いて落ちずに渡ることができるか。ドーバーでできるのなら、太平洋の東京とサンフランシスコの間ではどうか?
人間の注意力だけに頼って、何十万行・何百万行といった大きなプログラムをバグ無しで組もうとするのは、そのくらい困難なことです。
(2000-07-18)
【古い機械と新しい機械】
松本零士さんの「銀河鉄道999」にこういう語りが出てきます。
『機械には二種類ある。歯車の2〜3個取れてもなんとか動き続ける機械とどこか1ヶ所でも悪くなると全体がダウンしてしまうもの。昔の機械には前者が多かった』
ワインバーグという人はこんな事を言っています。
『プログラマーがプログラムを書くようなやり方で建築家が設計をしたら、キツツキが一羽とんできただけで町が崩壊してしまう』
松本さんが皮肉ったのも近年のコンピュータを利用した機器のことでしょう。
いつだったが私が専門学校出たてのプログラマのソースをチェックしてあげていたとき、こんな感じのコーディングに出くわしました。
IF IN-SOK >= 10 AND IN-SOK 30 AND IN-SOK 50 AND IN-SOK <100
OUT-TAN = IN-SOK * 30 – 300.
「ね、このプログラム IN-SOKが10未満の場合はどうなるの?」
「IN-SOKは10以上の数字しか入力されません」「オペレータの人が間違って入力してたら?」
システムのバグの多分8割程度はこの手の問題である。正しい操作が行われている限り問題なく動いているが、利用者がミスをした時に、それをカバーしきっていないのである。
ということで、明日はいよいよ「フェイルセーフ」について書きます。
(2000-08-05)
【ファイルセーフ・フェイルソフト】
現代の航空機には多数の「フェイルセーフ」(fail safe),「フェイルソフト」(fail soft) の機構が組み込まれています。
基本的に、どこかにトラブルがあっても他の部分でカバーして全体の機能に影響がでない仕組みを「フェイルセーフ」といい、若干機能が落ちるもののなんとか動く場合を「フェイルソフト」といいます。
フェイルセーフを実現するには「予備の回路」が必要であり、フェイルソフトはいくつものバイパス機構が必要です。
現在の大型ジェット機は2〜4個のエンジンを持っていますが、この内幾つかのエンジンが止まっても1個だけでも動いていれば、その1個だけで飛び続けることが可能です。更にはエアバス(エンジン2機)になりますと、両方止まってしまった時のために非常用のプロペラが翼の中に内蔵されており、最後の最後にはこれが自動的に飛び出して最低限の浮力を確保するようになっています。これで長時間の飛行は困難だと思いますが近くの空港までくらいはなんとかなるはずです。
以前タイ航空のA300機内で日本の暴力団員が手榴弾を誤爆させてしまった時、エンジンが両方停止してしまったのですが、このプロペラのお陰で無事着陸させることができました。
先日のコンコルドの事故の場合は、第二エンジンにトラブルがあった時に本来なら供給が停止するはずの燃料の供給が止まらず、流れ続けてそれが爆発につながってしまったようです。当時(1969初飛行)はまだそのあたりのフェイルセーフの思想が弱かったのかも知れません。
航空機でそのあたりのことが相当強く言われて誕生したボーイングの767はコンコルドより10年後の1981年初飛行です。エアバスA300は1987年初飛行。767やA300では安全性が高いため航空機関士を乗せずに、機長と副操縦士の2人だけで飛ばすのが一般的になっています。これらの飛行機は飛んでいる最中はほとんどコンピュータ(オートパイロット)が飛ばしているようなもので、人間が本当に操縦するのは離着陸の時だけです。
一般の企業ソフトで散々な言われようのするこの問題ですが、航空機のシステムにおいては、この技術に関して長い蓄積があります。
(2000-08-06)
【ファイルセーフとミスの関係】
フェイルセーフ機構は万一の時に二重三重の備えをしておき重大事故を防ぐための備えです。
ですからここで勘違いしてもらっては困るのは「フェイルセーフがあれば、多少のミスは許される」という安易な考え方です。
アメリカのライト・フィールド研究所のエド・マーフィー空軍大尉は1949年エドワーズ空軍基地で If something can go wrong, It will. と発言し、これが「マーフィーの法則」と一般に言われています。
マーフィーの法則に関する巷の本は笑い話的にこれを扱っていますが、実際は「絶対間違いが起きるから、それを避けるようにすること」という教訓がここにはあります。
「ここには1963から2005までの数値しか入れないでください」
などとソフト技術者はよく言うわけですが、そう言われていても、うっかり入れてしまうことはある。その結果ファイルが蒸発してしまったらまずい。
マーフィー大尉は「間違う可能性があったら、絶対誰か間違う。だから間違わないように設計してくれ」と言ったわけです。航空機のシステムにはこういう思想が徹底しています。
ただ問題は「どこまでカバーするか」ということになります。通常の利用の仕方で100万年に1度しか起きないような事態まで想定してシステムを作っていたら、システムの開発に莫大なお金がかかってしまいます。
ですから「手を抜く」ことも必要になります。これはミスとは別の問題。
一般に企業システムなどは開発者が利用者の近くにいるため、何かの事態が起きた時もすぐに対処できます。そのため、多くの企業システムの開発者は数ヶ月に1度程度しか起きないくらいのことは無視して設計作業を行っています。そしてそういう事態の時は「こう操作して欲しい」と言っておきます。
しかし、その時指示通りにオペレータが操作してくれなくて困ったことが起きても「復旧不能」にはならないような仕組みを必ず組み込んでいるものです。これは事実上のフェイルソフト。
しかしこれは一種のマキアベリズムであり、こういう哲学が欠けている設計者は実際に事故が起きてから「申し訳ありません。復旧できません。伝票を再度入力して下さい」などと、とんでもないことを言い出します。
こういうフェイルソフト思想というのは大っぴらに発言すると「君はこのシステムがダウンすると最初から思っているのかね。そんなことでは困るじゃないか。きちんと作ってくれよ」などとしか言われません。だから沈黙しておき、誰にも気づかれないように、また他のシステム技術者が分析しても意図的に組み込んだとは思われないように、巧妙に仕組んでおきます。
例えばファイルを更新する時、一般にいったん一時ファイルに書き出してから、書き戻しながら更新するというのはよく行われる手法です。こういう一時ファイルは作業を始める前に確保して、終わったら消去すればいいのですが….わざと手を抜いて、消さずに残しておくのが良い。何かの時のバックアップになるからです。しかもこの作業は
A.更新しながら一時ファイルに書き出してからコピーして戻す。
B.一時ファイルにコピーしてから、更新しながら書き戻す。
という2通りの方法がありますが、絶対 B にすべきです。Aでは終わった時一時ファイルにはマスターと同じものしかありませんが、Bだと一世代前が残せるからです。
しかしこういうことを理解している多くの設計者はこういうことを誰にも教えません。人に言った瞬間「ダウンする原因を取り除くべき」という「正論」にさらされてしまうから。
だから、これはマキアベリズムなのです。こういう人が作ったシステムには一見「ムダ」とか「手抜き」と思われるようなシステムの「枝葉」が付いています。
さて、企業システムで数ヶ月に1度程度の事態を無視している一方でマイクロソフトなどの超大手が作成したパッケージソフトになると、エラー確率がそういうシステムの100分の1以下くらいまで減らされています。多数の顧客に利用されるシステムはそれだけ事故発生率が高くなるので、逆に製造段階で確率を下げておかないと使い物にならない。
多くのソフトハウスが1990年代に消滅していった裏事情がここにあります。ソフトの価格が安くなっている中で利益を上げるためには大量販売ができなければならない。しかし大量販売するにはバグの率を下げるための開発投資が必要。しかし資本金が数千万円以下の小さなソフトハウスにそんな投資は不可能。結局そういう所は生き残れない社会構造になってきたのでしょう。
しかし逆に最近のそういう低エラーのソフトはフェイルソフト機構がどうも弱すぎるような気がしています。
MSDOS時代のテキストエディタには万一途中でシステムが落ちた時に作業用の一時ファイルからテキストを復旧する機能が付いていたものがあります。これに対して最近のマックやウィンドウズのエディタでこういうのはあまり見ません。ダウンの時のために何分かおきにデータをセーブする仕組みを持っているものがありますが、こういうソフトは「セーブして欲しくなかったのに勝手にセーブされていた」という事故を引き起こしています。
「ダウンした時に限って適切なバックアップが存在しない」
これもマーフィーの法則。
(2000-08-07)
【本来は本格的に組み込むべき】
さて企業システムでは肩身の狭いフェイルセーフ思想ですが、本当はちゃんと理解してもらって、本格的に組み込むべきです。
コンピュータのハードのレベルでは例えばメモリのECC機能みたいなものがあって、自己チェックしながら動いています。昔のACOS600なんてマシンは1バイトが9ビットになっていて、これもパリティチェックをしながら動いてました。この機械は主に科学技術計算に使用されていましたので、ダムの設計とか原子力発電所の設計とかで万一にもミスがあっては、ということで重宝されていたと思います。
ソフトにもこういう仕組みは必要です。監査法人のトーマツなどは1990年頃からこういう問題をかなり強調していました。
伝票の借方・貸方などは1980年代頃までの多くのシステムでは矛盾が原理的に起きないようになっていましたが、これがまずい。原理的に矛盾が起きないシステムでは、本当に誤りがあっても気づかれません。
わざと処理の経路を複数化して、両方の結果を比較すべきです。
また、日計を日々累積していったものと、個々の伝票から再集計したものとの比較、などといった仕組みが自動的に動くようにしておくべきです。
ただ、こういうシステムを組み込む時に一番困るのが「精密にしてしまうと誤魔化せないじゃないか」という声です。
私も一度はっきりと「決算前に伝票を調整したいからね。過去の伝票を直接変更できないというのは困るんだよね」などと客先から言われたことがあります。受注しているソフトハウスのSEとしては、こういうことを言われても「それはダメです」とは言えない。
客先の社長さんなどと話をしている時には「修正伝票入れるのが正しいやりかたなんですよ」と言えるし、結構納得してくれるのですが、それ程の権限を持っていない人と仕様の詰めをせざるを得ない時は、相手が「今のやり方」を変えようとしてくれないので、こちらも妥協せざるを得ない。万一警察の捜査が入った場合は共犯に問われるかも知れませんが、やむを得ないところでしょう。
最初からごまかしたい人の前にフェイルセーフは意味を持ちません。
(2000-08-08)
—–
フェイルセーフ 【fail safe】
故障や操作ミス、設計上の不具合などの障害が発生することをあらかじめ想定し、起きた際の被害を最小限にとどめるような工夫をしておくという設計思想。
例としては、石油ストーブが転倒すると自動的に消火するよう設計されていることや、加圧水型原子炉の制御棒の電源が切れると制御棒が自身の重さで炉内に落下して自動的に炉を停止させるよう設計してあることなどが挙げられる。
—–
1.事故
◆ドアを開けた状態でバック、乗用車が暴走、幼児をひき死亡
福井県大野市で11日午前11時ごろ、車庫兼倉庫に乗用車を駐車した主婦(35)が、2歳の二男と共に車を降りたところ、主婦は車の止め方が気に入らず、車のドアを開けた状態で、車外にいた二男と手をつないだまま、少しだけ車をバックさせようとしたところ、車が突然暴走、シャッターの支柱をなぎ倒して道路に飛び出し、近くの住宅の壁に衝突して止まった。
その際、二男が車の下敷きになり、頭を強く打って間もなく死亡した。
大野署は、主婦が運転を誤ったとみて原因を詳しく調べている。
<自動車ニュース&コラムhttp://www.carshop.net/mailnews/2000/5/16号より>
2.要因
この痛ましい事故が起こった原因は何か。それはもちろん「車のドアを開けた状態で、車外にいた二男と手をつないだまま」クルマを動かしたからである。なぜ主婦はそのような行為をしてしまったのだろうか。我々だったらどうか。そのような行為をするかどうかの違い。それは「フェイルセーフ」に対する認識の差。これが事故の本当の要因なのだ。
3.フェイルセーフとは
fail safe、失敗に対する安全。人間は失敗する、機械は壊れる。そういった事を当たり前の前提としてとらえ、あらかじめそれらに対する予防策を講じておくこと。それがフェイルセーフである。自動車のブレーキ配管がX字型に2系統にされているのもそう。新幹線の線路には一切立入りが出来ないようになっているのも、同じく上り線と下り線の線路が完全に区別されていて正面衝突の可能性自体を無くしている(現在は一部違うようだが)のもフェイルセーフの一つである。
大事なのは失敗する、壊れる可能性を前提に置くこと。それは既存の機械やシステムだけの事ではない。クルマに関わる我々の生活の中でも頭に置いておくべき問題なのである。
4.意識すべきこと
「ドアの外の子供と手をつないだまま」クルマを動かすことがなぜいけないのか。もしアクセルを踏み間違ったら?もしハンドルを握っている手が滑ったら?風が吹いてドアが動いたら?子どもが母親の方に向かって動いてきたら?・・・考えうる「フェイル」があるからである。
その主婦はこれらの「フェイル」が頭に無かったはずである。もしくは頭にあっても重大事故になる危険性を感じなかったか、もしくは自分の運転に自信(過信)があったかのどちらかである。赤信号で進むことは教習所で教えられなくとも危険性が分かる。しかし「車外の子どもと手をつないだままバックする」事の危険性に対する想像力(予測力)が欠如しているのである。
クルマはどんな速度でも危険、というのが僕の持論である。だからこそ考えられる危険性はできるだけ排除して運転するようにしている。同乗者が確実にドアを閉め、シートベルトを締めるまで発進はしない。見通しのきかない交差点は必ず徐行する。エンジンをかけるときはギアのNを確認し、クラッチを踏みながらかける。等々。
人間は必ず失敗します。始めから予防線をはっておくことが大事。もし、という想像力を最大限に働かせてあらかじめ対策の方を起こしておくこと。それが事故を防ぐ有効な手段である。
5.余談、というか分かりやすい話
トイレに財布や携帯を忘れたこと、ありませんか?トイレで邪魔だと思った瞬間にポイと「そこらへんに」物を置いてそのまま出てきてしまう。そんなときは始めから「絶対に忘れない場所」に物を置けばいいんです。扉の取っ手など「必ず」手が触れる場所にそれらを置いておけば、絶対に忘れたりしないでしょ?それが「フェイルセーフ」です。
———-
フォールトトレラント設計 ( ウィキペディア )
フォールトトレラント設計(Fault tolerant design)は、システム設計の手法であり、システムの一部に問題が生じても全体が機能停止するということなく(たとえ機能を縮小しても)動作し続けるようなシステムを設計するものである。 この用語はハードウェアあるいはソフトウェアの障害があってもほとんど途切れることなく動作し続けるコンピュータシステムの設計を指して使われることが多い。 他の領域の例としては、自動車の設計でタイヤが一本パンクしても走行できるような設計を指す。
手法
フォールトトレラントな部品
部品それぞれが内部に異常を発生しても部品として機能し続けることができれば、システム全体としても機能し続ける。自動車の例で言うと、自動車にはランフラットタイヤを装備しているものがある。これは、内部に硬いゴムの層を持っているもので、表面がパンクしても走行が可能となっている。走行できる時間は限られているしスピードも落とす必要があるが、従来のタイヤから見れば大きな進歩と言えよう。
冗長性
これはバックアップの部品があって、障害が発生したときに自動的に代替して動作するものである。例えば、大型トレーラーではタイヤをひとつ失っても大きな問題とはならない。多くのタイヤを持っているため、タイヤひとつでは危険ではない(操縦の役割がある前輪はそうではない)。(訳注:あくまでも自動車の走行という話であって、外れたタイヤがころがっていくと危ないという話は別問題)
欠点
フォールトトレラント設計の利点は明らかだが、欠点はないだろうか?
障害検出の阻害
また同じ例で説明すると、タイヤ1個がパンクしたことは運転手には分からないかもしれない。これはフォールトトレラントシステムでも同様である。この問題は分離された「自動障害検出システム」が処理するのが一般的である。タイヤの例では、空気圧モニターが空気圧が減っていることを検出し、運転手に知らせる。代替案として「手動障害検出システム」があり、自動車が停車するたびにタイヤをチェックするようなものである。
障害修正の優先順位の低下
操作者が障害に気づいても、フォールトトレラントシステムではそれを直すことがおろそかになる危険がある。障害が修正されない場合、フォールトトレラントな部品全体が動かなくなったり冗長部品が全部障害となったりすると、システム全体の障害を引き起こすことが考えられる。
試験の難しさ
原子炉のような危険なフォールトトレラントシステムでは、バックアップが機能するかどうかを事前にチェックする簡単な方法はない。最も悪名高い例はチェルノブイリ原子力発電所である。彼らは緊急用のバックアップの冷却機能をチェックするために第一と第二の冷却機構を停止させてテストしていた。そのときにバックアップが動作せず、結果としてメルトダウンと放射能汚染が起きてしまった。
コスト
フォールトトレラント部品も冗長部品もコストを増大させる。これは単に経済的なコストだけではなく、例えば全体重量を増大させるなどの問題も含む。例えば、有人宇宙船は何重にも冗長なフォールトトレラント部品を搭載しているため、安全性をそこまで求められない無人宇宙船よりもずっと重量が大きくなる。
どんなときフォールトトレラント設計をするのか
すべての部品に対してフォールトトレラント設計を施すのは得策ではない。 どの部品をフォールトトレラントにすべきかを決定するには以下のような判断基準が考えられる。
その部品はどれだけ重要か? 自動車では、ラジオは重要ではない。したがって、ラジオをフォールトトレラント設計する必要性は低い。
その部品はどのくらい障害を起こすか? 自動車のドライブシャフトのように、いくつかの部品は故障することはほとんど考えられないので、フォールトトレラント設計の必要性は低い。
その部品をフォールトトレラントにするのにかかるコストは? 例えば、自動車のエンジンに冗長性を持たせるとすると、経済的にも重量やサイズもコストが高くなることが予想される。
全ての条件に適合した部品の例として自動車の搭乗者拘束システム(シートベルトやエアバッグ)がある。我々が意識しない第一の搭乗者拘束システムは重力である。自動車が転覆などした場合、重力による拘束はなくなってしまう。このような事故の際に搭乗者を拘束するのは安全上非常に重要なので、第一の条件に合っている。
シートベルトがない時代には事故によって搭乗者が外に放り出されることがよくあった。したがって第二の条件にも合っている。シートベルトなどは価格的にも重量的にもコストは高くない。したがって第三の条件にも合っている。以上のことから、シートベルトを全ての自動車に装備するのはよい考えと言える。その他のエアバッグなどの補助部品はやや高価なので、条件に適合しないかもしれない。このため、安価な自動車にエアバッグを搭載していないものが(高価な自動車よりも)多いのである。
実例
コンピュータではフォールトトレラント性は重要である。タンデム・コンピュータは、同社のビジネスをフォールトトレラントなシステムを開発/製造/販売するものとしていた。同社のNonStopシステムは「シングルポイント・トレラント」なシステムであり、十年間の動作時間の計測をして公表していた。 (訳注:障害などの発生確率から、動作不能となる時間の割合を算出。例えば10年間で1日だけ動作できないなどといった形である)
ハードウェアのフォールトトレラント性は、故障した部品をシステム動作中に交換することを要求する場合がある。 このようなバックアップがひとつだけ存在するシステムを「シングルポイント・トレラント」と言う。フォールトトレラントシステムと呼ばれているものはほとんどこのタイプである。このようなシステムではMTBF(故障発生間隔の平均時間)が十分に長くないと、部品交換中に使用中のバックアップも故障してしまうことがある。MTBFが長ければ長いほど良いが、フォールトトレラントシステムに特にそれが求められているわけではない。
関連用語
フォールトトレラントシステム(故障しても動作するシステム)と滅多に故障しないシステムは違う。例えば、ウェスタン・エレクトリック社のクロスバー交換機システムは40年間に2時間という故障発生確率であり、非常に故障しにくい(フォールト・レジスタント)と言える。しかし、ひとたび故障するとシステムは完全に停止するので、フォールトトレラントとは言えない。
—–
フォールトトレラントシステム ( ウィキペディア )
フォールトトレラントシステム(Fault tolerant system)は、その構成部品の一部が故障しても正常に処理を続行するシステムである。障害が発生した場合、単純な設計のシステムでは少しの障害でも全体が停止するが、フォールトトレラントシステムでは完全に機能を保ったまま処理を続行するか、障害の重大性に応じて機能を低下させながらも処理を続行する。フォールトトレラント性は連続稼働が求められるシステムや人命に関わるシステムで特に求められる。
フォールトトレラント性は個々のマシンの特性というだけではなく、マシン間の連携についての規則の特性でもある。例えば、TCP はパケット通信ネットワーク内に不完全なリンクや高負荷のリンクがあっても信頼性の高い双方向通信ができるように設計されている。これは受信側でパケット喪失、パケット二重化、順序変更などがあるものとしてプロトコルが設計されているためであり、結果として通信性能が低下してもデータの正確性が損なわれないようになっているのである。
データ形式も同様な考え方を当てはめることが出来る。例えばHTMLは上位互換を維持するよう設計されているため、新たな機能を使ったHTMLを古いブラウザが読み込んだとき、それを処理できないものとして捨てるのではなく理解できる範囲で表示することができる。
フォールトトレラントシステムにおける障害復旧はロールフォワード(roll-forward)とロールバック(roll-back)に分けられる。システムに障害が発生しエラーとなったとき、ロールフォワード復旧ではその時点のシステム状態で復旧を行い、処理をさらに先に進める。ロールバック復旧ではシステム状態を少しだけ前に戻して(例えばCheckpointingを使って)そこから処理を再開する。ロールバック復旧では、チェックポイント(戻す地点)と障害発生地点との間の処理は冪等(何度実行しても一回実行したのと同じ)でなければならない。いくつかのシステムはエラーの種類やエラー発生箇所によってロールフォワードとロールバックを使い分けている。
個々のシステム内では、フォールトトレランス性は例外的な状態を想定してそれに対処できるようにシステムを構築することで実現される。また、一般に自己安定性を持たせることによってシステムがエラーのない状態に収斂させることでフォールトトレランス性を実現する。しかし、システム障害が重大でそれに対処するのに非常にコストがかかる場合、よりよい方法は何らかの二重化をすることである。
二重化によるフォールトトレラントシステム
二重化によるフォールトトレラント性は三つに分類される。
レプリケーション:同じシステムの複製を複数用意し、それら全部に同じ処理を並列に実行させ、定足数を満足した結果を正しい結果として採用する。
冗長性:同じシステムの複製を複数用意し、障害が発生したら予備のシステムに切り替える。
多様性:同じ仕様の異なる実装のシステムを複数用意し、レプリケーションのようにそれを運用する。この場合、各システムが同じ障害を発生することがないと考えられる。
RAIDは冗長性を活用したフォールトトレラントな記憶装置の例である。
ロックステップ方式のフォールトトレラントマシンは各部分を多重化して並列して動作させる。多重化された各部分はどの時点で見ても全く同じ状態でなければならない。同じ入力を与えた場合に同じ出力が得られることが期待される。多重化部分の出力は多数決回路に集められ比較される。各部品を二重化したマシンはdual modular redundant(DMR)と呼ばれる。この場合、多数決回路は結果が異なっているということしか分からないので、復旧は別の方法で行う必要がある。各部品を三重化したマシンはtriple modular redundant(TMR)と呼ばれる。この場合の多数決回路は比較結果が2対1になったときにエラーを判定するので、正しい(と思われる)結果を出力することができ、エラーと判定された結果を捨てることが出来る。その後、エラーを発生させた複製部品は故障したものとみなし、多数決回路はDMR状態に移行する。このモデルはもっと多くの複製についても当てはめることが出来る。
ロックステップ方式のフォールトトレラントマシンは簡単に完全同期させることができ、各複製部品は同じクロックで同期して動作する。もちろん、各複製をクロック同期させないロックステップシステムも構築可能である(多数決回路で待ち合わせる)。
(訳注:ただし、クロック同期しない場合、故障によって出力を多数決回路に送れなくなった部品をどう扱うかが問題となる。)
複製を同期させるには個々の内部状態が一致していなければならない。リセット状態などの同じ内部状態からいっせいに動作を開始するのである。一方で、複製間で状態をコピーするという方法もある。
DMRの一種にpair-and-spareがある。ふたつの複製部品がロックステップで同じ処理を行い、多数決回路が相異を検出したらエラー信号を出力する。もうひとつの二重化システムが全く同じ処理をしていて、ふたつの二重化システムの出力を比較してエラーとなっていない方を採用する。pair-and-spare では云わば四重化であって TMR よりも冗長だが、商用システムで採用された例もある。
———-
フールプルーフ ( IT 用語辞典 )
フールプルーフ 【fool proof】
工業製品や生産設備、ソフトウェアなどで、利用者が誤った操作をしても危険に晒されることがないよう、設計の段階で安全対策を施しておくこと。正しい向きにしか入らない電池ボックス、ドアを閉めなければ加熱できない電子レンジ、ギアがパーキングに入っていないとエンジンが始動しない自動車、などがフールプルーフな設計の例である。
「fool proof」を直訳すれば「愚か者にも耐えられる」だが、その意味するところは「よくわかっていない人が扱っても安全」。その思想の根底には「人間はミスするもの」「人間の注意力はあてにならない」という前提がある。安全設計の基本として重要な概念である。
—–
中央大学理工学部教授 中條武志
1.フールプルーフとは
最近の生産工程においては,人が作業する際にちょっとした気の緩みから犯す度忘れ,見間違い,勘違い,つかみそこない等のミスに起因する事故や品質問題が次第にクローズアップされてきている。このような現状に対して多くの企業で取られている対策の一つがフールプルーフである。
作業ミスの発生に関係する要素としては,(1)指示票の書式,治工具の形状,手順などの作業方法に関するもの,(2)知識,技能,モラルなどの作業者に関するもの,(3)生産量の変動,騒音などの作業環境に関するもの,の三つがある。作業者や環境に関する要因を改善するために,教育・訓練を実施したり,生産量の平滑化をはかることはミスを防止するための重要な要素ではあるが,疲労や慣れにともなう注意力の低下は避けられず,これだけでは充分な効果は期待できない。標準的な人であれば経験が無くともどのような体調や精神状態で作業してもミスしにくいようミスしても大丈夫なように作業方法を改善すべきである。フールプルーフとは,このような観点からのミス防止に対するアプローチであり,「作業ミスに対処するための作業方法に関する総合的な工夫」である。
2.フールプルーフ化の原理
実際の生産工程で行われているフールプルーフには様々なものがあるが,それらは大きく二つのタイプに分類される。一つは,ミスが発生する過程に着目したものであり,もう一つはミスの影響が波及する過程に着目したものである。
ミスの発生を防ぐ最も効果的な方法は,「作業を行なわなくてもすむようにする(排除)」ことである。また,これが困難な場合の方法としては,「作業を人間に任せないようにする(代替化)」や「作業を人間にとって容易なものにする(容易化)」が考えられる。他方,ミスの影響が拡大することを防ぐ一つの方法としては,「ミスを検出し処置する(異常検出)」が考えられる。またもう一つの方法として,「ミスの影響を緩和するような作業や緩衝物を組み込んでおく(影響緩和)」がある。以上の五つがフールプルーフ化,すなわち作業の方法を改善することによってミスによる不具合の防止を行なう場合の基本となる考え方である。
3.排除
『排除』は,作業や作業上の制約を必要ならしめている要因を取り除き,作業や注意を不要にするという考え方である。
例えば,製品を金属製のワイヤーで吊る時に当て木(製品にきずを付けないために)をし忘れるミスを考えてみよう。このミスに対するフールプルーフ化の一つの方法としては,ワイヤーの代わりにナイロン製の帯状の吊具を用いることが考えられる.これは吊具の特性を変えることで当て木をする作業を不要にしており,排除の考え方に基づくフールプルーフ化の一例といえる。
また,水気のあるところで交流式のライトを用いて感電するミスに対して乾電池式のライトを用いるというのも,水気のあるところで使用してはならないという注意事項の生じる要因となっているランプの危険な特性を排除しているわけであり,やはりこの考え方に基づくフールプルーフ化の例である。
図1: 排除によるフールプルーフ化の例
4.代替化
『代替化』は,作業者が行なっていることをより確実な何等かの方法で置き換え,作業者が作業しなくともよいようにするという考え方である。
例えば,どのような作業を行なうかを示した指示票を見間違えて,誤った部品を組付けるミスに対する方法としては,送られてきた部品組立品の形状を治具やセンサーで検知し対応する仕様の部品箱にランプをつけることが考えられる。これは検知装置による代替化の例である。
また,手順の抜けや回数不足等のミスを防止するために作業の内容と順序の一覧表を作成したり,出庫作業における部品の数え間違いを防止するために内部を仕切って入る部品の数を一定にした専用の通い箱を用いるなどの工夫もこの考え方に基づくフールプルーフの例である。これらは作業の内容を覚えておく,部品を数えるという作業を一覧表や箱に行なわせていると考えることができる。
図2: 代替化によるフールプルーフ化の例
5.容易化
前の二つの『排除』と『代替化』が作業者が作業を行なわなくてもいいようにする考え方であるのに対し,『容易化』は作業を作業者の行ないやすいものにしてミスを低減させるという考え方である。これには,(1)共通化・集中化,(2)特別化・個別化,(3)適合化の三つの要素が含まれる。
『共通化・集中化』というのは,作業上の変化や相違を少なくするために,「作業の内容や対象がなるべく共通なものになるようにする,あるいは関連する作業や対象は続けて作業する,一箇所に集める」という考え方である。
例えば,仕様Aの製品に対しては部品Xの組付けが必要であるが仕様Bの製品に対しては不要である場合,部品Xの組付け忘れを防止する共通化・集中化の方法としては,仕様Aを続けて生産し次に仕様Bを作る,仕様Aと仕様Bを別々のラインにすることが考えられる。また,組付ける部品を選び間違えるミスに対する方法としては,作業指示票の記号と部品箱の記号を共通なものにする,同じ仕様の部品は一箇所にまとめておく等がある。
図3: 容易化によるフールプルーフ化の例
以上のような方法で変化や相違を少なくすることは間違いを減らすための有効な方法であるが,これらはある程度までは可能としても完全に行なうことは困難である。この場合は逆に「異なるものの差を鮮明にすることによってミスを減らす」ことが考えられる。これが『特別化・個別化』である。
例えば,先の組付け忘れの例に対する特別化・個別化の方法としては,仕様Aと仕様Bの作業順序を全く別にすることが考えられる。これは両方の作業の類似性を取り除き混同の可能性を少なくしていると考えることができる。また,組付け部品の種類を間違えるミスに対する方法としては,部品を色分けする,似た部品をできるだけ隣合わせにしないように並べておく等がある。
『適合化』というのは,見やすくするために小さな文字を大きくする,運びやすくするために重い物を分割して軽くする,持ちやすくするために取手をつける等であり,「作業の対象を人間の能力に合ったものにする」ことである。
6.異常検出
『異常検出』は,作業ミスが発生しても,引き続く作業系列の中でそれに起因する標準状態からのずれが検出され是正されるようにするという考え方である。
例えば,ボルトの締付けを一箇所を抜かしてしまうミスに対するフールプルーフとしては,トルクレンチ(工具)の作動をリミットスイッチで検知するようにしてワークが流れてきた後一定時間の間に規定回数だけ使われたかどうかを判定し,使われていないと警報ブザーを鳴らすという方法が考えられる。
部品を選び間違える等のミスに対する異常検出の例としては,部品の取り出しを光電管で検知し,前工程の作業と合っていないと工具の電源を切るとか,部品の形状を工夫して誤部品は組付かないようにする等がある。(作業を不可能にすることによってミスの発生を作業者に気付かせている)。
7.影響緩和
『影響緩和』は,作業ミスの影響をその波及過程で緩和吸収することを目的とし,作業を並列化するあるいは緩衝物や保護を設けるという考え方である。
例えば,装置の電源を切り忘れてモータが焼きつくミスに対しては,作業者に装置の手元電源を切らせ班長に職場の主電源を切らせることが考えられる。また,ヒューズを付けてモータの温度が規定値以上に上がると自動的に電源が切れるようにする方法もある。前者は作業者と班長が同時にミスしない限り正しい結果が得られるように作業を並列化しており,後者は電源を切り忘れても焼き付かないようにモータを保護している。