2012-08-18

ISO 26262との向き合い方 (13) 機能安全の歴史的背景1


ISO 26262の理解を深めるために、書籍『機能安全/機械安全規格の基礎とリスクアセスメント―SIL、PL、自動車用SILの評価法』 を読んだ。

今回は、この本に書かれていることの一部を紹介したいと思う。ちなみに、国際規格を理解するためにはその規格が制定された背景を知るべきだと常々感じていたのだが、この本を読んでよりいっそうそのことを痛感した。一般的に、国際規格自体にはその規格が制定された裏側の背景は詳しくは書かれない。規格のAppendix に表の背景が書かれることがあるので、Appendix は読み飛ばさずにじっくり読むべきだが、表も裏も含めた背景を知るのに一番いいのは規格策定に参加した委員に話を聞くことだ。

ISO 26262 は IEC 61508 に強い影響を受けいる、というよりはISO 26262 は自動車版の機能安全規格である。だから、ISO 26262 を知る上で IEC 61508のことを知ることは意味がある。『機能安全/機械安全規格の基礎とリスクアセスメント―SIL、PL、自動車用SILの評価法』 の著者、現東京海洋大学海洋工学部 佐藤吉信 教授 は、現在、IEC 61508の策定・改訂国内委員の主査である。よって、IEC 61508 や ISO 26262 ができてきた歴史的な背景も詳細にこの本に記載されている。ISO 26262 について理解を深めたい人はこの本を一度読んでみることをお勧めする。

IEC 61508 が制定された歴史的背景

まずは、歴史的背景から、その一部を紹介しよう。

<仕様規定と非関税障壁の問題>
  • 1985年前後に欧州で製造物責任法の相次いで施行され、製品製造業者がこの法律に過度に反応した。
  • それに伴い製品に関わる安全規定策定の動きが各国において一斉に生じた。
  • それらの規定は各国の製品製造業者によって策定されることも多く、結果的に製造業者の製品に合致する設計仕様規格となった。
  • このようにして1980年代から1990年代には、欧州各国の安全規格による非関税障壁の問題が多発した。
  • 欧州内での製品の流通を円滑にするために各国ごとの安全規格を統一することが必要になったが、すでに詳細な設計仕様に基づいて策定されてしまった各国の安全規格を欧州安全規格として統一することは現実的には不可能であった。
  • この反省点に基づき、1990年代になって、ISO機械類の安全規格などにみられるように、製品の定性的あるいは定量的な安全性能に立脚した、いわゆる性能標準化の必要性が認識され始めた。
PL(Product Liability)法(製造物責任法)がきっかけで自己防衛のために、各製品系統ごとの安全規定策定が進んだという点が興味深い。製造業者が製造する商品によって消費者に危害が及んだ際、PL法により製造業者は製造物責任が問われる可能性がある。設計、製造に落ち度があって結果として商品に欠陥があったと判定された場合、その責任を問われるというものだ。

製造物責任の意義」(2012年8月18日 版)『ウィキペディア日本語版』より引用
損害賠償責任を追及する場合、民法の不法行為法における一般原則によれば、要件の一つとして加害者に故意・過失があったことにつき被害者側が証明責任を負う
つまり民法で損害賠償を請求する際には、被告の過失を原告が立証する必要がある。しかし多くは、過失の証明が困難であるために損害賠償を得ることが不可能になる場合があるとの問題意識から、同法で製造者の過失を要件とせず、製造物に欠陥があったことを要件とすることにより、損害賠償責任を追及しやすくした。このことに製造物責任の意義がある。 
無過失責任としての製造物責任に関する扱いとしては、まず、1960年代初めのアメリカで、fault(過失)を要件としない strict liability(厳格責任)の一類型として判例で確立された。また、ヨーロッパでは製造物責任の扱いについて各国でかなりの差異があったが、その均一化を図る必要があるとして、1985年に当時のEC閣僚理事会において製造物責任に関する法律の統一に関する指令が採択され、その指令に基づき各国で製造物責任に関する立法が導入された。
PL法での焦点は製造物に欠陥があったのか、なかったのかという点である。もっとも、「欠陥があることが証明できれば過失を認定できるのが通常であることや、欠陥の有無に関する判断基準は過失の有無に関する判断基準と重なることが多いとして、過失と欠陥がどれだけ質的に異なるかにつき、疑問を呈する見解もある。」ということなので、欠陥の認定と過失の有無は表裏一体と言える。要するに過失があったから欠陥が生まれる、過失がなければ欠陥ではないという論理もあり得るということだ。

何はともあれ、PL法において製造物に欠陥があったことが明確になれば製造業者の負けになる。逆に言えば、製造物に欠陥があったとはいえなければ責任は問われないということだ。

この解釈は非常に難しいだろうし、毎回裁判で議論していたのでは欠陥のあるなしではなく、裁判の進め方如何で欠陥認定が変わる事態になりかねない。

そこで、製造業者は商品系統ごとに安全規定を策定したのだろう。ようするに、安全規定に沿って製品を設計、製造したことを証明することで、過失がない、すなわち安全に関する欠陥がなかったことを主張することを考えたのだろう。(本当にそうかではなく、過失がないことの根拠の一つにしたかったのだ。)

実はこの流れは21世紀になっても変わっておらず、製造物によって起こった事故について、製造業者は常にPL法の脅威にさらされており、国際規格が製造業者に商品の設計に関して過失がなかったことを証明する根拠の一つに使われている。それは製造業者が欠陥を隠蔽しようとするために行っているのではない。例えば、アメリカではオペレーションミスなのか製品の欠陥なのか原因のよく分からない事故において、欠陥がないことを証明しきれない場合、裁判で黒と認定されることがある。これを防ぐためには客観的な根拠が必要であり、国際規格への適合は客観的な根拠の一つとなっている。

なお、各国が商品系統ごと作った設計仕様規格は結果的に、非関税障壁となってしまい、EU統合の際の商品流通の障壁にもなった。しかし、詳細な設計仕様に基づいて策定されてしまった各国の安全規格を欧州安全規格として統一することは現実的には不可能であったため、商品系統を超えた統一した安全規格の制定が希求された。

そのような背景により幅広い商品系統に使用できる機能安全規格 IEC 61508 が策定された。

また、このような背景もある。

<事後安全計画から事前安全計画へ>

事故・災害が起こってから対策を立てる事故後安全計画は20世紀終盤までは効果的であったが、その後飽和(限界)状態になって、事前安全計画の必要性が高まってきた。

また、製品システムは複雑化し、コンピュータ技術の導入が進み、ソフトウェアに起因する不具合が増えてきた。

これにより、全安全ライフサイクルの実現が叫ばれるようになり、IEC 61508で次の事前安全計画の方法論の基本的枠組みが形成された。

【事前安全計画の方法論の基本的枠組み】

a) 全ライフサイクルのそれぞれのフェーズを有機的に関連づける
b) 安全性の尺度として(危害の)リスクを用いる

a) は製品開発を概念形成から廃棄までのプロセスに分離して進めるプロセスアプローチ考え方で、ソフトウェアの品質向上施策の歴史から見ても納得できる。(『ソフトウェア品質論の歴史的推移』を参照のこと)
b) が製品にまつわるリスクをベースに安全を考えるリスクベース設計の考え方で、IEC 61508 の SIL や ISO 26262 のASIL の概念に通じている。

安全のためのリスク軽減戦略

機能安全/機械安全規格の基礎とリスクアセスメント―SIL、PL、自動車用SILの評価法』には、リスク軽減戦略について具体的な事例がたくさん掲載されている。その一部を掲載して考察してみよう。

-プラントのリリーフバルブの例-
たとえば、プラントのリリーフバルブを例に取れば、旧版(ISO/IECガイド51)では、過圧による容器の爆発災害を防止するため、単純に当該バルブを解放することをリスク軽減処置として採用できた。改訂版によると、化学物質を大気中に放出して環境の価値を害するなら、バルブの開放では単純に安全を確保したことにならない。したがって、リスク事象「容器の加圧による破裂」を招かぬように、プラントの安全設計システムの機能が著しく重要になる。
ISO/IECガイド51は 「規格に安全面を導入するためのガイドライン」で IEC 61508 や ISO 26262 の上位に位置するガイドラインである。

このプラントのリリーフバルブの例は、3.11 の福島の原子力発電所の格納容器の弁の解放を思い起こされる。(弁を解放したことが原因で放射性物質が大気中に放出されたかどうかは定かではない。こちらを参照のこと。)

-鉄道信号の例-
また、鉄号信号を例に取れば、従来、列車の衝突を防止するために、なんらかの傷害が信号系に発生すると列車を先ず停止させてきた。これがフェールセーフ技術と呼ばれるもので、常に列車の停止が安全側の状態とされている。しかし、改訂版ガイド51によると、長時間の停止により乗客の財産に毀損が発生し、あるいは急病発生への救急処置が遅延するなどにより乗客の健康逸失が発生すると、単なる停止はそれらの潜在危険に対して安全とは言い切れない。したがって、信号系のデジタル化などによる系の冗長化や、自己診断機能を充実させて信号系のアベイラビリティ向上を目指し、一方では速やかな傷害復旧を促進して、乗客のリスク軽減を計ることがなお一層必要になる。
鉄道の場合、何かあれば列車を停止させれば安全が確保されると考えられていた。それは現在でも正しいフェールセーフの考え方だ。しかし、列車を止め続けることで乗客の時間という財産の毀損は確実に生じる。よって、安全のために列車を止めるという対策だけでは、リスク軽減策は完全ではない。さらに、リスク軽減策を積み重ねると、複雑化するためその複雑化が新たなリスクを生む。だからこそ、現代の安全設計はとても難しいと言える。

-自動車の追突の例-

例えば、自動車が走行中に先行車に追突することにより、当該運転手が自車のハンドルに強打して傷害(危害)が発生する事故シナリオを考える。

この場合、当該自動車がある程度の速度をもって走行している状態、低速先行車が存在する状態、追突危険事象、自車の破損と急激な停止側加速事象、運転手とハンドルとの急激な接近状態、運転手とハンドルとの衝突リスク事象などが事故シナリオの構成要素となる。

<潜在危険の同定>
潜在危険の同定では、最低限1個のリスク事象を特定することが必要である。上記の事例では「当該自動車がある程度の速度を持って走行している状態」、「低速先行車が存在する状態」、「両者の衝突リスク事象」によって、潜在危険(1)が同定できる。さらに、これに「自動車の破損と急激な停止側加速状態」、「運転手とハンドルとの急激な接近危険状態」、「運転手とハンドルとの衝突リスク事象」の諸状態と事象を付け加えることにより潜在危険(2)が同定できる。当然、潜在危険(1)の方が潜在危険(2)よりも広い事故シナリオを包括している。すなわち、潜在危険(2)は潜在危険(1)の部分集合となっている。 
潜在危険(1)と(2)とに対するリスクでは、その内容が異なる。前者のリスクは、後者のリスクを包含し、後者以外の潜在危険、例えば、追突によって、当該運転者が車外に投げ出されるという潜在危険によるリスクも含む。
リスクは、潜在危険をもとに存在するため、潜在危険の解消は、根本的なリスクの解消となる。しかし、決定論的原因故障から生じるものも含めて、あらゆるリスクを根絶することは不可能である。
この部分ちょっと分かりにくいのだが、ようするに潜在危険(1)は自動車が先行車両と衝突するリスクまでのことを関心事にしていて、潜在危険(2)は衝突後に運転手がハンドルに強打するまでのことを関心事にしているということだろう。この後、潜在危険(1)と潜在危険(2)ではリスク軽減策が考え方が異なるということが書かれている。

-自動車の追突事故のリスク例-
一例として、自動車の追突事故のリスクについて考えてみよう。現在、広く実用化されている自動車の安全関連装置として、車間距離警報装置、(能動型)シートベルト、(衝突時)エアーバッグなどが知られている。前述の自動車の衝突の例で同定した潜在危険(1)「当該自動車がある程度の速度をもって走行している状態-低速先行車が存在する状態-両車両の衝突リスク事象」によるリスクを考えれば、車間距離警報装置の安全機能は主としてリスク軽減戦術b)を、シートベルトやエアーバッグなどの安全機能はリスク軽減戦術a)をそれぞれ遂行すると言える。
次に、同様に同定した潜在危険(2)「当該自動車がある程度の速度をもって走行している状態-低速先行車が存在する状態-両車両の衝突危険事象-自車の破損と急激な停止側加速状態-運転手とハンドルの急激な接近危険状態-ドライバーとハンドルとの衝突リスク事象」に対するリスクを考えれば、最終的なリスク事象は「運転手とハンドルとの衝突」であるから車間距離警報装置はもとよりシートベルトやエアーバッグなどの安全機能もリスク軽減戦術b)をそれぞれ遂行すると言える。 
すなわち、同一の安全関連系の安全機能であっても、どのリスクを対象とするかによって異なるリスク軽減戦術をして分類されることに注意すべきかである。このことは、リスク解析・評価と機能安全との関連において重要な意味を持つ。 
固有(本質)安全に対して機能安全とは、「ある安全機能をある確からしさ(確率)で遂行することによってリスクを軽減する能力を持つ安全関連系(装置)によって確保される安全」ということができる。固有(本質)安全では、たとえば、構造物の地震に対する耐震性能など信頼性評価基準が問題となる。機能安全では、安全関連系の機能遂行確率が問題となり、これも信頼性の問題と深く関わってくる。このように、固有(本質)安全および機能安全においては、ディペンダビリティと機能安全が少なからず接点を持つことになる。
これもやや分かりにくいが、解釈すると自動車が先行車両と衝突するリスクである潜在危険(1)については、車間距離警報装置が主たるリスク軽減策であり、シートベルトやエアーバッグは主のリスク軽減策とは追加のリスク軽減策とう位置づけで、衝突後に運転手がハンドルに強打するまでリスクである潜在危険(2)では、車間距離警報装置、シートベルト、エアーバッグが同列のリスク軽減策ということを言っているのではないかと考える。

何はともあれ、著者が強調したいのは潜在危険あるいは潜在危険群によるリスクを明確にすることの重要性であろう。

IEC 61508 と ISO 26262の相違点

a) プロセス産業では早くからプロセスの自動化が進展し、プロセス産業からのエキスパートが多数を占めたIEC 61508策定時に、化学反応を制御するための自動化、安全計装システムの導入など人の介在を含まない安全関連系がすでに多く実用化されていた。一方、当時機械類の産業分野では相対的に自動化は始まって日が浅く、自動車に至っては、今日でも運転者が運転をオーバーライドするという基本的形態から脱していない。 
b) 安全関連系に人の操作機能を含むか含まないかは、安全関連系への要求事項に大きな影響を与える。IEC 61508では、基本プロセス制御系と安全関連系とを分離することが求められているが、自動車などではそれらを分離することは難しい。しかも、運転者と車の加速機能・減速機能・操舵機能遂行システムとはほぼ一体で基本制御系も構成していて、例えば車間距離警報システムなど安全関連系がそれらの基本制御機能の一部を支援しているに過ぎない場合も多い。このため、安全関連系の安全機能のみを独立させて安全度を評価することが難しい上に、システムが複雑なため全体システムの定量的リスク評価が難しくなる。 
c) プロセスプラントの寿命は30~40年と長く、次世代のプラントは基本から新規に設計・製造される。一方、自動車の新型モデルの設計は、旧型モデルの部分的改造であることが多く、旧型モデルの部品などを多く継承する。旧型モデルで使用した部品の安全性は、妥当性が確認済みと見なせる場合が多い。 
d) 危害の規模は、プロセスプラントでは1回当たりに多数の死傷者を出す可能性があり、損害額も大きい。プロセスプラントの台数は世界的に見ても最大数千程度である。一方、自動車では1回当たりの死傷者数は少ないものの、台数が多いため合計すれば死傷者数と損害規模はプロセスプラントを上回る可能性がある。 
e) 機器の不都合に関するリスクオーナーは、プロセスプラントではプラントオーナー、自動車では一義的に運転手であるが、自動車ではリコールリスクが存在する。リコールリスクのオーナーは自動車の販売者となろう。 
f) IEC 61508 では、安全関連系の安全性能を2種類の要求モードに対してSIL1からSIL4までの4段階で規定しているが、ISO26262では、ASIL Aから ASIL D およびQM の5段階で規定している。 
g) IEC 61508 では、安全関連系はセンサなどの入力端から最終的に安全機能を実行するアクチュエータまでの全体として定義され、弁などの機構部品を対象範囲に含まれる。一方、ISO 26262では、安全関連系のうち、電気・電子技術に関連した部分のみを対象とる。
上記の a) と b) の説明でIEC 61508 がプロセス産業(化学プラントなどの自動化製造工程の設計がベースとなる産業)のエキスパートが中心に作られた規格であることが分かる。

また、プロセスプラントでは人の介在を含まない安全関連系のリスク軽減策が多く実用化されていたことも分かる。

一方で、自動車や医療機器は人による操作機能が含まれるため、基本制御と安全関連制御を分離することが難しい。その部分がしっくりこないため、ISO 26262 は自動車用に機能安全をモディファイしたのだろう。医療機器はプロセスプラントとはさらに性質が異なるため、独自路線で規格策定が進んだ。(IEC 60601-1 や IEC 62304, IEC 62366など)

機能安全は当初、リスクを軽減する能力を持つ安全関連系(装置)にフォーカスが当たっていることが分かる。MITのナンシー・レブソン教授が機能安全を評価していないのは、機能安全がシステムのアーキテクチャの複雑性から発生するリスクにフォーカスを当てていないからだと思う。(『機能安全の意味がわかった(IEC61508とISO26262の最新情報』参照)

思い起こせば2006年に日本で開催されたクリティカルソフトウェアワークショップで、自分がエレベータのアーキテクチャの事例で独立した安全装置の有効性を発表したときに、ゲストとして招待されていたナンシー・レブソン教授に「独立した安全装置など、誰でも思いつく単純な方法だ」と酷評されたことが思い出させる。ナンシー・レブソン教授は放射線治療器の Therac-25 の事故調査によって一躍有名になったのだが、Therac-25 の事故がすぐに収束せず6名者もの犠牲者を出してしまったのは、ソフトウェアの複雑性と追加変更による問題の作り込み、ソフトウェアの特徴を考慮していない安全対策などが原因だった。

独立した安全装置は、プロセスプラント系では人の介在を含まない安全関連系のシステムであり単純系システムのアプローチだったため、ソフトウェアの複雑性から発生するリスクを完全に押さえ込むことはできないという意味での批判だったのだと思う。

また、「安全関連系に人の操作機能を含むか含まないかは、安全関連系への要求事項に大きな影響を与える。」はまさにその通りで、医療機器では人の操作機能は必ずと言ってもいいほど介在するため、ユーザビリティの視点でのリスク分析は必須事項となっている。自動車の場合は、まだ、ユーザーオペレーションが単純であるためユーザビリティに対する要求は存在していない。

それどころか、ASILの判定要素の中でユーザーである運転手のコントローラビリティがASILを軽減する手段として使われいる。医療機器ではオペレーションがソフトウェアによって複雑化されているため、ユーザーの回避動作を考慮してリスクが軽減できると考えることはできない。

ただし、自動車だって今後も操作性が単純なままかどうかはわからない。現に、カーナビゲーションシステムやクルーズコントロールなどハンドル、アクセル、ブレーキ以外のオペレーションも増えてきている。

機能安全/機械安全規格の基礎とリスクアセスメント―SIL、PL、自動車用SILの評価法』 を読んで改めて思うのは、IEC 61508 や ISO 26262 はソフトウェアの複雑性、ソフトウェアのアーキテクチャの問題にフォーカスを当てたアプローチについては触れられていないということだ。これらは、ソフトウェアのプロセスアプローチや変更管理、構成管理、検証法等などだけでは解決できない問題だと思う。

P.S.

過去の ISO 26262との向き合い方の記事で、ASILをアイテムやエレメントに割り当てるといった記述をしていましたが、名古屋大学の高田先生からのご指摘及び今回紹介した書籍により、それは間違いであり、SIL, ASILは安全関連系の安全性能を等級化した水準であることが分かりました。これは今回の記事で紹介したように、IEC 61508 が基本制御と安全関連制御を明確に分離していたことの名残であると考えています。しかし、基本制御と安全関連制御が明確に分離できないシステムにおいては、潜在危険から推定するリスクのクラス分類と、ソフトウェアを分割したときの各ソフトウェアアイテムのリスク(安全)クラス分類は必ずしも一対一にはなりません。(付加的な機能のシステマティック故障が安全制御に影響を与えることは大いにあり得るという意味)ASILデコンポジッションはシステムのアーキテクチャの構造分離にことを示していたのだと思っていましたが、実際にはそうではなく、リスクを軽減するための安全性能、安全機構の冗長評価のことでした。繰り返しますが、基本機能と安全機能が明確に分離できないシステムにおいては、ソフトウェアアーキテクチャの重要性がクローズアップされます。ASILデコンポジッションが複雑なソフトウェアシステムにおけるアーキテクチャの設計戦略に踏み込んだ話ではなかったということです。この点については、今後掘り下げていきたいと考えています。

2012-07-29

ISO 26262との向き合い方 (12) 対訳版を読み始めて思うことあれこれ

ISO 26262-1 第1部:用語集 (日本規格協会から発行されている英和対訳版)を読んでいる。読んでいて思うのは、ISO 26262 は用語の定義の全体数が多く、かつ、専門用語が多いのでソフトウェアエンジニアには難解なことばがあるという点だ。

それと、ISO 26262 全体の構成について感じるのは、ハードウェアの開発プロセスとソフトウェアの開発プロセスをそれぞれ別パートで分けていながら、安全の評価基準であるASILはハード、ソフトを一緒に考えているところに「本当にそれで大丈夫か」と感じる。

ASILを分割する考え方であるASILデコンポジッションについても、十分に独立したエレメントが存在することが前提となっている。ようするに、自動車は独立した部品の組み合わせで構成されているという考え方だ。

しかし、我々は複雑化したソフトウェアをそれぞれコンポーネントとして十分に独立させることができていないことが、様々な問題を起こしていることを知っている。

ハードウェアの独立とソフトウェアの独立の議論は同じレベルで語れないはずなのに、ISO 26262では、ハード、ソフト込みのエレメントがベースになっている。

まあ、それはそれとして今回はISO 26262-1 第1部:用語集の気になる用語のいくつかを話題に取り上げようと思う。

【Anomaly:アノマリー】
例えば、要求、仕様、設計文書、ユーザ文書、標準又は経験をもとにした期待から逸脱している状態。
備考 アノマリーは、レビュー、テスト、分析、まとめ、あるいはコンポーネントや適用可能な文書の仕様といった別の機会に発見される場合がある。
ISO 26262 の対訳版では Anomaly をそのまま「アノマリー」と表現している。

Anomaly を辞書で引くと Longman の英英辞書では
Something that is noticeable because it is different from what is usual:
ウィズダムの英和辞書では
1 異常(なこと)、例外(的なこと)、特異な存在、異例、変則;不合理
とある。医療機器のソフトウェアライフサイクル規格 IEC 62304:2006 の JIS 版 JIS T 2304:2012 では Anomaly は日本語では「異常」としている。

異常(ANOMALY)
要求仕様書,設計文書,規格など,又は既存の認識若しくは経験に基づいて予想した結果を逸脱する状態。異常は,ソフトウェア製品又は該当する文書のレビュー,試験,分析,コンパイル又は使用中に発見されることがあるが,これには限定しない。
この日本ではなじみのない Anomaly:アノマリーということばを、今回 ISO 26262 の対訳版でそのまま「アノマリー」と表現したのは、その本質的な意味を表す適当な日本語が見つからなかったのであろう。

何が日本語では表現できないのかというと、アノマリーは発見された時点では不具合と確定していないというという点だ。Error, Failure, Fault はそれぞれ、問題があるということが分かっている。しかし、Anomaly:アノマリーは、"Something that is noticeable because it is different from what is usual:" だから、いつもとは違う、あるいは期待から逸脱しているだけで、発見された時点で不具合であることが確定している訳ではない。

ここで、Anomaly を「異常」と言ってしまうと、問題がある、瑕疵・欠陥があることを認識しているいうニュアンスが強くなってしまう。

Anomaly が組織が不具合と認めている欠陥なのか、それとも不具合があるかもしれないし、ないかもしれない問題なのかその違いは大きい。欠陥を認める前なのか後なのかが重要なのだ。

ようするにソフトウェアの開発時に問題など山ほど起こる。我々はそれらをBUG:バグと言うわけだが、バグの中には仕様の誤りや勘違いも少なからずあるし、バグだと思って調べたら実はそうではなかったということもある。

もし、ソフトウェアに起因する事故が発生し、訴訟が起きたとき重要なのは、問題点を製造業者側が不具合、欠陥と認識していたかどうかだ。不具合と認識していていたにも関わらずそれを修正せずに放置したことで事故が起こったのならば、その責任は製造業者にある。

現実には開発の工程で発見された問題点は、それが受容できないリスクに繋がるのか、それとも受容できるのかを判定する。受容できる場合は、製造業者はその問題点を修正しない選択しを取ることも許されている。一般の方はそれが不合理だと思うかもしれないが、例えばこういう例を考えて欲しい。保守用のソフトウェアで自己診断の"PASS" というメッセージの最後のSの右側縦1ドットがまれに欠けることがあったとする。装置の診断は問題がないし、PASSからFAILの判定もできる。しかし、どこで誰が縦1ドットを消しているのかが、どうしても分からない。これはソフトウェアのバグであり不具合ではあるが、ユーザーが受容できるリスクと判定できる。この場合、バグは残留しており、どのようなバグであるのか、誰がリスクを重要できると判断したのかを残しておくことで商品をリリースすることができる。(Anomaly がゼロの状態でソフトウェアがリリースされているとは誰も思っていない)

不具合、欠陥を組織が認める前なのか後なのかの識別が重要であることがおわかりいただけたと思う。そう考えると、いつもとは違う、あるいは期待から逸脱している、怪しいが確証はない事柄は現実に存在し、それらが不具合や欠陥であると確定していないことを表現する言葉が必要になる。それがアノマリーだ。

アノマリーに関連して、 inspection:インスペクションtesting:テストwalk-through:ウォークスルー の説明も見てみよう。

インスペクション
アノマリーを検出するため、形式が定められた手続きに従う作業成果物の審査
備考1 インスペクションは検証の一手段である。
備考2 関連するアイテム又はエレメントの動作を通常伴わない点が、テストと異なる。
備考3 通常、検出されたアノマリーは再作業により扱われ、その作業成果物は再度インスペクションされる。
備考4 通常、形式が定められた手続きには前もって定められた手順、チェックリスト(の使用)、調整役(の出席)及び結果のレビューが含まれる。
テスト
指定された要求を満たすことの検証、アノマリーの検出及びふるまいに対する確認を得るための、計画と準備とアイテムまたはエレメントの動作又は実行のプロセス。
ウォークスルー
アノマリーを検出するための、作業成果物の体系的な審査

備考1 ウォークスルーは検証の一手段である。
備考2 関連するアイテム又はエレメントの動作を通常伴わない点がテストと異なる。
備考3 通常、検出されたアノマリーは再作業により扱われ、その作業成果物は再度ウォークスルーされる。

例 ウォークスルー中、開発者は一人以上のアセッサーに対して、段階を追って作業成果物を説明する。この目的は作業成果物に対する共通理解を築き、作業成果物に存在するアノマリーを識別することである。インスペクションとウォークスルーはいずれもピアレビューの一形式であるが、ウォークスルーと比べると、インスペクションの方がやや難しい。
【ISO 26262-2 第2部 機能安全の管理 付属書B(参考) 安全文化評価の例】

ISO 26262-2 第2部 機能安全の管理 付属書Bに 安全文化評価の例が載っている。これは本文には入っておらず、参考なので規格要求ではないが、非常に興味深い内容なので、掲載しておく。


不十分な安全文化を示す例良い安全文化を示す例 
責任がトレースできない。プロセスが関連する機能安全の決定責任のトレースを保証する。
常に費用及びスケジュールが安全及び品質に優先する。安全が最も優先順位が高い。
報酬システムが安全及び品質に対してよりも費用及びスケジュールを評価する。報酬システムが機能安全の効果的な達成を支持し、動機付ける。

報酬システムが、安全及び品質を危険にさらす近道を取る者を罰する。
安全、品質及びそれらの管理を評価する者が、プロセスを実行する責任者に過度に影響される。プロセスが適切なチェック及びバランスを与える。例えば、組み込まれたプロセス(安全、品質、検証、妥当性確認及びコンフィグレーション管理)の適正な独立性。
安全に対する受動的な態度、例えば

-製品開発サイクルの最後のテストへの過度の依存
-フィールドに問題がある場合だけ管理者が動く
安全に対する積極的な態度、例えば

-安全及び品質の問題は製品ライフサイクルの初期の段階で発見され、解決されている。
必要なリソースがタイムリーに計画、配置されない。必要なリソースが配置されている。

技能のあるリソースが割り当てられた活動に相応しい能力をもつ。
“集団思考”

レビューグループを作る際に“不正工作”をする。
反対者が追放される、または“チームの者ではない”とレッテルを貼られる。
異議は勤務評定でマイナスに働く。
 “少数派の反対者”が“トラブルメーカー”、“チームの者ではない”又は“密告者”といった扱いをされたり、レッテルを貼られる。
 関連する従業者が跳ね返りを恐れている。
プロセスが率先して多様性を行使する:

-知的な多様性が求められ、価値を与えられすべてのプロセスに組み込まれる。
-多様性に行使に反対するふるまいをやめさせ、罰する。
     
 コミュニケーションの支持及び意志決定のチャネルが存在し、管理者はそれらの行使を推奨する。
-自己開示が推奨される。
-他のだれによる発見の公開も推奨される。
-発見及び解決のプロセスがフィードで継続される。
体系化された継続的な改善のプロセス、学習サイクル又は“教訓”の活用がない。継続的な改善がすべてのプロセスに組み込まれている。
プロセスが“その場しのぎである”又は暗黙である。定義され、トレース可能で、管理されたプロセスに以下を含むすべてのレベルで従っている。

-管理
-エンジニアリング
-開発インタフェース
-検証
-妥当性確認
-機能安全監査
-機能安全アセスメント

これは安全文化について書かれているのだから、安全文化が不十分か、それとも十分かの判断に違和感を覚える部分があれば、それが欧米と日本の意識の違いであると言える。


例えば、「レビューグループを作る際に“不正工作”をする。」「反対者が追放される、または“チームの者ではない”とレッテルを貼られる。」「異議は勤務評定でマイナスに働く。」などは、そこまではないだろうと思う一方で、製品開発サイクルの最後のテストへの過度の依存」や「フィールドに問題がある場合だけ管理者が動く」などという指摘点は、どこも同じなんだなと感じる。


【安全対策が簡単ではない例】

ISO 26262 とは関係ないが、ソフトウェアに関する安全はソフトウェアの複雑性から脅かされるという例を紹介したいと思う。

6/20 にレンタルサーバーを運営しているファーストサーバにて、大規模なデータ喪失障害が発生た。脆弱性対策のためのメインテナンスプログラムに問題があり、そのプログラムが稼働中のデータのみならずバックアップデータまで削除してしまったことが原因だった。

大規模障害が起こった原因の詳細についてはこちらを読んでいただくとして、なぜ、ソフトウェアのシステマティック故障が起こるのかについて考えたので下記を見て欲しい。システマティック故障がソフトウェアの複雑性に絡んで発生することがよく分かる。

障害の原因3:メンテナンス仕様
システムを含むデータのバックアップは毎朝6時に取得しております。しかしながら、脆弱性対策のためのメンテナンスはバックアップをしてあるシステムについても実施しておかないと、メンテナンス実施後にハードウェア障害が発生してバックアップに切り替えた途端に脆弱性対策が講じられていないシステムに戻ってしまうことが過去に発生し、脆弱性対策がなされていないシステムが動き続けていたという反省に立ち、脆弱性対策のメンテナンスに関しては対象サーバー群とそのサーバー群のバックアップ領域に対して同時に更新プログラムを適用するという構造に修正して実施しました。
過去に、脆弱性対策をバックアップシステムにも適用しておかなかったために、ハードウェア障害が発生してバックアップシステムに切り替わると脆弱性対策が行われていない状態になるという問題が発生したとある。今回の大規模障害と比べればリスクレベルは低い問題だ。しかし、リスクは受容できないレベルであると考えられ、脆弱性の対策は本番環境だけでなくバックアップシステムにも同時に実施するように運用が変更された。実は、このリスクコントロール対策自体にリスクがあった。


脆弱性対策のプログラムに問題があると本番環境とバックアップ環境の両方に影響を及ぼすという新たなリスクである。バックアップは本番環境に何か問題があったときのリカバーのための対策であるから、後に発見された相対的に小さなリスクに対するリスクコントロール対策を追加したことによって、もともとあった大きなリスクに対するリスクコントロール対策の効果及び堅牢性を低下させてしまったことに気がつかなかった。


実はリスクコントロール対策を行う際に追加したリスクコントロール対策が新たなリスクを生むことはよくある。よかれと思ってやったことが、逆にシステムを脅かしてしまうことがあるのだ。


だからリスクコントロール対策を追加したり、修正したりするときは、その対策を実行することにより発生する新たなリスクがないかを分析しなければいけない。また、ただ分析すればよい訳ではなく、これまで構築してきた安全対策のアーキテクチャが崩れていないかどうか、リスク対策の効果が弱まっていないかどうかをチェックする必要がある。


ソフトウェアエンジニアは商品やサービスのリリース後に問題が発見されると、すぐにソフトウェアを修正してしまうが、商品リリース後のソフトウェア修正は慎重かつ、何重ものチェックの上で実施されなければいけない。その慎重さのレベルは対象となっているソフトウェアアイテムの重要度の大きさによっても変わる。(変更に対するリスクが受容できることが明確ならばアジャイルでどんどん直すことも可能だが、人の命がかかっているようなソフトウェアはそれではまずいことは明白だ。)


さて、ファーストサーバの大規模障害では、本番環境とバックアップシステムの両方に脆弱性対策を行うという運用の変更を行った結果、脆弱性対策のプログラムのミスによるデータの削除が本番環境のみならずバックアップシステムにも及んでしまった。

脆弱性対策の削除コマンドを消し忘れたというプログラムミス自体はヒューマンエラーだ。
しかし、この大規模障害はよかれと思った実施した追加の対策により、最初に考えられていた安全対策の効果及び堅牢性が弱まってしまった。そこに、ミスが重なり、予想していなかった Hazardous Situation が現実のものとなってしまった。

ISO 26262でも同じことは起きると思う。サプライヤを含めたソフトウェア開発組織がISO 26262 の要求する要求(主にプロセス要求)を満たせたとしても、よかれと思って実施したソフトウェアの変更がソフトウェアシステムの複雑性を助長し、その変更が既存のリスクコントロール対策に悪い影響を与える可能性がある。そして、それまではリスクに対して堅牢であったのに、ソフトウェアを変更したことによって堅牢性が失われ、これまでブロックできていた  Hazardous Situation が現実になり、そこから思いもよらない大規模な障害が発生するという事態もありうる。


そうなることを防ぐためには、ソフトウェアの複雑性の特徴を考慮して、安全対策の評価やコンポーネント、エレメントの分割と独立性の評価が不可欠であると考える。

まだ、規格要求を読み始めたばかりだが、その部分の考慮が足らないと感じる。

2012-07-01

ISO 26262との向き合い方 (11) ASILの分解は本当に可能か

日本規格協会から発売された ISO 26262 の英和対訳版が手元に届いた。まず、ISO 26262-9 Automotive Safety Integrity Level(ASIL) - oriented and safety-oriented analyses を読んでいるのだが、何しろ具体例がないからわかりにくい。

さらに混迷を深めているのは ISO 26262 ではエレメントの概念がハードとソフトを明確に区別していない、それぞれの特徴を十分に考慮できていない、エレメント同士の結合について踏み込めていないところだ。

そもそも ISO 26262 はECU を含む自動車の構成部品をメーカーがサプライヤから“調達する”という前提に立っているから、ハードウェアの特性とかソフトウェアの特性を考慮した安全設計という概念が不足していように感じる。

ASIL D は ASIL C(D) + ASIL A(D) や ASIL B(D) + ASIL B(D)にデコンポジション(分解)できると書かれているのだが、デコンポジション後のエレメントの十分な独立性の証拠が必要(原文では evidence for sufficient independence of the elements after decomposition shall be made available, 訳文では 十分な独立性の証拠が利用可能でなければならない)とされている。

この規格の問題点は独立性の証拠の証明のしかたについては言及していないところだ。(ソフトウェア開発の方法論、検証方法には言及しているのに)

エレメント同士の独立の条件として、従属故障を起こさないということが書かれており、ISO 26262-8 (支援プロセス)に従って安全分析をしなさいと書いてある。

では、最近複数の自動車メーカーがCMで宣伝している前方に障害物があると自動的にブレーキがかかるプリクラッシュブレーキシステムの場合はどうなるのだろうか。

ブレーキの基本機能は ASIL D だろう。画像解析のエレメントは ASIL D なの?という疑問が生まれる。 プリクラッシュブレーキ システムはシステム全体としては ASIL D だろうから、ブレーキの基本機能は ASIL D のままで、画像解析エレメントは ASIL C(D) にデコンボジションしたとする。

その際にブレーキエレメントと画像解析エレメントは独立しており従属故障は起こらないと言えるのだろうか。

画像解析エレメントが対象物を誤認して、対象物があるのにないと判定したり、逆に対象物がないのにあると判定したりしたら、ブレーキエレメントに誤った指令を送ることになる。これは意図した使用とは異なっているので従属故障ではないのか?

ではこれは従属故障ではないとして、システムの複雑化の代償としてのケーススタディを考えてみよう。

台風で1m以上の木の枝が車の前にが飛び出してきた。でも後ろから大型トラックがほとんど車間距離なしで追走しており、バックミラーをみたら大型トラックの運転手は携帯電話を見ている。

「 プリクラッシュブレーキシステムは今は働いて欲しくない」と運転手は思ったが、システムは作動し、大型トラックに追突された。このケースは故障ではない? でも事故に遭ったユーザーはどう考えるだろうか。そんなことろまで考えて作るのが自動車メーカーだと考えないだろうか。想定外を想定するのが日本の企業だと思わないだろうか。

また、障害物の認識と運転手のハンドル操作がほとんど同時だった場合はどうするのだろうか。仕様では運転手のハンドル操作を認識するとプリクラッシュブレーキシステムは動作しない仕様があるとして、例えば障害物の認識とハンドルを切り始めた時点が100msも遅れていなかったら、どっちが優先されるのだろうか、判断を許容範囲の時間(例えば3秒)を設けなくてもよいのだろうか。プリクラッシュブレーキの起動が始まってから1秒後に運転手のハンドル操作を認識したら、プリクラッシュブレーキを中断するのだろうか。

プリクラッシュブレーキによる後ろの車両からの追突といった危険状態(Hazardous Situation)を回避するために、車の後ろにもセンサーを設置して、十分な車間距離が取れているときだけ自動停止システムを働くようにしたとする。しかし、そうするとますますシステムは複雑化する。また、車間距離センサに泥や異物がくっついていて十分に働かなかったらどうする。その時はエラーを表示する。そのエラーインジケート処理が失敗していたらどうする。

安全のためだと思ってリスコントロール手段を追加すると、追加したリスクコントロール手段によって発生しうる新たなリスクに対処しなければいけない。新たなリスクコントロール手段の設置によって、システムは複雑化し、さらなるリスクを生む可能性がある。リスクを回避するために追加したリスクコントロール手段によって発生する二次的なリスクは元のリスクよりも小さくなるのが普通だろうと思ったら大間違いだ。

ハードウェアの故障だったら確率は漸次小さくなる可能性が高い。ハードウェアの故障はランダム故障の場合が多いから、もとのシステムと安全装置の故障が二重に起こる確率は下がる。部品の故障率ならば1万分の1×1万分の1で、10億分の1など。

ところが、リスクコントロール手段をソフトウェアで実施した場合はそうではない、ソフトウェアはハードウェアのような壊れ方(不具合の発生のしかた)をしない。Systematic Failure を起こす。

問題の種類によっては、リスクコントロール手段として用意した安全装置のソフトウェアのちょっとした問題が元のシステムに多大な影響を与えることがある。それがソフトウェアのおそろしいところだ。

サーバー管理会社が起こした大規模障害


レンタルサーバーを提供するファーストサーバが6月20日に大規模なデータ消失事故を起こしたのをご存じだろうか。

Computerworld の記事が図入りで分かりやすかったのでリンクを示しておく。
ファーストサーバ、大規模障害の概要と原因を中間報告――複数要因が重なりデータ消失

こちらはファーストサーバの原因説明ページ
大規模障害の概要と原因について(中間報告)

自分の所属コミュニティの SESSAME のWEBサイトはファーストサーバを使っており、サイトの情報は一時、きれいさっぱり消えてしまった。(幸いSESSAMEのWEBサイトは1時間足らずの作業で元通り復旧した。)

さて、みなさんの組織は重要な企業情報のデータのバックアップを取っておられるだろう。個人のローカルPCの中のデータはもしかしたらバックアップは取っておらず、誤って消さないように気をつけて使っているかもしれない。

バックアップシステムは安全対策(=安全アーキテクチャ)はフォールト・トレラント (Fault Tolerant) の一種と言える。

フォールト・トレラント (Fault Tolerant) とは、故障や誤動作が発生しても機能が正しく維持されることで、大抵は構成要素の多重化 (冗長化) によって実現される。

本体に何かがあってもバックアップで冗長化したことで元の機能を復帰させることができる。

フォールト・トレラント (Fault Tolerant) とは対照的な安全対策として、フォールト・アボイダンス (Fault Avoidance)がある。フォールト・アボイダンス (Fault Avoidance)は故障の可能性を充分に低くすることであり、部品の高信頼性を目指すことで安全を実現する。バックアップを取らずに慎重に作業するという行為はフォールト・アボイダンス (Fault Avoidance)に近い。

フォールト・アボイダンス (Fault Avoidance)は、そもそも故障しないようにして、安全性を確保するやり方だ。

フォールト・トレラント (Fault Tolerant)は多重化・冗長化をするために、システムとしての複雑性が増す。逆に、フォールト・アボイダンス (Fault Avoidance)は冗長化設計より構造がシンプルになる。

安全対策では、フォールト・トレラント (Fault Tolerant)もフォールト・アボイダンス (Fault Avoidance)もどっちも選択できる。フォールト・トレラント (Fault Tolerant)を選べば、システムの複雑性は増すが、部品の故障率は厳格に管理しなくてもよい。(ランダム故障なら二重故障、三重故障の確率は低くなるから。)

フォールト・アボイダンス (Fault Avoidance)を選ぶと、故障率の低い部品を選んだり、ソフトウェアなら検証の網羅性を高めないといけないが安全システムの構造はシンプルになる。

この構造がシンプルかどうか、すなわち安全を司るエレメントやソフトウェアモジュールが、他から見て高凝集で疎結合であるかどうかが、ソフトウェアの場合非常に重要な要素である。

ハードウェアだけで構成されるシステムの場合は、フォールト・トレラント (Fault Tolerant)にしたことによるリスクは少ないが、ソフトウェアの場合フォールト・トレラント (Fault Tolerant)を採用したときのリスクは小さくない。

なぜなら、ソフトウェアによる冗長設計は問題がないことを証明することが困難であり、ちょっとした問題がシステム全体に影響を及ぼす Systematic Failure の特性を持っているからだ。

ファーストサーバの障害は、次のような事象が重なって発生した。
  1. 更新プログラム自体に不具合があった。
  2. 検証環境下での確認による防止機能が十分に働かなかった。
  3. メンテナンス時のバックアップ仕様の変更が重なり、バックアップ・データの消失を含む今回のデータ消失が発生した。
余談だが、こういう事故が発生したとき、事故の原因を間違っても、作業者のケアレスミスなどと結論づけてはいけない。そんな結論なら、必ずまた同じことが起こる。ファーストサーバも再発防止策として当面、緊急性がなければ保守作業をしないと告知しているが、それは恒久対策ではない。

ファーストサーバの中間報告では原因1として下記の説明がある。
脆弱性対策のためのメンテナンスが必要となる都度、メンテナンスのための更新プログラムを作成しており、今回も更新プログラムを作成しています。
そのプログラムの記述において、ファイル削除コマンドを停止させるための記述漏れと、メンテナンスの対象となるサーバー群を指定するための記述漏れが発生していました。
メインテナンスのための更新プログラムを都度作成しているとある。オペレーション的には普通に思えるが、安全対策でフォールト・トレラント (Fault Tolerant)を採用していたと考えると、冗長設計したもう片方の安全システムへの変更を定常的に行っていたとも読み取れる。

もちろん、変更に対するデグレードの危険性は考慮していた。だから、検証環境で試してから本番環境に移すというオペレーションを実行していた。

しかし、それでも事故が起こってしまったのは、検証環境と本番環境には差があり、本番環境で実施して初めて分かる問題があった、すなわち検証環境で行ったテストはレグレッションテストとしては漏れがあったということである。(100%の検証はできないので、検証環境ではテストの漏れを完全に無くすことはできない。)

そして、たった数行の意図しない動作で今回の大規模障害は起こった。

具体的には「ファイル削除コマンドを停止させるための記述漏れ」と、「メンテナンスの対象となるサーバー群を指定するための記述漏れ」が組み合わさった結果である。

ソフトウェアの Systematic Failure の恐ろしさはここにある。たった二つの記述漏れが、とんでもない大規模障害を生み出してしまうのだ。ハードウェアのランダムエラーではこんな被害の拡大の仕方はしない。

今回の障害のきっかけもソフトウェアの変更だった。何事もなく動作していているシステムに対するソフトウェアの変更には危険が潜んでいる。

何事もなく動作している自動車システムのソフトウェア搭載部品を部品ごと変更するのも同様に危険を含んでいるし、エレメント内部のソフトウェアに変更を加えるのも危ない。

ASIL のデコンポジションの独立性証明


最初の話に戻ると、ISO 26262 では ASIL のデコンポジションの独立性を、従属故障の可能性の分析して判断せよと言っているが、その際にソフトウェアの特性を考慮しなくてもいいのだろうか。結合の仕方についてもっと突っ込まなくていいのだろうか。エレメントやサブエレメント同士の結合に関する考察が不足しているように感じる。下記の appropriate measures (独立性を達成するための適切な対策)って何なのということだ。

【ISO 26262-9:2011 5.4.6 より】

If ASIL decomposition is applied at the software level, sufficient independence between the elements implementing the decomposed requirement shall be checked at the system level and appropriate measures shall be taken at the software level, or hardware level, or system level to achieve sufficient independence.

ASIL デコンポジションがソフトウェアレベルで適用される場合、デコンポジションされた要求を実装するエレメント間の十分な独立性がシステムレベルにおいてチェックされなければならず、十分な独立性を達成するために、ソフトウェアレベルまたはハードウェアレベルまたはシステムレベルにおいて、適切な方策がとられなければならない。

【引用終わり】

安全対策の複雑化と安全アーキテクチャの安定性にはトレードオフの関係があり、それはシステム全体として考えていかなければいけないのに、サプライヤから供給される部品をくみ上げて車を作ることだけを前提に考えていると安全アーキテクチャの安定性が軽視されるのではないかと感じる。

市販化されているプリクラッシュブレーキシステムも、安全対策はよく考えられているのだろう。WEBサイトを覗いてみたら運転手がハンドル操作やブレーキングをした場合はシステムは動かないと書いてあった。運転手の意思の方を優先させていることが読み取れる。

しかし、システムの複雑化、特にソフトウェアが絡んだシステムの複雑化は思わぬ問題を生み出す危険性がある。ASIL D のエレメントをデコンポジションできていると言えないと、複雑化した巨大システム全体のすべての機能の信頼性が高いことを証明しないといけない。

ASIL 分解の独立性を証明できないから、数十万行、数百万行のソフトウェアシステムの信頼性をフォーマルメソッドで証明せよというのはナンセンスだと思う。安全対策をより確実なものとするために ASIL のデコンポジションは必要だ。でも、独立性の完全性や従属故障が絶対に起きないなどとは言えない。その状況下でベストな選択は何かを考えないといけない。

ソフトウェアが搭載されたエレメントの信頼性の証明は難しいし、自分はソフトウェアの完全性の証明は永遠にできないと思っている。ソフトウェアでシステムを実現している以上、Systematic Failure のリスクは一生背負っていると考えた方がよい。それを完全に排除しようとするのではなく、できるだけ小さくするには何をどうすればよいのか考えないといけない。

そう考えると、ソフトウェアモジュールの分割とその独立性の証明、アーキテクチャの洗練は非常に重要になる。それは、ASIL D = ASIL C(D) + ASIL C(D) といった単純な式で表せるようなものではないと思う。

むろん、プロセスアプローチだけで解決できない。もっと、ISO 26262 を読み込まないといけない。

P.S.

ファーストサーバの事故再発防止策はおそらくこんな感じになるだろう。
  1.  検証環境におけるテストの網羅性の向上。(レグレッションテストに対するカバレッジの計測と記録も必要)
  2. ファイル削除コマンドといった影響度の高いコマンドをリストアップし、保守ソフトにおいてそれらのコマンドが使用されていればそこだけ抽出し、設計者以外の第三者によるレビューを行う。
  3. さらなるフォールト・トレラント (Fault Tolerant)として、保守ソフトを監視するソフトウェアを追加し、危険を察知したら保守ソフトを止める。(システムが複雑になるので、あまりお勧めはしない)
人間が関わっている限りヒューマンエラーはゼロにはならない。逆に言えば、バックアップを取らずに、大事なファイルの取り扱いや、削除コマンドを使うときは慎重に行うといった人間の意識に働きかける対策の方が実質的な効果が高かったりする。日本人の品質を心配する意識の高さが、Made in Japan の品質の高さに貢献していると考えるのはそういう理由からだ。ただ、品質を心配する意識だけで安全を担保できないほどシステムが複雑化しているのも事実だ。