2013-03-30

安全について理解を深めてもらいたい(パブリックコメントで)

独立行政法人情報処理推進機構 技術本部 ソフトウェア・エンジニアリング・センター から、ソフトウェア品質説明のための制度ガイドライン(案)に対するパブリックコメントの募集が始まった。(4/30まで)

自分は、医療機器ドメインの者としてプライベートな立場で下記のコメントを送った。他のドメインの方も、このガイドライン案に真摯に向き合ってコメントがあればコメントをしていただきたいと思う。

なお、信じてもらえないかもしれないが、このパブリック・コメントは自分や自分の所属組織、所属業務ドメインの利益のために書いたのではない。医療機器を使うエンドユーザーや医療機器を作るエンジニアのことを第一に考えて書いた。本ブログを隅々読んでいただいている方には理解していただけると信じている。
パブリックコメント
パブリックコメント(Public Comment、意見公募手続、意見提出制度)とは、公的な機関が規則あるいは命令などの類のものを制定しようとするときに、広く公に(=パブリック)に、意見・情報・改善案など(=コメント)を求める手続をいう。公的な機関が規則などを定める前に、その影響が及ぶ対象者などの意見を事前に聴取し、その結果を反映させることによって、よりよい行政を目指すものである。通称パブコメ。日本では、意見公募の手続きそのものを指すことばとしても用いられるため、本来の行政が政策、制度等を決定する際に公衆の志見を聞いて、それを考慮しながら最終決定を行う仕観み、における公募に寄せられた意見と区分して、国民、市民など、公衆の意見はおもに「パブリックコメント手続」と呼ばれる。
-----------------------------

ソフトウェア品質説明のための制度ガイドライン(案)~パブリック・コメント募集のお知らせ~

2013年3月29日公開
独立行政法人情報処理推進機構
技術本部 ソフトウェア・エンジニアリング・センター

http://sec.ipa.go.jp/pubcom/20130329.html
-----------------------------
ソフトウェア品質説明のための制度ガイドライン(案) パブリック・コメントを送りますのでご査収ください。

<本パブリックコメントの趣旨>

ソフトウェア品質説明のための制度ガイドライン(案) ではソフトウェア品質を高める、ソフトウェア品質の客観的に説明するための方策、制度を提案している。しかし、ソフトウェア品質を説明することで製品または製品に搭載しているソフトウェア、またはソフトウェアシステムの安全を説明、証明することはできない。本コメントはこのことを主張するものである。

特にクリティカル・セーフティシステムの範疇にある医療用ソフトウェアに関しては、経済産業省より 医療用ソフトウェアに関する研究会-中間報告書が 平成25年3月28日 に発行されているので、これを参照していただきたい。


ソフトウェア品質説明のための制度ガイドライン(案) に欠けており、医療用ソフトウェアの安全確保のために国際社会から必須要求となっているのは、ISO 14971に代表されるリスクマネジメントの考え方である。ソフトウェア品質説明のための制度ガイドライン(案)中にもリスクの評価ということばが現れるが、リスクマネジメントを行う際に、対象となる製品やソフトウェアがユーザー、オペレータ、周辺環境に及ぼすまたは影響を受ける具体的なリスク、危険状態等を想定せずに安全を確保することはできない。ソフトウェア品質の説明で安全が説明、確保できるというのならそれはすべてのリスク、ハザードに有効な銀の弾丸が存在することを主張しているのと同じである。

ソフトウェア品質説明のための制度ガイドライン(案) のスコープ(2. 制度の基本的な考え方)はソフトウェア品質に限定し、スコープから明確に安全(セーフティ)を除外することを提案する。

以上
-----------------------------
下記は本コメントの本文ではない。本主張の元となるブログの記事の抜粋である。

-----------------------------
安全について理解を深める

世の中で数学や物理、化学など再現が可能で証明できる定理はたくさんある。一方で、答えが同じにならないこともたくさんある。人間が作るソフトウェアに関することはほとんどがそうだし、安全に関する概念、定義も同様に絶対的なものは存在しない。

そこで、何をもとに安全(Safety)を説明すべきかずっと考えていた。実は、ISOやIECの国際規格でさえ、定義に矛盾や背反が存在する。

業務ドメインの違いによって対立軸がある場合もある。例えば、IEC 61508 に代表される機能安全のグループと ISO 14971 や IEC 60601-1, IEC 62304 といった医療機器関係の国際規格には考え方の違いがある。

安全(Safety)に対する概念は機能安全系の規格と医療機器系の規格では差異があるかもしれないということだ。(詳細に比較、検証したことはない) 国際規格を検討しているグループは、常に規格間の概念の差異や用語の定義の相違を是正すべく、努力を続けている。国際規格は一度決めたら終わりではない。常に生きているのだ。逆に言えば、国際標準でさえ、統一されていない考え方、主張も現実にはあるということである。

そういう現状があるから、医療機器系の安全(Safety)の概念をごり押しするような伝道では、自動車、鉄道、航空宇宙等のドメインの方達に受け入れてもらえないであろうと思っている。

そこで、考えたのが ISO/IEC Guide 51:1999 Safety aspects — Guidelines for their inclusion in standards (JIS Z 8051:2004 安全側面-規格への導入指針) を使って説明する方法だ。

ISO/IEC Guide 51 は、規格に安全に関する規定を導入する際に参照され、機械、電気、医療、科学など幅広い分野で作成される安全規格に適用されるガイドラインである。

だから、ISO/IEC Guide 51 は言わば、機械、電気、医療、科学に関する国際規格の上位に位置するガイドラインだ。そして、日本には、ISO/IEC Guide 51 の解説者として著名な明治大学の向殿政男先生がいる。向殿先生が監修されている『安全設計の基本概念』には、ISO/IEC Guide 51 のことが非常に丁寧に分かりやすく説明されている。

自分はこの本を引用しながら、ISO/IEC Guide 51が定義する安全の概念について、ここに記そうと思う。
安全の定義とは

下記の文章は記事の執筆を依頼されたあるガイドラインにために書いた原稿の一部で、安全の定義について説明した文章なのでまずは読んでみて欲しい。
安全(セーフティ)とは、〔ISO/IEC GUIDE 51:1999〕によれば,『受容できないリスクがないこと』と定義される。すなわち、安全(セーフティ)は受け入れ不可能なリスクから解放されていることであり「受容できないリスクがない」または「許容可能リスク」が達成されていることをもって「安全」と規定される。 
安全はリスクを経由して定義され、リスクはその時代、社会の情勢、環境によっても変化するため安全の尺度を一定にすることはできず、絶対的な安全を定義することはできない。そのため、製品、プロセスまたはサービスは相対的に安全であるとしか言えない。 
安全は、リスクを許容可能なレベルまで低減させることで達成される。許容可能なリスクは、使用者の利便性、目的適合性,費用対効果、並びに関連社会の慣習のように諸要因とのバランスで決定される。したがって、許容可能なリスクは常に見直す必要がある。 
技術及び知識の両面の開発が進み,製品,プロセスまたはサービスの使用と両立して、最小リスクを達成できるような改善が経済的に実現可能になったときは、特に見直しが必要である。
安全(セーフティ)は『受容できないリスクがないこと』だから、リスクを想定しなければ、また、リスクを想定できなければ、安全を確保することはできない。安全に関して主張したいことの中で最も重要なことがこれだ。

「具体的なリスクを想定しないでソフトウェア品質やソフトウェアの信頼性について語る人」「具体的なリスクを想定しないで、実装すると効果がある対策、方法論があるという人」「具体的なリスクを想定しないで、開発に採用すると効果があるツールであると主張する人」がいる。

これらの人達は安全(セーフティ)について語っているのではない。安全(セーフティ)を実現するためのリスクコントロール手段を説明しているのではない。

ソフトウェアの品質の向上施策・信頼性向上について語っているのだ。Quality(品質) や Dependability(信頼性), Reliability(信頼性)の話であって、Safety(安全)の話ではない。

ISO/IEC Guide 51より、安全性と信頼性の違いについての記述を引用する。
信頼性は機器で言えば、故障せずにその機能を正常に保つことを目標にするものであり、一方、安全性は人間に危害が及ばないように機器が機能し、使用することができることを目標としている。 
もちろん、故障しないで本来機能を発揮することにより安全性を確保することが望ましいが、故障しても安全性を確保する設計が安全設計では望まれる。これにより信頼性と安全性は異なる概念であることが分かる。
また、すべてのリスクに対して有効に働くリスク低減手段は存在せず、個々の製品、プロセスまたはサービスに対してリスクアセスメントを行った上でリスク低減策を設計しなければ安全は確保できない。
製品、プロセスまたはサービスに対する品質向上施策は信頼性向上には効果があっても安全性向上にも効果があるとは限らない。これは品質が高いことと安全であることは同位ではなく、品質の概念と安全の概念の間にも異なる観点が存在することを意味している。

なお、『ソフトウェア品質知識体系ガイド―SQuBOK Guide』には、品質についての定義がいくつも紹介されている。品質を価値と考え、安全は価値の一つであると定義すれば、安全は品質に包含されるのかもしれない。しかし、品質は概念が広すぎて、品質向上施策の御旗が何でもありのように安易に使われてしまう危険性を感じる。

この記事を読んでおられる読者は「抽象だろうと、具体だろうと、信頼性を目指しても、安全性を目指しても、結果的にやることは同じだろう」と思われているかもしれないが、それは違う。

分かりやすい例で言えば、鉄道では何かあったとときは列車、電車を止める制御をすれば安全を確保できる。(登山鉄道とか崩れかけた鉄橋の上といった危険状態ではその限りではないかもしれない) しかし、飛行機が空を飛んでいるときのリスクコントロール手段は飛行機を停止させることではない。飛行中に何か異常があった場合は、緊急着陸するまで飛行機を飛ばし続けなければいけない。鉄道のように止めてはいけない。同じ、輸送手段であっても、リスクや危険状態(Hazardous Situation)によって、リスクコントロール手段(Risk Control Measure)は異なるのだ。

例えば、車のエンジンサイズまで、容量を小さくした超小型の原子力エンジンが発明されたとする。(現実の世界では原子力空母の中に原子炉がある)

爆発すれば被害は甚大だが、20年間燃料の補給が不要で安全性も完璧だという触れ込みで発売されたとする。原子力エンジンの製造メーカーは、異常時には超小型原子炉を停止させる独立した安全装置が付いているので、どんな用途にも安全に使えると宣伝した。

しかし、最初の例示したように、この超小型の原子力エンジンの安全装置は飛行機のリスクコントロールには使えない。安全に原子力エンジンを停止すれば、飛行機が墜落してしまうからである。

飛行機の製造業者はそんなことは百も承知なので、例えば、エンジンを2機積むなどしてリスクをコントロールするだろう。(現実にもそうだ)

伝道師が強調したいのは、安全は最終製品に対するリスクを想定できるもののみが達成できるのであり、ソフトウェアの Quality(品質)やDependability(信頼性), Reliability(信頼性)のみを語る人には、安全は達成できないということである。(エンドユーザにとってどんなリスクが有りうるかを想定していないから、対応策がリスクを受容するに十分かどうか判断できない。すべてのリスクに対応できると言うならそれは銀の弾丸だ。)

だから、ISO/IEC GUIDE 51:1999 では安全を『受容できないリスクがないこと』と定義したのだ。設計者や機器のオペレータができるのは「リスクを許容可能なレベルまで低減させる」ことだけだ。リスクをゼロにすることはできないし、できると考えてはいけない。福島の原子力発電所の事故の経験がそれを裏付けている。

そして、、ISO/IEC GUIDE 51:1999 には「許容可能なリスクは、使用者の利便性、目的適合性,費用対効果、並びに関連社会の慣習のように諸要因とのバランスで決定される。したがって、許容可能なリスクは常に見直す必要がある。 」と書かれている。

この常に見直しをする必要があるというところが重要なポイントである。ISO/IEC GUIDE 51:1999 にリスクアセスメント及びリスク低減の反復プロセスの図が掲載されている。

この図の最も重要なところは、リスクアセスメントとリスク低減は繰り返す必要があるということである。
なぜか。リスクはその時代、社会の情勢、環境によって変化するからである。

だから、これで完璧と思ってもそのリスクコントロール手段は時代や社会、環境の変化によって更新しなければいけないかもしれない。

アクティブ・セーフティとして代表的なABS(アンチ・ロックブレーキ・システム)も、ほとんどすべての車に装備されてしまったら、ユーザはさらなる対策を求める。

だから、リスクアセスメントとリスク低減はその市場で商品を売り続ける限り、ずっと繰り返さなければならない。

だから、安全が求められる商品は価格は高い。潜在的な価値を維持するためにコストがかかるからだ。そのコストを削ろうとすると、安全の実現に暗雲が立ち込める。(放射線治療器の Therac-25 の事故の例がそれに相当する。経済的利益を優先させた会社の判断が事故を生むトリガーになった。セーフウェアを参照のこと。)

そして、価格が高い=高利益だと思っても、セーフティ・クリティカルな商品を扱う市場への新規参入が簡単ではない。なぜなら、新規参入企業は「リスクアセスメント及びリスク低減の反復プロセス」を反復したことがないからだ。

簡単に言えば、安全に関するノウハウがない(フィードバックすべき市場情報=多くは製品の不具合情報)ので、このプロセスを回せない。

だから、各製品群ごとに安全に関する国際規格が存在する。機器の安全に関する国際規格は、リスクアセスメント及びリスク低減の反復プロセスを回したことがない企業が、いきなりもの作りをして危険な製品を作らないためのハードルであり、保険である。

逆に言えば、その商品群において、要求された安全規格をクリアすれば最低限の安全を確保できる可能性は高い。(規格を作っている人達は機器の使用環境とリスクを十分に想定しているのに、規格には危険状態:Hazardous Situation のことはあまり書いておらず、リスクコントロール手段しか書いていない点は問題だと思っている。)

ところが、ソフトウェアが絡むとそう簡単ではない。これをやれば安全という銀の弾丸のようなリスクコントロール手段はない。(最近の ISO 26262 絡みのセールスを見ていると、かつての『人月の神話』を別の形で繰り返しているように思える)

しかし、何もしないで放っておく訳にはいかないので、ソフトウェア開発プロセスによるアプローチを定義することになる。これは現在のところ、どの業務ドメインでも同じようだ。開発プロセスを管理することでしか、ソフトウェアの品質は管理できないというのが、ソフトウェア品質論の定説となっている。(『ソフトウェア品質論の歴史的推移』を参照されたし)

そこで、ソフトウェアに関する安全規格が作られると、プロセスアプローチの面が強調され、リスクアセスメントやリスクコントロールの重要性が飛んでしまう傾向を感じる。(医療機器ドメインは今はそうはなっていないが常に危険にさらされている。)

そして、業務ドメインに依存しない ソフトウェアに共通の ISO/IEC 25000. System and software product Quality. Requirements and Evaluation (SQuaRE) のような規格や、CMMI(Capability Maturity Model Integration) が、安全(Safety)にも有効だと語る者が現れる。(正確にはすべてのソフトウェア開発に有効だという主張)

しかし、それは、Quality(品質)やDependability(信頼性), Reliability(信頼性)のことを言っているのであって、Safety(安全)とは異なる。

安全を確保するためには、リスクアセスメント(ハザードの特定、リスクの見積もり、リスクの評価)とリスク対策を繰り返し行わなければいけない。一度では終わらないし、ずっと続けなければいけない。

だから、言いたいのは、Quality(品質)やDependability(信頼性), Reliability(信頼性)向上の方法論を知っている人、組織、研究者は、安全が必要な製品を開発している企業とタッグを組んで、「リスクアセスメント及びリスク低減の反復プロセス」が効果的にまわるように助けてあげて欲しい。

それは、泥臭く、効率が悪く、面倒くさいかもしれないが、それをしないと製品の安全は向上しない。そして、かつての日本ではそんなアプローチが盛んに行われてきたと聞く。詳しくはしらないが、品質機能展開は製造業者の問題解決と共に発展してきたと思うし、QCサークルだってそうだろう。

いつから日本のエンジニアは、銀の弾丸を買うこと(=方法論を一方的に受け入れる)しかしなくなってしまったのだろうか。

それと、日本の企業はソフトウェア絡みの事故情報を自分達だけで抱えて秘密にしておくなと言いたい。出せるものは出して、その情報を他の業界や研究者と共有し、再発防止策を提案していかないからいけないのだと思う。

安全対策の技術を向上させるために絶対に必要なのは、事故の詳細な情報だ。これは歴史が証明している。
スペースシャトルチャレンジャーの事故分析(宇宙)→ロケット開発に対する教訓
ミニッツロケットの安定化(軍事)→FTAの発明
ピントの事故(自動車)→FMEAの普及
Therac-25(医療機器)→医療機器のソフトウェア開発に対する教訓

これらの事故が、安全に貢献する方法論を生み出すきっかけを作った。事故情報をインプットにしないで、リスクコントロール手段を提案するのは間違いだと思っている。

2013-03-17

『組込みソフトエンジニアを極める』の感想(韓国より)

リアルタイムOSから出発して組込みソフトエンジニアを極める』の韓国語版がリリースされ、ハングルでタイトルを検索してみたところ、書評を書いてくれた方がいることがわかった。

ちなみに、この本は韓国語版では『品質を考えている組込みソフトウェアの設計』というタイトルになっていることに初めて気がついた。

ハングルはまったく読めないのだが、Google のお陰でちょっとでもヒントがあれば目的の情報に到達することができる。Google Chrome なら他言語で書かれたページも母国語に翻訳できる。これはすごい技術革新だと思う。意味が完全に通らないところもあるが、これまでならまったくあきらめていたハングルのページも読めるようになった。

言語の壁を少しでも下げてくれたことはとてもありがたい。知らぬ間に世界は広がったのだ。Google に感謝しよう。

さて韓国人のjhrogueさんの書評を少し引用させてもらおう。『読書好き:品質を考えている組込みソフトウェアの設計』(たまたま、jhrogueさんが使っているのもこのブログサイトと同じ blogger だ)

※Goggle 翻訳なので日本語の表現が少し変かもしれないがそこはご愛敬。([鈎括弧]は注釈)
ドングリ出版社[今回韓国語版の本書を出版してくれた韓国の出版社]からの技術書籍をたくさん受けたので義務感(うん?)半好奇心半分で読破し始めた。その結果、今日は久しぶりに埋め込まれた書籍を紹介しようと思う。1番打者はまさに "品質を考えている組込みソフトウェア設計"だ。この本は、従来のハードウェア大国である日本で出てきたソフトウェアを優先的にアクセスするアメリカン組み込み本とは異なり、国内情緒にもよく合致するという利点があるので、用語などがちょっと日本な点を除いては(むしろ電子側アクセスする場合利点になるかもしれない)国内書読んで感じを受けるかもしれない。 
この本を面白く読むにはこの本の最終的な目標を知っている必要がありますが、原書のタイトルが "組込みソフトウェアエンジニアを極める"ということが重要なヒントを提供する(個人的には、原書のタイトルが胸に届く)。この本は、組込みソフトウェアの分野でプロフェッショナルなエンジニアになるための長い道のりを説明している。序文で提示した "組込みエンジニアの上手になるためのロードマップ"を見ると、大きく組込みソフトウェアエンジニア個人としての目標と組込みソフトウェアプロジェクトとしての目標という二つの大分類に分けて、それぞれの障害物/壁を説明し、これを超える方法を鳥瞰している。次の図を見ると、もっと理解が容易である。 
[日本の初版本に掲載したイラスト]
組み込み関連書籍を執筆してみたB級プログラマの観点から見ると、この本は、組込み開発の過程で直面する難しさを非常によく取って出して体系的に整理したという考えである(率直にたくさん驚いた)。もちろん、オブジェクト指向設計手法を適用する過程で(組み込み分野に入るマトチュリョダてみると)少しぎこちない部分が出たりしかし大勢には大きな支障はない。何よりも抽象的な話ではなく、現場で接して見たらそうな例で話を解いていく方法を使用しているので理解するのが容易だ。一例として、1部と2部では、感熱式プリンタに印刷するケースが徐々に発展され展開される、組み込み分野でのリアルタイムの重要性をよく表している例なので、ファームウェアを開発やっ組み込み開発者であれば十分に共感して読むことができるだろう。また、多少流れる雲とるような再利用と品質関連の既存の理論を組み込みに合わせて減らし変更して実践可能な形で一目瞭然に提示した3章と4章でも、いくつかの良い例が出てくるのでかゆい部分を掻き与える。 
結論:初中級組込み開発者であれば1部と2部を読んで技術的な知識を習得することができ、中高級組込​​み開発者であれば3部と4部を読んで開発文化を忠実に固めることができる。久しぶりに出てきた楽しみながら有益な組込み開発の書籍なので強くお勧めします。
jhrogueさん、書評をありがとうございます。

さて、この書評の中で「この本は、従来のハードウェア大国である日本で出てきた本で、ソフトウェアを優先的にアクセスするアメリカの組み込み本とは異なり、韓国の国内事情にもよく合致するという利点がある」(一部意訳)というところが一番うれしかった。

自分は組込みソフトウェアの品質を高める、組込み機器の価値を高めるために欧米発のプロセスアプローチを使うことを完全否定している訳ではない。

ソフトウェアシステムはソフトウェアエンジニアの日々の積み重ねの成果だから、エンジニアの性格やプロジェクトの習慣や、その国の文化がソフトウェアの品質に大きな影響を与える。

だから、欧米で上手くいくプロセスアプローチがアジアのエンジニアにも有効だとは限らない。しかも、日本の組込み機器の品質は世界一だと言われているのに、なぜ日本のソフトウェアの品質が高いのか答えを追求せず、欧米のアプローチをそのまま受け入れようとする人達が大勢いることに自分は納得がいかない。(自分達の作品に自信がないのだろうか?)

なお、アメリカだってプロセスアプローチだけがよいと言われているわけではない。次のような本を読めばソフトウェア開発にはプロセスアプローチとは別の重要な視点があることに気がつくはずだ。

  

また、Agile プロセスは『リアルタイムOSから出発して組込みソフトエンジニアを極める』で紹介しているボトムアップのアプローチに近いかも知れない。

日本人はどうして欧米で開発されたソフトウェアの方法論が優れていると疑いもせずに受け入れてしまうのだろう。日本で培われた品質管理の方法論は今では日本よりもアメリカで有名になっていることを知らないのだろう。 MBAを取った友人が開発の上流工程で "The 5 whys method" を使った方がよいと言ったことがある。そのとき、それって、トヨタが生産現場で始めた「なぜなぜ分析」(なぜを5回繰り返す)手法 ※1 じゃないかと思った。どうして最初に考えた人や実践した人達を敬おうとしないのか、どうして英語だと格上と決めつけてしまうのだろうか。アメリカ人は最初に考えた人達を Respect しているのに、日本人がそうしないのが不思議だとも思った。

※1 なぜなぜ分析(なぜを5回繰り返す):ある問題とその問題に対する対策に関して、その問題を引き起こした要因(『なぜ』)を提示し、さらにその要因を引き起こした要因(『なぜ』)を提示することを繰り返すことにより、その問題への対策の効果を検証する手段

タグチメソッドも品質機能展開(QFD)もそうだ。先日、YouTubeでアメリカ人が FTA をレクチャーしている映像で ポカヨケをそのまま "Poka-yoke" って言っているのを聞いてすごく驚いた。ポカヨケは英語でそのまま通じるのだ。

今の時代、欧米発ではなくアジア発のソフトウェア開発論、ソフトウェア品質論があってもいいはずだ。どっちがいいかではなく、どうすれば品質の高い、価値の高い商品を開発できるかを考えることが重要だ。

自分はソフトウェアの開発ではソフトウェアエンジニアの性格、プロジェクトの習慣、その国の文化を考慮しなければ効果的に目的を達成することはできないと信じている。

欧米の文化で最適なアプローチがアジアの国々のソフトウェア開発プロジェクトでも最適であるとは限らないと思うのだ。それは、ISO 26262 についても同じだと思っている。

リアルタイムOSから出発して組込みソフトエンジニアを極める』で書いたことが、韓国のソフトウェアエンジニアにも同意してもらえるのならば、それがアジア発の開発アプローチの一端なのかもしれない。

2013-03-09

ISO 26262との向き合い方 (22) テンプレートで乗り切る功罪2

ISO 26262との向き合い方 (10) ISO 26262 をテンプレートで乗り切る功罪』の記事に匿名さんから下記のようなコメントをもらった。
匿名 さんのコメント...
IEC61508-3を調査するに当たり、貴兄のページに出会うことができました。
本当に助かります。
ちなみに、JasParさんが2013年5月下旬からテンプレート等を順次を配布することになったみたいです。
3月 06, 2013
※IEC61508-3: Functional safety of electrical/electronic/programmable electronic safety-related systems Part 3:Software requirements

JasParが公開する予定の文書とは下記のことだ。MONOist のこちらの記事『「現場で使える道具に仕上げた」、JasParがISO26262関連の成果を一般公開』に詳しく書いてある。

JasParが公開するISO 26262関連の文書
公開する文書 有償/無償 提供窓口 公開時期
解説書(ソフトウェア編) 有償 日本規格協会 2013年6月以降
解説書(プロセス編) 有償 日本規格協会 2013年6月以降
解説書(マイコン編) 無償 JasParのWebサイト 2013年5月下旬
チェックリスト(ソフトウェア編) 解説書(ソフトウェア編)とセット 日本規格協会 2013年6月以降
チェックリスト(プロセス編) 解説書(プロセス編)とセット 日本規格協会 2013年6月以降
機能安全テンプレート 無償 JasParのWebサイト 2013年5月下旬
記入ガイド 無償 JasParのWebサイト 2013年5月下旬

【MONOist 記事より引用】
JasParは、2010~2012年度(2010年4月~2013年3月)の3年間、電動パワーステアリングなどの開発プロセスをたたき台にして、ISO 26262に準拠した車載システムを効率よく開発するための知見やノウハウを国内自動車業界で広く共有するための取り組みを進めてきた。これらの取り組みは、2011年度と2012年度の各年度で、異なる認証機関によるレビューも受けている。2012年度は、自動車メーカーやティア1サプライヤ、半導体メーカー、開発ツールベンダなど27社から94人のエンジニアが参加し、1850ページの文書を作成した。認証機関からは420項目もの指摘があったものの、これらの指摘は文書に全て反映されている。
こう書いてあるので、日本の自動車業界総出で作り上げた ISO 26262 に適合するための解説、チェックシート、テンプレートのようだ。

規格認証機関からの指摘も反映させているということなので、規格認証機関もこのテンプレートに沿って作られたドキュメントをむげに却下することはできないだろう。

規格適合をテンプレートで乗りきる問題

規格適合を乗りきるのにテンプレートを使う方法は最も効果的だと思う。テンプレートといくつかの具体的な事例と解説、これらが揃っていると書類を作る側の理解が早い。

でも、『ISO 26262との向き合い方 (10) ISO 26262 をテンプレートで乗り切る功罪』で主張したことをもう一度説明したいと思う。

規格適合のためにテンプレートを作ったときの現場のエンジニアの反応は次の二つに分かれる。
  1. 素直に受け入れて要求を理解し穴埋めしようとする。
  2. 型にはめられることに反発し、本心では役に立たないと思いつつ穴を埋めたという事実だけ残す。
ほとんどの場合は1のタイプだが、2のタイプも一定の割合で必ず存在する。ソフトウェア開発でAgileプロセスを使っているプロジェクトもあると思うが、そういうプロジェクトは2になる確率が高い。そもそも、Agileとテンプレートはコンセプトが相反している。型にはめないで機敏にプロセスを回す(イテレーション)のがAgile のコンセプトだ。

ちなみに、自分は規格適合にテンプレートを使うにあたって、タイプ1 と タイプ2 のプロジェクトの両方に対応し、本質を理解しながら進めてもらうために次のような条件を付けている。

『このテンプレートはサンプルであり、要求を満たすことができるならば、様式は問わない。』

こうしておけば、タイプ2 のプロジェクトも型にはまらずに元の要求を満たせる自分達のスタイルを追求できる。

ところが、元の要求を満たせる自分達のスタイルを追求しようとしたプロジェクトが現れることはほとんどない。その理由は、その時間がないほど開発に余裕がないからだと予想している。

もとの要求をじっくり理解する時間もないし、自分達のスタイルを確立するのはたいへんだから、開発を横において、もしくは開発を進めながら自分達の様式を作る余裕がないのだ。

そうなると用意されたテンプレートを埋める方が圧倒的に早い。上記のタイプ1は要求を理解しようとしていて、タイプ2は形骸化しているように書いたが、実際には1と2の間が多いと思う。

ようするに、要求を理解して自分達のスタイルを追求したい気持ちは山々だが、十分な時間がないので穴を埋めることで規格適合をパスできるのならさっさと埋めて終わりにしたいと考えるのだ。

構造化プログラミングが教えたプラクティス

そのときに、思い浮かぶのが構造化プログラミングの教訓の話だ。この話はデバッグ工学研究所の松尾谷徹代表から伺った話である。

構造化プログラミングの提唱者(エドガー・ダイクストラ)は次のようなプロフィールを持っていた。
  • セマフォ(semaphore)排他制御方式の提唱
  • 最短経路問題の解放:ダイクストラ法
  • 他にも、スタック、ベクトル。Algo60のコンパイラ設計など
  • 1930年オランダのロッテルダムに生まれた
  • ライデン大学に入学し物理学を専攻
  • 1962年アインホーヘン工科大学の数学教授
  • 1973年オランダ在住のまま米国バローズ社(現在のユニシス社)のフェロー
  • 1984年テキサス州立大学でコンピュータ科学の教授
  • 2002年8月6日 享年72歳
そいて、1970年代、80年代 ダイクストラの「構造化プログラミング」 は話題となった。

【構造化プログラミングの特徴】
  • goto レスプログラミング
  • 制御構造の標準化/while, if then else, for ループ
  • 図表示(フローチャート)の使用
自分が今でも記憶に残っているのは先輩から「関数は50行以下にしろ」とか「gotoは絶対使ってはいけない」といったことを言われ、なぜ、それがいいのか分からずにそれに従うのはイヤだと思ったものだ。

goto を使う使わないについてはいろいろな論議があったようだが、関数50行以下は、当時の標準的なディスプレイのテキスト表示が、例えばVT100で80桁×24行だったからせいぜい画面2ページぶん、印刷すれば1ページに入るくらいにしておけばレビューしやすいという意味だったのだ。

ソフトウェアに関するルールは形骸化しやすいという典型的な例だ。ルールの意味さえちゃんと伝わっていれば状況に応じてルールを最適化できるのに数字だけが一人歩きすると形骸化する。

かつて、構造化プログラミングの効果を計測する実験が行われたと聞く。

左記がその様子だ。同じ仕様の課題を二人のプログラマに渡し一人は「オレ流のプログラミング」一人は「構造化プログラミング」でプログラムを作らせる。

どちらのプログラムが優れていただろうか。(この実験ではバグの数でソフトウェアの品質が計測された。)

当然、構造化プログラミングの方がバグの数が少ないと思われたかもしれないが、結果は「オレ流プログラミング」も「構造化プログラミング」もバグの数にほとんど差異はなかったと言う。

なぜか? その答えを説明する前に次の図を見てもらいたいと思う。

エドガー・ダイクストラは、米国バローズ社(現在のユニシス社)に在籍していたとき、あるソフトウェアプロジェクトが他のプロジェクトよりも格段にソフトウェアの生産効率が高く、品質もよいことに着目し、そのプロジェクトの設計の規範をベースに「構造化プログラミング」を考え、提唱した。

そのときの生産性が高く、高品質なソフトウェアを生み出していたプロジェクトの開発の進め方がこれだ。

プロジェクトリーダは、当初プロジェクトメンバが作ったソースコードをすべてコードレビューしていた。そのスタイルはバラバラであり、レビュー工数がかなりかかっていた。そこで、レビューワであり、プロジェクトリーダであった彼は、自分の過去の失敗を繰り返さないための設計の規範をルール化にし、これをプロジェクトメンバに説明し、その後はそのルールに基づいてプログラミングをするように指示をした。

これにより、プロジェクトメンバがアウトプットしたソースコードはレビューワであるプロジェクトリーダの設計の規範に基づいたスタイルに近づき、コードレビューのスピードが格段に上がった。

そして、このプロジェクトの生産性と品質は他のプロジェクトに比べて際立って高くなった。このエピソードから分かる構造化プログラミングが教えたプラクティスは次のようなことだ。
  • 構造化プログラミングのルールはリーダの過去の経験を設計の規範にしたものだった。
  • 設計の規範をメンバに説明し守らせることでレビュー効率が上がった。
  • リーダの熱意、レビュー、指導がなければ生産性も品質も上がらない。
「オレ流プログラミング」と「構造化プログラミング」の比較実験で差異がでなかったのは、リーダーの指導とレビューがなかったからだ。構造化プログラミングは設計の規範とリーダーのリーダーシップの両方がないと効果がないのだ。

そのことが後生に伝わらず構造化プログラミングのルールだけが一人歩きしたのは不幸だった。

同じことが、ISO 26262 のテンプレートでも起こらないとは限らない。そうならないようにするために必要なのは、組織やプロジェクトの中にいる規格の要求の真意を伝える者の存在であり、規格要求を十分に理解したレビューワの存在である。

テンプレートは一度穴埋めした状態で承認されれば、そのプロジェクトはそれを成功体験として頭に刻み込む。仮に要求の理解が間違っていたとしても、全体として一度承認されていれば、次も同じように書く。だから、レビューワの責任は重い。レビューワは「絶対に見過ごしてはいけない」というレビューポイントとそこは譲れないという信念を持っていなければいけない。一度でもその方針を崩してしまうと「あのときは何も指摘しなかったじゃないですか」と反発をくらってしまう。

だから、テンプレートは本来、レビューワが考えた頭の中の構造になっていないと具合が悪い。そうでないとレビューのスピードが上がらないのだ。逆に、レビューワの設計の規範が反映されていれば、レビューのスピードは格段に高くなり、どこを押さえればよいか、どこに問題があるか素早く判断できる。

他人が作ったテンプレートが自分自身の設計の規範と異なる、もしくはテンプレートの真意が見えない状態でプロジェクトにテンプレートの使用を義務づけると、テンプレートは形骸化する。テンプレートの穴を埋めることが目的になり、エンジニアはテンプレートの向こうにある要求が何かを考えることを止めてしまう。

そうならないようにするにはレビューワがレビューの際に要求の意味を熱意を持って伝えなければならない。そうしないと「構造化プログラミング」の比較実験と同じように、規格に適合してもしなくても品質は変わらないという結果になるだろう。

テンプレートで規格適合を乗り来るアプローチは確かに有効だと思うが、プロジェクトに要求を理解させることと、レビューワのレビューと、リーダーのリーダシップが欠落するとテンプレートは形骸化し効果がなくなるということを肝に銘じて取り組みを進めて欲しいと思う。

この記事を読んで「本当にそうだ」と納得してもられるのは、あと1、2年先の話だろうなあ・・・