2008-08-24

安全ソフトウェアの設計(その4)

組込みZine に 安全ソフトウェアの設計~第4回 安全ソフトウェアの実現と維持に向けた取り組み~ を書きましたのでご参照ください。

-ソフトウェア安全確保のための重要な要素-

   □    Design & Verification
  □□□   Methodologies & Techniques
 □□□□□  Rules/Regulations
□□□□□□□ Safety Culture

※Rules/Regulations:Rules/Regulations for Safety Critical System development

この記事のポイントは組織の中にSafety Culture(安全文化)を定着させ、そのSafety Culture(安全文化)に立脚してRules/Regulations(規定/規則)を作り、Rules/Regulations(規定/規則)のもとでMethodologies & Techniques(方法論と技術)が検討され、Methodologies & Techniques(方法論と技術)に基づいてDesign & Verification(設計と検証)が実施されるべきであるということである。

でも、安全文化・品質文化を組織に定着させるのは簡単ではない。かつて、組込みソフトエンジニアは、自分が作っているソフトウェアがどのような製品に搭載され、どのようなユーザーがどんな風に使うのかををよく知っていたものだが、今では必ずしもすべてのソフトウェアエンジニアが、エンドユーザーがどのように製品を使うのかを知っているとは限らない。

汎用に使える市販のソフトウェア部品も増えてきている。汎用なソフトウェア部品を作っているエンジニアはどこまで自分たちが作っているソフトウェアの安全性や信頼性を高めれば要求に耐えうるのかよく分からないこともあるだろう。市販で買ってきたソフトウェアや、自組織内で過去に作られた開発のプロセスがよく分かっていないソフトウェアをそのまま製品に使って問題は絶対起きないと言い切れるだろうか。

こんな時代だからこそ、安全ソフトウェアの設計とは何か、何をしなければいけないのかを考えなければいけない。
 

2008-08-17

国際標準との向き合い方

ソフトウェアの世界でも国際標準への対応が求められる機会が今後増えてくると考えられる。ISO 9001などが最もポピュラーだが、各業務ドメインにおいてもソフトウェアを意識した個別の規格がでてきた。日本のエンジニア特にソフトウェアエンジニアは国際基準・国際規格との付き合い方が下手だ。

それは、おそらくソフトウェアエンジニアが自分たちの日々の取り組みを外部にさらす機会がほとんどなかったからだと推測される。今回はソフトウェアエンジニアが国際標準とどのように向き合っていけばよいのかを考えてみる。

【国際標準との向き合い方】

国際標準の策定に対して、日本のエンジニアは自分たちとは縁遠いもの、天から振ってくるものだと考えがちだが、実際にはそうではない。国際標準は各国の代表が意見を出し合って議論し、投票によって内容を決定する。もちろん日本も代表として標準の策定に参画しているので、意見を主張することができる。ただし、日本人は議論の際に押しが弱く、欧州のように多数派を構成する能力に長けていないため、国際標準を自分たちの考え方に引き寄せることが難しいようだ。その結果、国際標準の多くは欧米が中心となって作られることが多く、責任を権限が明確な組織において構成メンバの役割をベースに「誰が何を」すべきかに焦点が当てられることになる。

ところが、責任や権限が明確でなくても、いざというとき、エンジニア同士が権限の範囲を超えて協力しあうことで問題を解決していく日本の環境では、このような考え方で体系化された方法論がうまく機能しない場合もある。しかし、鉄道、航空機、自動車、医療機器、航空宇宙など、組込み製品にソフトウェアを搭載して世界に商品を展開している日本の組織では、世界の標準や規格が日本人に合わないと愚痴をこぼしているだけでは、グローバルマーケットで生きていくことはできない。

多数派を占める欧米中心に決まった標準であったとしても、世界に商品を供給していくのなら世界のルールににしたがって自分たちの商品の安全性や信頼性を示すことも必要なのだ。海外の企業と渡り合っていくのなら日本人もルールの策定に積極的に関わり、自分たちの主張を標準に反映させるように働きかけていくことが大事である。

国際標準を「自分たちには縁遠いもの」「天から振ってきたもの」「実質的には役に立たないもの」と考え、国際基準の縛りから逃れる抜け道を探すのではなく、基準が作られた背景や策定に関わった人々の考え方をポジティブに捉えて、どうしたら自分たちの中に取り入れることができるかどうかを考えることが重要である。

【安全性や信頼性を説明する責任】

グローバルなマーケットで商品をリリースし社会的な責任を負っていく組織は、ユーザーに対して商品を実質的に安全で信頼して使ってもらえるようにするのと同時に、商品が安全で信頼できることについて根拠を持って説明できるようにすることがが求められる。開発プロジェクトは、組織内の品質保証担当や外部監査機関、組込みソフトウェアを発注したクライアントなどにソフトウェアの安全性や信頼性を説明する。クリティカルデバイスのソフトウェアの世界では、定期的な内部監査、外部監査が行われ、監査の際に十分な説明ができないと是正を求められたり、最悪の場合商品の出荷を停止させられたりすることもある。

近年、組込みソフトの規模が増大し、複雑化が進んだことによって、組込み商品そのものの安全性や信頼性を示すだけでは事故を防止することが難しくなり、商品に搭載するソフトウェアの安全性や信頼性についても説明責任を果たす義務が生じるようになってきた。この傾向は、航空宇宙、鉄道、プラント、医療機器のようなクリティカルなソフトウェアでかつ、資格を持ったオペレータが商品を扱う業種で検討が進んできたが、今後は自動車など資格を持ったオペレータではない、一般ユーザーが使用するような機器に搭載するソフトウェアに対しても、安全性や信頼性の証明が求められるようになってくることが予想される。

【説明責任が果たせない製品は世界に受け入れられないし実際に危ない】

日本の特に昔気質のエンジニアは、「商品が実質的に安全で信頼性が高ければその根拠をわざわざ示す必要はない」、「自分たちには安全で信頼できる商品を作り上げる自信がある」、「その開発工程や工程内の活動はわざわざ他人に披露するようなものではない」と考える人が少なからずいるように見受けらる。実際に安全で信頼性の高い商品をアウトプットし続けることができていれば、その主張も分からないではないが、大規模、複雑化したソフトウェアシステムにおいて安全や信頼を確保し続けることが難しくなった今日では、仮に日本製品のリコールの数が他国の製品に比べて圧倒的に少なかったとしても「最終製品の品質が高ければ、開発の工程や安全や信頼の根拠を見せる必要がない」という主張は国際的には「逃げ」や「隠蔽」ととらえられてしまう。

日本人が作っているから安全であるという主張は組込みソフトウェアの規模が小さかった時代には通じたかもしれないが、ソースコードの行数が数十万行から数百万行になってくる、また、オフショア開発で海外にソフトウェアの制作を依頼するようになった現在では説得力がない。商品に組み込んだソフトウェアが安全で信頼できるかどうかは、国際的な標準で説明できりようにしておくことが必要となる。仮に日本のエンジニアが独自の方法で製品に搭載するソフトウェアの品質を確保しており、国際標準が示す方法と相違点があったとしても、その根拠を説明することが必要なのだ。

【国際標準をポジティブにとらえる】

このとき、ソフトウェアの安全性や信頼性を国際標準に沿って説明するための労力を、育った環境の違う人たちへの余計な作業だとネガティブに考えてはいけない。ソフトウェアに起因するリコールが増えてきたことによって、日本のユーザーだけではなく世界のユーザーが製品に搭載されているソフトウェアが安全で信頼できることの説明責任を求めるようになってきたのだと認識しなければならない。国際標準に対するネガティブな気持ちをポジティブに切り替えるには、まず、世界のユーザーが何を考え、何を要求していることを知って、国際標準が目指していることと、国際標準がに記された内容のうち自分対に役立つところを見いだそうと前向きに考えることが必要となる。

その考え方ができれば、現状の自分たちのソフトウェア開発において、国際標準のどの部分を取り入れると有効なのか、どうすれば世界に対する説明責任を果たすことができるのかが見えてくるはずである。また、国際標準の有効性は何かを追っていくとクリティカルデバイスのソフトウェアエンジニアでなくても、ソフトウェアの安全や信頼で先行する業界の世界標準を知り、それらの良いところを自分のドメイン、自分の製品に取り入れることができるようになる。それができれば、自分たちの製品においてリコールを起こさないソフトウェアを作るためにプラスに働くだろう。
 

2008-08-01

サムライエンジニア

三冊屋というのが話題だそうだ。一冊ではなく関連のある三冊を束ねて本屋は売って、我々はそれを買って読む。

いろいろなジャンルがある中で、一番人気が次の三冊だという。この三冊の共通する特徴は、「日本を紹介するために書かれた初版が外国語の本」である。三冊合わせて Amazon で買うとちょうど 1533円となり送料が無料になる。
  1. 武士道(新渡戸稲造著)
  2. 茶の本(岡倉覚三著)
  3. 代表的日本人(内村鑑三著)
今は武士道の本を読んでいるが、なんせ新渡戸稲造が生きていたときの時代の本なので言葉が難しい。

まあ、それはそれとして「武士道」を読んでいるうちに、サムライエンジニアという言葉が頭に浮かんできた。サムライエンジニアとは武士道の精神を持ち合わせたエンジニアという意味だ。

自分が考えるサムライエンジニアとは次のような技術者のことだ。(字下げされている部分は『武士道』からの引用)

【義】 サムライエンジニアは義理堅く恩義は忘れない
 義理の本来の意味は義務に他ならない。しかして義理という語のできた理由は次の事実からであると、私は思う。すなわち我々の行為、たとえば親に対する行為において、唯一の動機は愛であるべきであるが、そに欠けたる場合、孝を命ずるためには何か他の権威がなければならぬ。そこで人々はこの権威を義理において構成したのである。彼らが義理の権威を形成したことは極めて正当である。何ともなればもし愛が徳行を刺激するほどに強烈に働かない場合には、人は知性に助けを求めねばならない。すなわち人の理性を動かして、正しく行為する必要を知らしめなければならない。
サムライエンジニアは金や権威では動かない。受けた恩義を返すために動く。

【勇】 サムライエンジニアは正しいことを行うときこそ勇気を使う 
 勇気は、義のために行われるのでなければ、徳の中に数えられるにほとんど値しない。孔子は『論語』において、その常用の論法に従い消極的に勇の定義を下して、「義を見てならざるは勇なきなり」と説いた。この格言を積極的に言い直せば、「勇とは義(ただ)しき事をなすことなり」である。
サムライエンジニアは組織や上司の命令あっても、コンプライアンスや顧客に不利益となることは行わない。顧客に不利益となることを指示された場合は勇気をもって義のために反論する。

【仁】 サムライエンジニアは仁愛を持って他者に接する 
 仁は柔和なる徳であって、母のごとくである。真直なる道義と厳格なる正義とが特に男性的であるとすれば、慈愛は女性的なる柔和さと説得性を持つ。我々は無差別的な愛に溺れることなく、正義と道義をもってこれに塩つくべきことを戒められた。伊達政宗が「義に過ぐれば固くなる、仁に過ぐれば弱くなる」と道破せる格言は、人のしばしば引用するところである。
 幸いにも慈愛は美であり、しかも希有ではない。「最も剛毅なる者は柔和なる者は最も柔和なる者であり、愛ある者は勇敢なるものである」とは普遍的に真理である。「武士の情け」という言は、直ちに我が国民の高貴なる情感に訴えた。武士の仁愛が他の人間の仁愛と種別的に異なるわけではない。しかし武士の場合にありては愛は盲目的な衝動ではなく、正義に対して適当なる顧慮を払える愛であり、また単に或る心の状態としてのみではなく、殺生与奪の権力を背後に有する愛だからである。
サムライエンジニアは誠実な隣人に対して仁愛を持って接する。クライアントとサプライヤの関係や上司と部下の関係を利用することはせず、誠実な技術者には立場を越えて協業する。

【礼】 サムライエンジニアは正当なる物事に対して尊敬の念を抱き礼を尽くす
 作法の慇懃鄭重(いんぎんていちょう)は日本人の著しき特性として、外人観光者を惹くところである。もし単に良き趣味を損なうことを怖れてなされるに過ぎざる時は、礼儀は貧弱なる徳である。真の礼はこれに反し、他人の感情に対する同情的思いやりの外に現れたるものである。それはまた正当なる事物に対する正当なる尊敬、したがって社会的地位に対する正当なる尊敬を意味する。何となれば社会的地位に対する尊敬を意味する。
サムライエンジニアは高き技術に素直に感動し、その技術を吸収したいと考えるとともに、その技術、その技術を持つ者を尊敬し礼を尽くす。

【誠】 サムライエンジニアは誠実に徹し、嘘をつかない 
 真実と誠実なくしては、礼儀は茶番であり芝居である。伊達政宗曰く、「礼に過ぐれば諂い(へつらい)となる」と。「心だに誠の道にかないなば、祈らずとても神や守らん」と戒めし昔の歌人は、ポロニウスを凌駕する。孔子は『中庸』において誠を尊び、これに超自然力を賦与してほとんど神と同視した。曰く、「誠は物の終始なり、誠ならざれば物なし」と。
サムライエンジニアは失敗やリスク、日程の遅れの可能性について嘘をつかない。真実を報告し、問題解決を誠実に遂行する。

-----------

子供の頃、ウルトラマンや仮面ライダーが好きだった。あの頃の子供向けテレビ番組はみんな勧善懲悪だった。子供の頃のテレビ番組に強く影響を受けるなんて我ながら幼稚だなあと思っていた。でも、よくよく考えてみれば、ウルトラマンや仮面ライダーのベースにあったのは武士道の精神ではないか。21世紀になって、マッハGoGoGoの実写版「スピードレーサー」を見て胸が熱くなってもいいんじゃないかと思う。

サムライエンジニアは強きをくじいて弱きを助ける。ここでいう「強き」とは、例えば権威を笠に着て実力もないのに暴利をむさぼるような巨大組織のようなものだ。子供のテレビ番組では必ずこういう悪者は正義の味方にやっつけられるのだが、現実にはそう簡単にはいかない。

だからこそ、現代のサムライエンジニアは刀を研ぎ、剣術を修得しておかなければいけない。また、持っている刀や剣術の腕をひけらかすこともしてはいけない。そして、ここぞというときに刀を抜き悪を切るのだ。

そんなサムライエンジニアに自分はなりたい。