※ 執筆者の敬称は略、所属は執筆当時のものです。
※ 文章中に掲載のURLは公開当初のものであり、現在使用されていない場合がございます。
ソフトウエア品質「歴史学」のすすめ
元 日本電気株式会社
笹部 進
1. はじめに
ソフトウエアの品質向上に関する様々な仕組みや工夫は、先人から受け継いだ技術蓄積があります。そしてその技術蓄積を支える考え方も一緒に蓄積されています。
本稿では、日本のソフトウエア品質技術の発展と世界とのつながりの一端を紹介しながら、日本に根付いているソフトウエア品質向上のやり方を、より一層、理解するためのヒントを提供したいと考えています。本稿は、特に若いソフトウエア技術者を意識していますが、もちろんベテランの方々にも、考え方の整理に役立てていただけるのでは、と思っています。
今日、さまざまな知識情報が我々の周りを取り巻いています。海を越えて多くの知識情報が我々の手元に届きます。このとき、海外からの情報発信に振り回されることなく、これまで発展させ蓄積してきた日本のやり方に、もっと自信を持って取り組んでほしいと思っています。ただ、注意願いたいのは、筆者の狙いは、一方的に日本のやり方の優位性を説くことではありません。むしろ、この地球上でおたがいに影響し合って、相互に発展してきた事実に目を向け、世界の全体像の中で、日本のやり方というものを理解することをお勧めするものです。
2. ソフトウエア工学とTQM(Total Quality Management)の結婚
SQiP(Software Quality Profession)活動は、その前身であるSPC研究委員会(ソフトウエア生産管理研究委員会。以下、SPCと呼ぶ。)の活動を含めれば、30年以上の歴史があります。この活動の狙いが「ソフトウエア工学とTQMの結婚」と称されているように、SPCでは、日本がハードウエア製造業の品質向上で成功を収めた原動力であるTQMの考え方と方法論を、ソフトウエア品質向上にも役立てるべく、活動を展開しました(参考文献1)。最近、若いソフトウエア技術者と話をすると、皆さんSPCもTQMも知っているのに、SPC活動の狙いが、上述の「結婚」であることを、意外にも知らないことに気がつきました。このため、あえてここで言及しました。
TQMに基づく品質管理は、日本製品の優秀性とともに世界の関係者の注目を浴びました。SPC活動に参加した多くの日本の企業が、TQMの考え方をもとにソフトウエア品質向上活動を実践して成果を上げました。NECが全社的に展開したSWQC活動における仕組みや工夫もその一例と言えるでしょう(参考文献2)。
3. 国際標準の中の日本の品質技術
良く知られているように、ISO9000ファミリーのマネジメント手法は、日本のTQMで培われたPDCAサイクルに基づいています。これは、日本の先人の努力によって国際標準に組み込まれたものです。ただ、国際標準の制定にかかわった専門家や、ハードウエア製造業に従事し日本の改善(Kaizen)を勉強した人達を除けば、海外ではISO9000ファミリーは知っていても、PDCAのことはあまり知られていません。また、ISO9000ファミリーの考え方の基礎となっているプロセスアプローチも、「品質は工程で作り込む」というTQMにおける考え方によるものです(参考文献1)。
一方、あまり語られていない話では、ハンフリー氏が提唱したソフトウエア成熟度モデルの中にも、日本のTQMの考え方が盛り込まれています。ハンフリー氏は、日本企業のソフトウエア品質の取り組みを調査するために、日本の主要なコンピュータメーカや、通信メーカを調べました。彼は、ソフトウエア成熟度モデルに関する彼の最初の著書において、日本がデミング博士やジュラン博士から統計的品質管理を学んだことに言及し、さらに、日本が現場の第一線において発展させた欠陥の未然防止活動(defect prevention)の重要性と、その実践が成功裏に展開されていることに言及しています。そして、誤りの原因分析(error cause analysis)と欠陥の未然防止(defect prevention)を、彼のソフトウエア成熟度モデルのレベル5の実践に必要なものと位置づけました(参考文献3)。
4. 日本におけるISO9000ファミリーやソフトウエア成熟度モデルの理解の壁
国際標準の記述や、ソフトウエア成熟度モデルの記述は、その性格上、付随する歴史的背景や、他の関連知識との関係は簡略化される傾向にあります。また、この傾向は、国際標準やソフトウエア成熟度モデルの教育場面や、アセスメントの実施場面においても同じであり、歴史的背景や他の知識情報との関係が明示的に意識されるわけではありません。また、欧米のソフトウエア品質の専門家全員が、必ずしも日本のTQMに精通しているわけではありません。このため、ISO9000ファミリーやソフトウエア成熟度モデルとTQMの関係は、十分、理解が促進されているとは言い難いのが現状です。
しかも、ISO9000ファミリーやソフトウエア成熟度モデルは、そのもう一つの側面、すなわち、プロセスの実践を客観的に実証するという欧米的な考え方の側面が強調されて理解されたため、その背後にあるPDCAやプロセスアプローチなどの考え方は、本質的にTQMと共通であるにもかかわらず、TQMとは異なった考え方に基づく国際標準やソフトウエア成熟度モデルであると理解されているのが現状と思われます。次章では、この「理解の壁」を取り崩し、より本質を理解するためのヒントを述べます。
5. ソフトウエア品質知識体系の活用
前章で述べた知識情報の「理解の壁」を取り崩すためには、その知識情報が誕生した時代背景や、他の知識情報との関連を知ることです。このためには、その知識情報を取り巻く客観的な事実を明らかにし、他の知識情報との関連性を明らかにしていく努力が欠かせません。時間的な分析だけではなく、地理的、文化的背景を含めた総合的な分析が必要です。
分析のための情報源は、その知識情報に直接携わった関係者による「原典」に、できるだけ当たると良いと思います。「原典」には、第三者によってフィルター(取捨選択)されずに残っている貴重な情報があるからです。
ソフトウエア品質の知識情報の例をご紹介しましょう。2007年に発行された「ソフトウエア品質体系ガイド-SQuBOK Guide-」です。このガイドは、5階層の構造でまとめられています。第4層と第5層は、独立した個別の知識情報に対応していますが、上位の第1から第3層までは、該当する下位の知識情報に関する背景説明や、他の知識情報との関係が述べられています。特に、海外のやり方との対比説明によって、日本の取り組みの特徴や発展経緯が理解できるようになっています。
前述のTQMとソフトウエア成熟度モデルは、知識体系上は、別の知識項目として分類、整理されています。しかしガイドブックの限られた紙面の中で、両者の時代的背景や関連性についても述べられています。
SQuBOK Guideを百科事典的に、ある特定の知識を知るために利用することもあるでしょう。しかし、その知識を必要とした背景や、複数の知識相互の関係を合わせて通読し、全体像を理解することをお勧めします。言い換えれば知識情報を噛み砕いて理解し、現在、各自が抱えるソフトウエア品質の課題に照らし合わせて、知識情報を十分に読み解いてほしいと思います。
6. まとめ
当たり前のことかもしれませんが、日本のやり方を理解するには、海外のやり方を見て自分たちのやり方と対比してみると良いし、現在の問題を理解するには、歴史を振り返ってみると良いと思っています。地理や文化も含めた、いわばソフトウエア品質に関する「歴史学のすすめ」を提案いたします。
1) |
ソフトウエア品質知識体系ガイド-SQuBOK Guide-、SQuBOK策定部会・編、オーム社、2007 |
2) |
全社SWQC活動調整委員会、水野幸男(監修)「ソフトウエアの総合的品質管理 NECのSWQC活動」日科技連出版社、1990 |
3) |
ハンフリー「Managing the Software Process」、SEI Series of Software Engineering、1989 |
「ソフトウェアレビューの基本スキルを3つ教えてください」と聞かれたら
静岡大学 情報学部
森崎 修司
ソフトウェアレビューは非常に浸透してきています。しかし、一方で形骸化してしまったり効果が上がらなかったりという声を聞くことが多いのも事実です。私もプロジェクトマネージャとして開発に携わっていた時期があり、レビューとは具体的に何をやればよいかという質問を開発メンバに聞いたことがあります。メンバからは「早めに(プログラムを動かさずに)不具合を発見すること」という答えが返ってくることが多かったことを記憶しています。
真の目的は別にあると認識していながらも、レビュー報告書の「実施日」を埋めるための儀式で、ざっとドキュメントやソースコードを見回して、目についた欠陥を指摘すると考えられていることも少なくありません。品質トラブルが起きた際に今後の対策として「レビューを強化する」という項目が挙げられることは多いのですが具体的にレビューをどのように強化するかを考えられていることはそれほど多くないでしょう。
では、新人や新しく組織やプロジェクトに加わったメンバに(つまりご自身が指導的立場に立たなければならないという前提で)、「レビューの基本スキルを教えてください」と質問されたら何を挙げますか?4つ以上挙がる場合には、そのうち大事なもの上位3つを挙げてほしいと言われたらどうされますか?
ご自身の組織やプロジェクトに合わせて正解は変わります。参考として私の回答を以下に記します。もちろん、回答の1パターンにすぎませんので、全ての方にとって正しいとは限りません。
1. レビューでどのような欠陥を発見することが望まれるかを理解・合意できるスキル
やみくもに誤りだけを検出、指摘するだけでは、いくら時間があっても足りない場合が多いでしょう。まず、どのような欠陥を検出、指摘することがレビューの効率化につながるのかがプロジェクトやレビューアの間で合意できているかに気づく必要があります。合意できている場合にはそれに沿って欠陥を検出するスキルが必要になります。同時に、知識不足等により十分な欠陥検出ができないときには、自身ができる範囲内ではどのような欠陥が検出できるかを想像できる必要があります。また、レビューの実施コストが得られる品質向上に見合うものであるかどうかを意識できると更に望ましいでしょう。
2. 欠陥を伝えるスキル
他の人ではなかなか指摘できない深刻で検出の価値が高い欠陥を見つけたとしても、その伝え方が適切でなければ修正されなかったり軋轢を生んでしまったりする場合があります。相手の事情を配慮し、上手に伝えるスキルも重要です。上述1のスキルにも関連しますが、プロジェクトメンバにとって最も有益な指摘から順番に伝える配慮も必要になります。プロジェクトにとって致命的なものは何で、そうでないものは何かを認識できていることが前提となります。組織の文化にもよりますが、これみよがしに徹底的に細かい指摘を並べ連ね、ドキュメントをつるし上げることは「そんなことをやる時間があったら・・」という他のメンバの思いを強くしてしまう可能性が高いでしょう。 このスキルは経験が少ない人に限定されるスキルのようにも思えますが、実は中堅やベテランにも異なった形で求められるスキルです。新人や新しく加わったメンバに対して、威嚇や圧力を与える目的で欠陥を指摘している場面に出会ったことはないでしょうか?新人、新メンバが何か直接的に言いづらい間違いや気にくわない態度を取っているときに、新人や新メンバが担当している部分を必要以上に細かくチェックして、たくさんの欠陥を指摘することで間違いや態度を変えさせようとすることは効果もそれほど望めませんし、時間の面からみても効率的ではありません。
3. 簡潔な説明ができ、必要がなければ黙っておくスキル
自身が発見した欠陥を端的に説明できるスキルは、特に会議形式のレビューの効率を高めます。きちんとまとめられていないときに限って、自身でも説明不足、物足りないと感じ,長々と冗長な発言をしてしまうことが多い傾向にあります。説明が複雑になる欠陥では、検出時にどのように説明すれば明確になるかを考えるスキルが必要になります。 「他の人が指摘をしているから、なんとなく自分も発言しておかないと」とか「自分も気づいていたことを知らせたい」と思ったとしても、その発言によって会議のスムーズな進行を妨げたり、検討にプラスにならないと考えたりすれば、黙っておくスキルも必要です。黙っておくスキルは中堅以上に特に求められるスキルといえます。
レビューにおいて普遍的なスキルを挙げました。プロジェクトレビュー、ドキュメントレビュー、コードレビュー等、実施形態やレビュー対象によっても求められるスキルはかわります。また、開発するソフトウェアや組織によっても変わりますのでただ1つの正解はないことを認識し、ご自身の状況(コンテキスト)に応じて、どのようなスキルが求められているかを考えなければなりません。本稿がそのようなご検討のヒントとなっていれば幸いです。
USDMとDRBFMを羅針盤にして派生開発を成功に導く
NECソフト株式会社
酒井 賢
1. はじめに
2011年2月にソフトウェアテストシンポジウム 新潟で「派生開発でUSDM(Universal Specification Description Manner)とDRBFM(Design Review based on Failure Mode)をミックスして一気通貫で品質確保する」という事例発表をさせていただきました。発表後、資料を見た何人かの方から、進めるに当たっての課題や現場にどのように導入したらよいかなどのご質問をいただきました。このような機会をいただきましたので、この場をお借りして詳しく説明します。
2. 導入前の状況
2.1 |
プロジェクトの概要
次のようなプロジェクトです。2003年から2009年までの約6年間担当しました。
装置開発の多くは、1つのマスターに対して、自社向け、OEM向けなど複数の製品が作られ、さらに、自社向けには廉価モデル、フラグシップモデルなどいくつかのモデルが製品化されます。 |
||||||||||||||||||
2.2 |
状況の分析
引継ぎ当初は、規模も小さく、改造も限られた範囲だったので、大きな品質問題が発生することはありませんでした。
(表1. 引き継ぎ時と3年後の状況比較) メンバーへのヒアリングや過去に発生した問題を分析した結果、次のような問題があることが分かりました。 1)仕様化があまい 要求から仕様への落とし込みがあまいため、コーディング時になって仕様化がされていないことに気がつく後戻りが発生しました。また、テストフェーズで、動作途中でネットワークが切れた場合などの異常系を仕様化していないことがわかり、バグ修正と仕様化を同時に行うことがありました。 2)変更の経緯が分からない 仕様化する前段階で改造点の洗い出しを行っていると、どうして現在のような仕様になっているのか分からない部分が現れました。引継ぎ以前の経緯が分からないため、その部分には手を加えず、処理を分岐する形での設計を行わなくてはなりませんでした。 3)変更の影響範囲がわからない 変更に対するソースコードの修正箇所の特定が不十分で、修正漏れが多く見られました。また、変更を加えたことで、本来は影響のないはずの機能の振る舞が変わってしまうデグレードが発生しました。 4)”思いもよらない”問題が発生 テスト終盤になって、OSメーカーからサービスパックがリリースされ、それを適用するとセキュリティの関係で、これまで正常に動作していた機能が動作しなくなるという問題が発生しました。納期間際の想定外の問題の発生で現場が混乱し、仕様調整や対応で大きな作業負荷となりました。事後にふり返ってみると、セキュリティ強化のアナウンスはニュースサイトで読んで知っていた事を思い出しました。 |
3. 課題
問題点を整理して、次の4つを課題としました。
1)要求の仕様化技術:どうしたら要求を正しく仕様化できるのか?
「仕様化があまい」という問題の解消
2)変更点の追跡:どうしたら変更点を追跡できるのか?
「変更の経緯が分からない」という問題の解消
3)抜け漏れ防止:どうしたら変更の影響範囲を特定できるのか?
「変更の影響範囲が分からない」という問題の解消
4)未然防止:どうしたら問題発生を未然に防げるのか?
「”思いもよらない”問題が発生」の解消
4. 施策
メンバーの持ってきた本を元にして「USDM」を導入し、お客様から紹介された資料をきっかけに「DRBFM」を導入することとしました。どちらも、レビューを重視する点が共通している手法です。
導入にあたっては、私自身の”つかんだ”という感覚と、お客様やメンバーへの定着度合いをみながら順をおって進めました。
No. | 課題 | 手法 | 引継ぎ時 | 3年後 |
1 | 要求の仕様化技術 | USDM TM |
変更要求仕様書 | 2003~ |
2 | 変更点の追跡 | |||
3 | 抜け漏れ防止 | |||
4 | 未然防止 | DRBFM | 心配点シート | 2008~ |
(表 2. 課題と施策の対応)
4.1 |
USDMの導入
施策の第一段階として、USDM(Universal Specification Description Manner)とトレーサビリティ・マトリクス(TM)を取り入れました。
このような記法によって変更要件の意味を理解して、変更しなければならない仕様を漏れなく見つけ出して一覧化します。 表の左側部分はUSDM記法で記載した仕様です。これは「何を変更するのか」という“What”の視点で記入します。
右側部分は「トレーサビリティ・マトリクス(TM)」です。モジュール単位の列を作成して、仕様に対して変更が必要なモジュールとの交点に改造規模を記入します。TMは「どこを変更するのか」という“Where”の視点で記入します。
|
||||||||||||
4.2 |
DRBFMの導入
USDMがメンバーに完全に定着した段階で、「DRBFM(Design Review Based on Failure Mode)」を導入しました。
という考え方の下に、次のような表を使って、レビューを行います。 ※「トヨタ式未然防止手法GD3 いかに問題を未然に防ぐか」吉村達彦著 (日科技連)を参考に作成 DRBFMは次のように行います。
私たちは、導入当初の何度かは、図2の表をそのまま使ってやってみましたが、記入やレビューに時間がかかる割に効果が現れませんでした。 |
||||||||||||
4.3 |
心配点シート
心配点シートはDRBFMを使ってみてやりにくかった点をスリム化して、変更要求仕様書とセットで使えるようにしたものです。基本的な考え方は、DRBFMと同じです。
試行錯誤の結果、最終的には、次のようなフォーマットに落ち着きました。 心配点シートは次のように使います。
|
5. 成果
変更要求仕様書と心配点シートを導入することで次のような効果が得られました。
変更要求仕様書と心配点シートを導入することで、課題としていた4つは解消されました。大げさな話ではなく、本当に変更仕様に関する問題は発生しなくなりました。
少なくとも、ソフトウェアという不可視なものを扱う場合、「そこに変更のすべてがあり、常に最新の状態に保たれていて、その変更をメンバー全員が知っている」という安心感は、品質の向上にも役に立つものと思います。
6. 導入にあたってのポイント
導入と進め方のポイントを経験をふまえて記載します。
a. 必要性と表記方法のスタディ
変更要求仕様書と心配点シートを完成させるには、メンバー全員の協力が必要となります。そのためには、なぜ変更要求仕様書と心配点シートが必要なのか、どのようなルールで記入するのかを理解しておかなければなりません。事前に集まって勉強会を開きましょう。
b. 記入ルールの明確化
変更要求仕様書の要求事項、理由、仕様はプロジェクトリーダーが記入、TMは各モジュール担当が記入、心配点シートは全員が記入する事としました。なぜなら、USDMは、「何を変更するのか」の観点で記載するため、細かな実装を知らなくても書けるからです。これが書けないようではお客様との仕様調整は難しいということになります。TMは実装を知っているモジュール担当者が記入します。TMを記入する際には、必ず仕様を参照するので、自然とクロスレビューになります。
c. お客様をまきこむ
いきなりお客様に「変更要求仕様書を導入します」と言っても、なかなかOKが出ないかもしれません。私たちは、導入当初はお客様と実施するデザインレビューの際に改造仕様書のサブ資料のようなかたちで提出していました。開発のたびにだんだん露出度を上げていき、最終的には、改造仕様書を作成する前段階の仕様書として認知されるようになり、お客様もまじえてレビューを行うことができるようになりました。
d. 事前配布・事前レビュー
変更要求仕様書と心配点シートは事前配布・事前レビューを徹底します。配布時にレビュー記録表を添付して、レビューアはレビュー結果と追加の心配点を記入して、集合レビューの前に作成者に戻します。
これには2つの効果があります。1つは、仕様書がレビューに値する完成度になっているかの確認です。あまりにも要求を取り違えているとレビューに時間がかかるばかりで先に進みません。逆に、「て・に・を・は」などの些細な間違いは、レビュー時に気になって指摘し始めると、意外と時間がかかってしまうものです。そのような些細なものは、集合前の段階で指摘してレビュー前に取り去ってしまいます。
2つめは、事前に目を通すことで、無意識下に働きかける効果です。技術者は意外と仕事の時間以外でも、なにがしか担当モジュールについて考えているものです。変更仕様を脳内で熟成する時間を確保することで、心配点シートに載るような、ひらめきや気づきに期待します。
e. 仕様変更の度に全員レビュー
要件の追加や変更が入った場合や仕様変更が発生した場合には、必ず変更要求仕様書を改版して、常に最新の状態をキープします。仕様が変更になれば、影響範囲や心配点も変わるはずなので、どの工程であったとしても、再度全員でレビューを行います。時間はかかりますが、より安全で確実な変更を行うための投資と考えます。
f. 各工程の成果物のレビュー毎にその機能が取り込まれているか照らし合わせる
変更要求仕様書と心配点シートは、次工程のインプットであるとともに、実際は、すべての工程のインプット文書となります。変更要求仕様書に書かれた変更点は、改造仕様書にも反映されますし、テストも行われるはずです。ですので、各工程の成果物をレビューするときには、変更仕様が確実に反映されているか、他に心配点はないかを確認します。
g. 以前の変更要求仕様書と心配点シートを参照する
新たな変更要求仕様書を作成するときは、今まで作成した変更要求仕様書を見直して、類似の変更をしたことがないか、顕在化しなかった心配点が今回は顕在化する可能性はないかを考えながら作成します。変更要求仕様書はメンバーの叡智の固まりなので、何らかの気づきにつながるはずです。
h. 理由や粒度にこだわり過ぎない
変更要求仕様書導入当初は、要求の理由を書くのが難しく感じるはずです。要件書に理由が書かれていることは少ないですし、今まで要求に対する理由を考えたことがあまりないからです。仕様の粒度にも悩むと思います。細かくすると膨大な数になる可能性もありますし、荒くすると要求事項と同じになる気がします。でも、大丈夫です。要求事項によって荒い粒度になったり細かい粒度になったりするのは、複雑さや難易度などが自然と反映されているからです。レビューしてくれる人を信じて、理由や粒度にはあまりこだわらずに記載します。
i. レビューは緊張と弛緩を交互に
成果物のレビューは常に緊張感が伴います。そうした緊張感の合間に、頭をほぐす意味も含めて心配点シートのレビューを行います。変更要求仕様書の記載で想定される問題の検出はされているはずなので、心配点シートでは問題が発見されなくて当たりと思って、やや発散系になってもよしとしてやるのが良いと思います。リラックスした場の方が気づきが生まれる可能性が高まります。
7. まとめ
変更要求仕様書と心配点シートを使った開発のイメージを図にしてみました。(図5)
変更要求仕様書は、プロジェクトの羅針盤のようなものだと考えています。
ウォーターフォール開発のサイクルでは、それぞれの工程の成果物は、前工程の成果を受け継ぎながら進んでいきます。進むにあたって、変更要求仕様書という羅針盤を常に確認し、「その成果物には変更が反映されているのか」を必ずチェックし、心配点シートで「心配していたことが顕在化していないか、さらに心配すべきことはないか」を検討しつづけます。
航海に例えるなら、今までの航路とこれから進もうとする航路が正しいのかを羅針盤で確認し、行く手に危険が待ち受けていないかを推測する作業を怠らないということです。
変更要求仕様書と心配点シートを中心に据えて開発サイクルを回すことで、いつ難破してもおかしくない派生開発という困難を、正しいゴールに向かって安全にかつ穏やかに進めることができます。
プロジェクト管理システムやツールはたくさんありますが、品質を確保する最後の砦は、コミュニケーション、チームワーク、経験、助け合いなど、「人」が主役だと思います。
変更要求仕様書と心配点シートを導入してからの約3年の間に14ファイルができました。つまり、14回の派生開発を繰り返したことになります。
変更が入るたびに何度も書き直され、全員でレビューしたファイルは知識が凝縮されたプロジェクトの宝でありチームの誇りです。
プロダクトライン開発における品質の向上効果
セイコーエプソン株式会社
島 敏博
前回の記事では、株式会社エクスモーションの山内 和幸さんによって、ソフトウェア・プロダクトライン(以下、プロダクトラインとします)の基本となる考え方について説明していただきました。プロダクトライン開発ではまず、変化にどこまで対応するかスコーピングを行い、次に可変性分析を行って共通部と可変部を分けた設計に変え、それらから導出して製品を作り出します。
今回は、プロダクトライン開発をおこなうことによって、または、いまの派生機種開発にプロダクトライン的な見方を加えることによって、品質面でどのような改善ができるのか考えてみます。
1. 管理するソースが減ることによって品質が向上する
プロダクトライン開発とは、ひとことでいうと、共通部と可変部をわけて開発することにほかなりません。しかも世代ごとに、可変部の内部で共通部を見つけて分離し、共通部分を増やしてゆくことが重要です。
もちろん、プロダクトライン開発に変えてゆく間も、既存製品群のリリースは続けなければなりません。既存製品群をリリースしながら、段階的にプロダクトライン開発に移行してゆくイメージは図1のようになります。
図1では現在のソースコードを灰色、共通部を水色、可変部をピンク色で表現しています。開発を継続している製品が4機種あったとすると、一度にプロダクトライン化することは難しく、まず1つの機種を選択して、それを共通部と可変部に分けます。それを第1世代とします。
第2世代では、共通部を増やすとともに、同じ共通部を使って2機種を開発します。2機種の共通部は同じソースコードなので、ここからソースコード削減効果が生まれます。
さらに第3世代では、共通部をさらに増やすとともに、その共通部を使って4機種すべてを開発します。4機種の共通部は同じソースコードなので、さらにソースコード削減効果が生まれます。
このように、第1世代で、共通部と可変部を分けている段階では、まだソースコード削減効果が出ません。効果が出るのは同じ共通部から複数の機種を作り出せるようになった第2世代以降です。
製品群を生み出すのに必要なソースコードの量が少なくなれば、それだけで品質向上がねらえます。
2. 依存性を局所化して品質を向上させる
プロダクトライン開発では可変性分析をおこない、何かに依存している部分を局所化して設計を改善していきます。たとえば製品ごとに異なるOSを使った、複数の製品からなる製品群を作っているようなところでは、OSに依存している部分を局所化する設計に改めます。図1にOSに依存している部分を局所化したクラス構造を示します。
図2では、OSユーザークラスは、OSインターフェースクラスを使っています。OSインターフェースクラスを実装しているのが、Linux実装クラス、ITRON実装クラス、Windows実装クラスです。
Linux実装クラスだけが linux.h をインクルードしていて、ITRON実装クラスだけがitron.h をインクルードしていることに注目してください。このようにすることで、OSインターフェースクラスを使った OSユーザークラスはどのOSにも依存しないで実装できます。
OS間の違いによる動作の違いを局所化することで、それ以外への影響を少なくできます。これによってOS非依存部分の品質を高めることができます。
OSユーザークラスとOSインターフェースクラスの部分が全ての製品での共通部となります。
このように何かに依存している部分を派生した実装クラスに局所化し、その抽象インターフェースを使ってユーザープログラムを実装することで、ユーザークラスの品質を高く維持することができます。
3. 繰り返し検証による品質の向上
プロダクトライン開発では品質が向上するチャンスが2回あります。(図3参照)
1つめは、フレームワークを作ってリリースするときです。フレームワークチームはリリースするときに仮仕様のアプリケーションと組み合わせてきちんとフレームワークが動作するかを設計者がテストします。
2つめは、フレームワークとアプリケーションを組み合わせて製品開発をするときです。アプリケーションチームはフレームワークを使って製品全体の動きを設計者がテストします。
不具合も局所化される可能性があります。共通部分が他の機種でも使われていて他の機種では不具合が発生していないならば、共通部分よりもその機種用の可変部に不具合がある可能性が高いと言えるでしょう。
コード行数が数百万行におよび巨大なプロジェクトの場合、プロダクトライン化を一度に進めることはできません。そのドメインにとって資産となる一番大切な部分から、順番に共通部と可変部に分ける取り組みを始め、世代ごとに少しずつその範囲を広げてゆきます。
取り組んでいるパッケージの範囲から、品質が向上していく様子をメトリックスに取り、改善を見える化をしてゆきます。第1世代では不具合が局所化されるだけかもしれませんが、共通部が複数の機種に使われる第2世代から繰り返し検証による品質の向上が見込めます。
4. ひとりの担当者が多くの機種を担当することで、ソースの再利用性を高め、品質を高める
機種ごとに担当者が違っているものを、できるだけ同じ担当者で出せるように変えていくのが、プロダクトライン開発です。(図4参照)
機種と機能の関係を図で表したものです。第1世代の機種が4機種あって、第2世代の機種が2機種あります。それぞれにいろいろな機能がはいっています。
プロダクトラインがうまくいっている状態とは、図4の上部のように、どの機種も同じ担当者が作っている状態です。このようになっている部分を世代を重ねるごとに増やしていくのがよい戦略です。
図4では、担当者で分けてみましたが、実際は同じ担当者でも別のソースコードを書いているかもしれないので、正確にはソースコードで分けて考える必要があります。まずこのようなマトリックスを作って、現状の機種と機能がどの担当者のどのソースから作られているのかをまず把握します。
ひとりの担当者が多くの機種を受けもつことで、ソースコードの再利用を意識した作りに変えることができ、コードクローンを少なくし、その機能用のソースコードの品質を向上させる効果があります。
5. 機能を担当させる体制づくりにより品質を向上させる
共通部と可変部に分けて開発するのがプロダクトライン開発ですが、これは必ずしも組織を2つに分けることではありません。組織作りにはいろいろな方法があると思いますが、図5のように担当者を決めて機能を担当させる方法がお薦めです。
図5は機能ごとに担当者を割り振る方法です。ある特定の機能Aに注目すると、その機能の開発に責任をもっているリーダーAは、その機能の共通部と可変部の両方を担当しています。第2世代では、自分で作った共通部を使って、2つの機種の可変部を開発し、それぞれ組み合わせて製品をリリースします。
リーダーは共通部を作ると共に可変部を作り、さらに同じ共通部を使って複数の派生機種を開発することをミッションとします。自分で実装しやすくすると同時に他人にも使ってもらいやすいインターフェースを作るわけです。このようにリーダーは作る側と使う側の両方を担当するということとなります。
さらに派生機種を増やしていく段階で、次世代リーダーBさんを育成します。そのときはまず可変部を作ってもらいながらプロダクトラインの基本を伝授します。
マスターした次世代リーダーBは、やがて機能BのリーダーBとなります。
6. テストもプロダクトライン開発することにより、製品もテストも一括して品質向上させる
モデル駆動開発を活用することで、プロダクトライン開発を加速することができます。製品をモデル駆動開発する場合、テストもモデル駆動開発します。設計したものは開発者が自分でテストします。図6をご覧ください。
設計者は、製品用のモデル図面と、テストスイート用のモデル図面を同時に設計します。クラス図上に、製品用のクラスと、テスト用のクラスを描きます。状態マシン図なら、製品用の状態マシンを表した図のほかに、その状態マシンをテストするためのテストクラス側の状態マシンの図も描きます。
それらの図からそれぞれコード生成させ、PC上でテストします。
うまく動くかどうか確認しうまく動いたら、今度は両方のモデルから、それぞれ実機用のソースコードを生成させ、ターゲット上でテストをします。
製品コードをリファクタリングした後も、それにあわせてテスト用コードもリファクタリングしてテストが通る状態を維持します。これにより品質が落ちていくのを防ぎます。テスト周期、リリース周期は1日以内とし、常に2つを同時にリリースします。
このとき(テストコード行数/ソースコード行数)のメトリックスをモジュールごとに計測して見える化することをお薦めします。
さらに、いったん作り上げたプロダクトラインプラットフォームが崩れないように監視していくプロセスも取り入れます。依存性構造マトリックスを作成し、認められない循環参照、逆向き参照、飛び越し参照などを追加してプラットフォームが崩れ出さないかも監視します。自動化し深夜プロセスに組み込みます。
このように、プロダクトライン開発では、製品群開発を効率的に進められるように、世代を重ねてよい設計に変え、よいプロセスに変えつづけていくことが大切です。それにより、これまで述べたようにソフトウェア品質を高めることができます。
ソフトウェア・プロダクトライン ~「製品開発」から「製品群開発」へ
株式会社エクスモーション
シニアコンサルタント 山内 和幸
1. 従来の派生開発の問題点
製品ファミリに搭載されるソフトウェアの開発は、過去に開発したものをベースに新製品を開発する、すなわち派生開発が通常です。特に製品の種類が多く、同時期に多くの異なった製品をリリースするような製品ファミリでは、各製品の開発が並行して実施されることも少なくありません。これを、ソフトウェアの構成管理の視点で表現すると、下図のようになります。
この場合、次のような問題が起こります。
つまり、複数のバージョンに対して同一の作業をしなければならなくなり、「ムダ」が発生します。特に、バージョンが上がるにつれてソフトウェアの構造(アーキテクチャ)が無秩序に変わっているほど、ムダは大きくなります。派生の数が増えるにつれてメンテナンス対象も増加し、対応漏れ等による品質低下のリスクも増大します。 このような問題を回避するために、ソフトウェアの再利用を前提とした製品開発を実施しているケースも多くあります。これは、製品間で共通となる資産をソフトウェア部品として開発し、再利用するというものです。その考え方自体は良いのですが、実情は下図のようになっています。
つまり、ソフトウェアは部品として資産化されているものの、バージョン間での互換性はなく、ある製品を構築する際には特定のバージョンが必要になります。この場合も、基本的に先の例と同様の問題が発生します(単に派生の数が少ないだけと言えます)。
2. ソフトウェア・プロダクトラインとは?
前述の問題を解決するための方法として、ソフトウェア・プロダクトライン(Software Product Line : SPL)があります。SPLでは、製品ファミリに属する各製品で再利用される資産を開発するドメイン・エンジニアリング(domain engineering)と、開発された資産を利用して個々の製品を開発するアプリケーション・エンジニアリング(application engineering)という、2層型の開発を行います。ドメイン・エンジニアリングで開発される資産は、コア資産(core asset)と呼ばれます。また、アプリケーション・エンジニアリング実施時に発生したコア資産の改善要求は、ドメイン・エンジニアリングへフィードバックされ、これを受けてコア資産の更新が行われます。
SPLの基本的な枠組みは上記のとおりですが、この時点で従来型の再利用と同じではないか、単に専門用語を並べただけと感じる方も多いでしょう。実際、従来型の再利用と全く異なるわけではなく、多くの点で似通った部分があります。それに加えてSPLでは、従来型の再利用では解決できなかった問題を解決するために、様々な要素が加えられています。 本稿では、SPLの象徴とも言える2つの要素「スコーピング」と「可変性管理」を中心に、SPLが従来の派生開発/再利用開発とどう違うのか、そして前述の問題をどのように解決するのかについて説明します。
3. SPLのキー要素(1):スコーピング
製品ファミリの開発は、追加/変更/修正の連続です。その寿命を終えて開発終了となるまで、延々と続いていきます。このような状況の中で、開発した資産を長期に渡って再利用できるようにするには、「将来の変化を予測して、その変化に対応しやすいように設計する」必要があります。この変化にどこまで対応するかの範囲を決めることをスコーピング(scoping)と言い、その範囲をスコープ(scope)と言います。
SPLの適用において、スコープを適切に定めることは重要です。一般的に、スコープが狭いと、その資産を利用して開発できる製品数が少なくなり、再利用機会が減ってしまいます。一方、製品数が少ないということは製品間の違いも多くないため、より製品に適した使いやすい資産が揃えられます。逆にスコープが広いと、製品ファミリに含まれる製品が増えるため、同一資産の再利用機会は増えます。しかし、製品間の差異も多様になり、資産が抽象的なものになってくるため、再利用が難しくなる傾向があります。コア資産の再利用による効果、すなわち製品ファミリの開発がどれだけ最適化できるかは、このコア資産の再利用のしやすさと機会によって決まってきます。よって、このバランスが最適となるようにスコープを定義することが、SPL開発の成否を大きく左右します。
4. SPLのキー要素(2):可変性管理
スコープに含まれる製品の間には、共通なものと異なるものがあります。下図を見て下さい。ここで、3つの円がそれぞれ製品A/B/Cの資産だとします。この時、全ての製品で共通となる部分を共通部(common part)、それ以外を可変部(variable part)と呼びます。可変部の内、特定の製品でしか使わない資産は、製品固有部(product-specific part)と呼ぶこともあります。SPL開発では、この共通部と可変部を管理することで、製品ファミリの開発の最適化を図ります。これを、可変性管理(variability management)、または共通性・可変性管理(commonality-variability management)と言います。
可変部には「なぜその違いが発生するのか」の理由があります。これを可変性(variability)と呼びます。裏を返せば、製品ファミリに可変性があるということは、その違いを生み出すことができることを示しています。そして、可変性には変化の種類が存在します。代表的なものはオプション(optional)と代替(alternative)です。前者は製品に搭載する/しないを選択できるもので、後者は幾つかの選択肢の1つを選ぶものです。簡単な例として、ディジタル腕時計ファミリを考えます。このファミリには、以下の4つの製品が含まれるものとします。
この時、このディジタル腕時計ファミリには、時間表示機能(12時間と24時間の代替)とアラーム機能(オプション)の2つの可変性が存在します。このようにして特定された可変性を管理していく際には可変性モデルを利用するのが一般的です。可変性モデルの内、最もよく知られているものはフィーチャモデル(feature model)でしょう。これは、製品ファミリを特徴づける要素(フィーチャ)をツリー上に表現したものです。ディジタル腕時計ファミリの例では、以下のようにモデル化できます。
したがって、各製品を効率良く開発するためには、コア資産は以下の要件を満たす必要があります。
可変性を分析・管理することによって、開発すべきソフトウェアにどのような柔軟性が求められるのか、それを実現するためにどんな技術を利用するべきかが明確になります。これは、「保守性」という品質特性に関して、その要件を明確にすることと捉えることができます。
5. 可変性管理に基づく製品の導出
製品を開発する場合、可変性モデルに記述されている可変性をどのように扱うかを決定します。前述のディジタル腕時計の例だと、アラーム機能 を搭載するのか/しないのか、時間表示は12時間/24時間のどちらにするのかを決定します。この決定内容に従って、コア資産の可変点 (variation point)をコンフィグレーションしていきます。可変点とは、コア資産中の可変性を実現している場所のことです。例えば、アーキテクチャ上でアラーム機 能を実現するコンポーネントが定義されていて、この搭載/非搭載が切り替わるとしたら、このコンポーネント自体が可変点になります。このようにして、コア 資産が現在開発中の製品に適した形に変換されます。この一連の過程を導出(derivation)と言います。
コア資産から製品用の資産が導出されるということは、コア資産には共通部だけでなく、可変部も含まれるということがわかります。製品固有部でない可変部は幾つかの製品間で共有されるため、コア資産に含めることができます。 もちろん、新製品開発時にはコア資産に含まれない新機能や、製品固有部の開発なども含まれます。前者は通常ドメイン・エンジニアリングで、後者はアプリケーション・エンジニアリングで開発を行います。
6. SPLによる従来型の問題の解決
ここで、本稿の冒頭で述べた保守の問題について振り返ってみます。SPL開発では、この問題を本当に解決できるのでしょうか。答えはYESです。 SPLにおけるコア資産は、共通部だけでなく可変部も含みます。そして、管理されている可変性に対して、各開発成果物(要求仕様、内部設計、コード、テスト仕様、etc.)が正しく製品を導出できるように開発されます。このため、コア資産の最新バージョンは、その時点でスコープに含まれている製品を全てカバーできる状態になっているのです。従来の開発と比較してこれを図示すると、以下のようになります。つまり、コア資産のバージョンが上がっても互換性が維持されるように、開発を行っているのです。この結果、コア資産の最新バージョンを保守するだけで、全ての製品の保守を行うことができます。
従来型の開発とSPLを比べてみるとわかるとおり、従来型では各バージョンが「特定の製品」に対応しているのに対し、SPLでは「製品群」に対応しています。言い換えると、前者は個別最適な開発を、後者は全体最適な開発を行っていると言えるでしょう。この、「全体最適の視点で製品群全体を開発していく」という姿勢こそが、SPLの根幹を成す考え方なのです。
SPLは単純な開発技術ではなく、ビジネス戦略や開発プロセス・組織構成の最適化等も含んだ包括的なパラダイムであるため、非常に大きな工学体系になっています。このため、そのポイントを上手く掴んで、実開発に役立てることが重要です。本稿では、SPLというパラダイムの一部を、スコーピングと可変性管理を中心に要点だけを説明してきましたが、多くの方の改善の一助となれば幸いです。
ソフトウェア品質雑感 ~SQuBOKから読み解くソフトウェア品質~
NARAコンサルティング 代表
奈良 隆正
現代社会におけるコンピュータシステムは社会インフラの重要な一部であり、その中核に位置するのが、我々が手がけるソフトウェアである。
また、ソフトウェアはあらゆる電子機器に組み込まれ、多様な機能を実現し、人々に利便性を与えている。まさにソフトウェアの無い世界は存在しえないのが現代である。
したがって、ソフトウェアの重要性が益々増し、高品質、高信頼性など品質に対する高度化が求められている。
しかし、ソフトウェア品質については色々な定義や考え方があり多様であり一意的には決まらない。ステークホルダや立場が違うとその定義は異なってくる。
ここではソフトウェアの品質について、SQuBOK(ソフトウェア品質知識体系)ガイドをベースにして私の経験を加えて読み解いてみたい。
1. ソフトウェア品質の定義と変遷
品質の最も古典的な定義はクロスビー(P. Crosby)の定義として有名な「要求に対する適合」であろう。これは要求が常に正しいという前提に成り立っているが、ソフトウェア要求を正確に定義するのは難しいことは今でも解決されておらず、問題の残る定義である。しかし、これは長い間ソフトウェアの世界でも中心的な考え方として最近まで良く使われた定義である。
現在、ソフトウェア品質の定義はユーザ視点に立つべきというのが一般的であり、ユーザにとっての「価値」や「満足度」と言われることが多い。そこで、ソフトウェアを意識したソフトウェア品質定義の変遷をみてみる。
(1) |
品質は誰かにとっての価値である。 これはワインバーグ(G.M.Weinberg)の定義である。 |
(2) |
品質は、ユーザにとっての満足度(CS)である。 これは近代的品質管理における品質の定義として、一般に受け入れられている考え方である。 |
(3) |
システムが本稼働するとき、どこまで真のビジネス(ユーザ)ニーズに合っているかということ これはジェームス.マーチン(Martin.J.)の定義であり、自身の著書「ラピッド.アプリケーション.ディペロップメント」の中で述べている。 |
2. ソフトウェア品質の三つの視点
ソフトウェアの開発は図―1に示した様に①ユーザの要求が有り、②これをソフトウェアの仕様に落とし、③そのソフトウェア仕様に従ってコードを書く、という手順で行われる。
ソフトウェア品質を捉える際は、ソフトウェア品質を、狭義の品質と広義の品質の両面から考える必要がある。狭義には①ユーザの要求がソフトウェア仕様に正しく反映されているかという品質、すなわち「要求と仕様の適合度」があり、さらに②ソフトウェア仕様の定義に従ったコードが生成されているかという品質、すなわち「仕様とコードの適合度」の品質がある。これらは一般に①を設計品質、②をプログラム品質と呼ぶことが多い。
広義の品質とは最終成果物(プログラム)がユーザの使用する時点で要求をどれだけ満たしているか、という品質すなわち「ユーザ要求への適合度」である。これは前述したジェームス.マーチンの品質定義に通じるところがある。
ソフトウェア品質を大きく一つとして捉えるのではなく、上述のように分けて考えることで品質改善やSPIなどの改善活動に活かしやすくなる。
3. 先達の日本的品質の捉え方
(1) |
当たり前品質、一元的品質、そして魅力的品質 これは必ずしもソフトウェアを対象としている訳ではないが、1980年代半ばに日本的品質管理の大家、狩野紀昭氏が提唱した考え方である。
(出展:SQuBOK(品質の概念 (一部加筆、訂正)) 我々が目指すのは当然「魅力的品質」であることはいうまでもない。 |
(2) |
品質にかわって質(Quality=質) ソフトウェアやサービス産業などの無形の価値を提供する産業が増加し、品質と表現すると有形の製品の「質」を暗に想定するという固定概念があることを考慮し、あらゆる産業においてその定義の意味するところを端的に表す用語として、従来の品質と全く同じ意味で「質」を定義している。 (出展:SQuBOK(品質の概念)一部訂正) |
4. ソフトウェア品質を議論する際の要点
ソフトウェアに要求される重要なことがら(使命など)を整理してみると品質を議論する際の要点が浮き上がってくる。 ソフトウェア品質はあらゆる角度からもれなくソフトウェアを観察することでその要素が見つけられる。それをSQuBOKから引用してみる。
5. 色々な人の色々なソフトウェア品質の定義
(1) |
Roger S Pressman ;ソフトウェアの品質特性を測定することは可能
Pressmanの定義は比較的新しいものであり、筆者は他の定義に比べてかなり実用的であると考えている。SQuBOKが詳しく解説しているのでその一部を引用する。
|
(2) |
Joseph M.Juran ;二つの視点
|
(3) |
Robert L Glass ;品質は製品によって変わり全てに共通の品質定義はない
|
(4) |
ISO,IECなど国際規格の定義 ;品質に関する規格は数多く存在するが、ここでは皆さんがよく目にする二つの規格を取り上げた。
|
以上、ソフトウェア品質の定義について私の経験とSQuBOKからの引用で述べてみた。品質はステークホルダや切り口、さらには時代や対象によって多様であることをご理解頂ければ幸甚である。
品質は定義したら測定しなければ意味が無い。そのためには先ず品質モデル(一般的には階層構造のモデル)を理解し、目的にあったメトリックスを定義し、それを測定しなければならない。測定結果は品質改善に活用(寄与)されてこそ品質定義の意味が生きてくると考える。
混乱からの脱出 ~XDDPで現場は甦った~
(株)デンソー技研センター
古畑 慶次
はじめに
前号で清水吉男氏よりXDDPの理論が紹介されました。今月号では、(株)デンソーにおけるXDDPの導入事例を紹介します。
XDDPの導入を開始して、今年で4年目となります。効果検証の試行プロジェクトから始まり、希望者へのコンサルティング、そして、リーダー育成と一つのコンセプトに従って展開をしてきました。4年という時間はかかっていますが、正しく導入したプロジェクトでは、品質、生産性について確実に成果が出ています。そして、何より大きな変化は、何人かの技術者については、開発への取り組みが確実に“前向きになった”という現実です。
開発で多忙の中、社外発表や論文作成に技術者が自発的に取り組み始めました。今年は、XDDP関連だけで社外発表は3件、論文作成は2件を予定しています。また、コンサルティイングに使用する成果物の内容や送られてくるメールの送信時間を見ると、自発的に努力を始めた技術者の姿を容易に想像できます。
まだ、“変化の兆し”というレベルですが、こうした技術者が組織に16% 出て来れば(後述)、現場は甦り、技術者が本来の仕事を取り戻せると考えています。タイトルは、敢えて“こうして現場は甦る”としました。彼らへの信頼と確信とを込めて、これまでの取り組みを紹介したいと思います。
今、注目すべきは“派生開発”
開発現場での新規開発と派生開発の割合を調べてみると、ほとんどが派生開発であることがわかります。しかし、実際のすべての枠組み(仕組み、プロセス、成果物 等)は、新規開発向けに作られたものです。確かに、清水吉男氏の本を除いて、ソフトウェアエンジニアリングの書籍は、すべて新規開発を対象に書かれています。CMMIのレベル3で必要となる標準プロセスを考えてみても、派生開発用の標準プロセスが存在している組織は少ないのではないでしょうか?
現実的に考えれば、新規開発よりも派生開発を中心に考えていく必要があります。新規開発と派生開発では、要求や制約条件が全く異なりますので、派生開発に新規開発のプロセスを適用するには無理があります。
新規開発では、要求仕様書や各設計書を完成させて開発を進めます。しかし、派生開発で必要なのは差分情報です。新規開発のプロセスを使って、この差分情報を要求仕様書や各設計書に埋め込み、各ドキュメントを完成させながら派生開発を行えば、時間が足りなくなってしまいます。その結果、途中のプロセスを飛ばして、ソースコードの変更に取りかかるようなことが起こるのです。
これまでは、新規開発用のプロセスが中心だったかもしれません。しかし、派生開発向けの開発プロセスであるXDDPが提案された以上、XDDPをベースに派生開発のあり方をもう一度議論すべき時に来ています。
開発現場から見たXDDP
我々は、XDDPの導入を決め、試行プロジェクトにおいて、ある程度の手応えを得ました。実際に現場に導入してみて、XDDPについて感じたのは以下の3点です。
(1) |
プロセスが極めて合理的である XDDPは、派生開発を、変更と追加というタイプの異なる2つのプロセスに分け、それぞれの要求を実現する最適なプロセスと成果物を提供しています(図:XDDPによる派生開発)。特に、変更のプロセスでは、変更仕様とその影響範囲の抽出を表記法を工夫したり、レビューをうまく活用することで、設計者の思い込みや勘違いを最小限に抑えます。XDDPは、要求を実現するという観点から、必要なプロセスを層別し、整理した極めて合理的なプロセスと言っていいと思います。 |
(2) |
これまでの現場の問題に的確に対応している 多くの組織では、テストでのバグや後戻りが頻発しています。XDDPは、これらの問題の根本原因を解消するプロセスと成果物で構成されています。それはXDDPを導入したプロジェクトの品質と生産性から判断できます。我々の試行プロジェクトでは、従来の開発と比べて、テスト工程での不具合発生率65%減、生産性1.3倍という結果を得ました(図:XDDP導入による効果)。 |
(3) |
トヨタ生産方式の考え方にマッチしている トヨタ系のメーカーとして感じるのは、大野耐一氏が考案したトヨタ生産方式(以降、TPS:Toyota Production System)の考え方によくマッチしているということです。これは、いくつかのプロジェクトで実際に取り組んでみて気づきました。TPSは、ムダの徹底排除とプロセスの合理性を追求した生産方式ですが、その点では、XDDPも同じ思想で作り上げられた開発プロセスと言えます。 |
現場展開の考え方 ~「イノベータ理論」にもとづく改善戦略 ~
XDDPについては、その技術もプロセスも理解しました。また、試行プロジェクトにより、現場への効果も確信できました。あとは、“開発現場の技術者にどう納得して取り組んでもらうか”が大きな課題でした。
その時、参考にしたのが、エレベット.M.ロジャーズの「イノベータ理論」です。イノベータ理論では、「普及率16%を超えた時点でイノベーションは急速に普及する」(普及率16%の論理)としています(図:普及率16%の論理)。そこで、XDDPを一つのイノベーションと捉え、ロジャーズの採用者分布曲線に従った展開を今回のプロセス改善のコンセプトとしました(図:ロジャーズの採用者分布曲線)。つまり、全体の底上げを狙うのではなく、イノベータから始め、アーリーアダプタを育て、そして、アーリーマジョリティへとXDDPを順次展開していく戦略をとったのです。
全体の底上げによる展開も考えましたが、推進側のリソースが限られているため、現場全体へは十分な対応はできません。しかし、普及率16%の論理に基づき、最初は、2.5%のイノベータを対象にし、次にアーリーアダプタに切り替えていけば、推進側のリソースが十分ではなくても、XDDPを使いこなせる技術者を育てることは可能です。そして、そうした技術者が先行して育てば、彼らと一緒に展開活動を推進していくことができるのです。現場の技術者を指導者に育て、彼らと共に現場に“教え合う文化”を醸成する。まさに、これは、少人数のスタッフで大組織のプロセス改善に立ち向かう我々にふさわしい方法でした。
そこで、まず、全体の16%の普及率を目指し、次のようなステップで進めました。
Step1:関心のある人から導入(イノベータ)
Step2:リーダーを育成(アーリーアダプタ)
Step3:草の根活動へ展開(マジョリティ)
現場の何が問題か? ~ 個人の習慣と組織文化に挑む ~
改善戦略は立案できましたが、問題はこれをどう実践するかです。技術者に対して何をどう考え、具体的にどう行動していくのか、推進側が取り組む姿勢を変えなければ、現場の技術者は本気で取り組んでくれません。
これまでXDDPの現場展開を進めてきて感じるのは、技術的なハードルよりも、むしろ人の意識に問題があるということです。これまでのプロセス改善活動やCMMIやISOの取り組みで、技術者に改善への拒否反応やトラウマを植え付けてしまっている可能性があります。今回、XDDPの導入前に、現場の技術者にプロセス改善について聞いてみると、以下のような話が聞けました。
これらは、今回のXDDPの展開についてのものではないですが、現場の技術者の推進側に対する不信感をよく表しています。CMMIやISO自身は決して悪くないのですが、推進側が現場への導入を誤り、正しく誘導できていない可能性がありました。こうなると、むしろ今回の取り組みは推進側への信頼を取り戻すことを前提に、我々推進側と技術者の考え方や習慣を変えることが成功への近道だと感じました。そして、“技術者の習慣を変え組織文化を変革する”をスローガンに、“個人の習慣”と“組織文化”に挑む活動を始めました。
展開の方針 ~ PCA と コミュニケーション ~
XDDPの展開を進めるのに当たり、2つの方針を掲げました。
1.PCA ( Person Centered Approach ) による個別性、独自性の尊重
2.コミュニケーションを主体にした信頼関係の確立
プロセス改善の対象である個人の習慣や考え方を変えるためには、個別に対応していくしかありません。ソフトウェアの開発では、プロジェクト毎に要求や制約条件が異なります。また、技術者についても、性格、技術、キャリア等、当然違っています。こうした状況下で、現場に対して十把一絡げに施策を打っても、問題は決して解決しません。
PCA は、カール・ロジャーズが提唱した、一人ひとりの人間の個別性、独自性を尊重し、あらゆるコミュニティとの積極的な対人関係を深めようとする考え方です。XDDPの展開では、PCAに基づいて、開発状況や技術者の個性を尊重したコンサルティングと技術支援 を活動の中心にしました。
そして、そのアプローチの中で重視したのが、コミュニケーションによる現場技術者との信頼関係の確立です。“共感”はするが“同情”はしない。“理解しようとする”のではなく“受け入れる”。技術者が直面している状況を察し、伴走者の気持ちで支援を諦めずに続ける。これらは、我々が目指す目標と現場を分析した結果から、自ずと導かれる方針でした。
人を振り向かせる技術 ~ 営業活動から学ぶ ~
取り組みの中で、一番苦労したのは、Step1からStep2への移行です。Step1では、組織の中でXDDPに個別に取り組んでいる人や、興味のある人が対象でしたので大きな問題はありませんでした。しかし、Step2では、リーダー候補を選定し、XDDPを指導できる人材に育てる必要があります。
そのためには、XDDPを十分理解していないリーダー候補者に、XDDPに実際に取り組んでもらわなければいけません。XDDPに振り向いてもらわないといけないわけです。このような点から、このフェーズの活動は、“営業”と考えることができます。つまり、この活動は、XDDPという商品を顧客である技術者に買って頂く営業活動であるということです。
営業の技術は、営業活動で成果を上げている中堅企業や書籍から学び、そこで得たエッセンス(以下)を実際のXDDPの展開活動に活用してきました。
(1) |
「訪問時間」よりも「訪問回数」 これまで、何度となく技術者の席まで行き、話をしてきました。その時に注意したのが、“話す時間”より“行く回数”を重視する「訪問時間より訪問回数」という発想です。1時間まとめて話をするよりも、15分を4回に分けて話をする方が効果的だということです。 |
(2) |
「言い訳」はチャンス いざ、取り組みの話題になると必ず出てくるのは、出来ない理由(言い訳)です。「取り組む時間がありません」「全部は無理です」「プロジェクトはまだ途中なので・・・」「取り組むテーマがありません」等、いろいろ聞いてきました。こうした人は、言い訳して、結局何も変えません。そして、皮肉なことに彼の言い訳は当たります。そこに気づかなければ、変わることはできないのです。ですから、出来ない理由に全く意味はありません。それに、この先、できる条件が完全に整うことなど決してないのです。 |
(3) |
技術的な説明は妥協しない XDDPを十分理解していない状態では、XDDPの技術そのものに対する誤解が生じています。そこで、技術的な質問が出た時には、的確かつ丁寧に答える必要があります。「なぜ、うまくいくのか?」、「今までと、どこが違うのか?」「どんな技術が新たに必要か?」「習得にどのくらいかかるのか?」等、質問はさまざまですが、すべての質問に納得できるよう答えて、技術者の不安や疑問を解消してきたつもりです。この回答には、推進側とXDDPへの信頼がかかっていますので、誠意ある姿勢が求められました。 |
“変化の兆し” ~ 変わり始めた技術者たち ~
「普及率16%の論理」では、16%を超えると組織全体に影響すると言われていますが、実は確信があったわけではありません。むしろ16%を目標に、あらゆる手段を考え実施してきたというのが本音のところです。おそらく、周りの誰も信じてはいなかったと思います。
しかし、確実に技術者たちは変わり始めました。「はじめに」では、“変化の兆し”として、論文や社外発表への取り組みを紹介しましたが、今では、次のような技術者も目にするようになりました。
まだ、このような技術者は全体の16%には至ってはいませんが、こうした光景を見ていると個人の習慣から組織文化が徐々に変化している手応えを感じます。組織の中でも、技術者の変化を話題に上げ、嬉しそうに話をする管理者もいます。「もしかすると16%を超えたら展開が加速して組織が変わるかもしれない・・・」展開前に想定したロジャーズの仮説が、今、現場への大きな期待へと変わり始めました。
まとめ ~ 混乱から時代の頂へ ~
現在の取り組みについては、紙面の都合でこれ以上説明はできませんが、現場では、今、Step2からStep3への活動を引き続き展開しています。これまでの経験から言えるのは、プロジェクトの状況や現場環境、技術者の個性を把握し、彼らの能動をいかに引き出すか、つまり、技術者1人1人の“自律”と“工夫”が活動の成否の鍵を握るとういうことです。
自分の意志で一歩踏み出した技術者たちは、XDDPの技術を着実に習得し、品質、生産性を改善することで自分の時間を確保します。そして、“次の時代への準備”を始めます。アーキテクチャの再構築や分析手法の習得、それに見積もりや進捗管理、スケジューリング等、やっとエンジニアリングや管理技術に取り組むことができるのです。
私がXDDPの技術支援を積極的に進める狙いは、まさにここにあります。それは、疲弊した開発の中でうつ病に倒れ、多くの人に助けて頂きながら執念で手に入れてきたXDDPへの確信であり、この技術こそがソフトウェア技術者を救い、再生する一歩だと信じるからです。
混乱を制した先には、誇りと笑顔を取り戻した技術者が、ソフトウェア開発を心から楽しみ、組織の“希望”となることを願ってやみません。ソフトウェア開発に希望を失った技術者も、本来の能力を発揮し、自分らしく胸を張って生きていける可能性がここにあります。時代の頂に何人の技術者を導くことができるか、XDDP によりプロセス改善に新たな展開が始まりました。
派生開発の混乱を救う「XDDP」
(eXtreme Derivative Development Process)
株式会社システムクリエイツ
代表取締役 清水 吉男
1.派生開発の問題
派生開発というのは、ある製品やシステム(のソースコード)をベースにして、新しい機能を追加したり、操作性などを改良して製品やシステムを作り上げて行く開発方法で、その過程で新しい製品やシステムの体系が生み出されることがあります。
派生開発のプロジェクトの特徴として、一人プロジェクトになるような小さな変更案件から数十人で対応するような大きな変更案件まであることです。開発期間が1ヶ月という短期間のものから1年以上のケースもあり、変更行数が500行程度のものから10万行に達するようなものまであります。
また、多くの場合、ソースコード上で該当すると思われる箇所を見つけ次第に変更しています。もともと変更要件の実現方法も複数あり、いずれの変更方法でもテストでは「正しい」と評価される可能性があります。でも担当者が気づくのは通常はその中の「1つ」です。しかも必ずしも適切な変更箇所が選ばれているとは限りません。
また、プロジェクト終了時の反省会では、相変わらず「全体を理解できていなかったから・・・」という声が出てきます。そしてそれで皆さんが納得しているのです。
でも
要するに「全体」を理解して作業ができる状況にないにもかかわらず、「全体」を理解すれば問題が解決すると考えているのです。そしてこの立場に立つ限り、全体を理解できない状況に備えることができません。それよりも最初から「部分理解」の制約の中で作業が強いられるということを前提にすることで、担当者の思い込みや勘違いに気づく方法を取り入れる工夫ができるのです。
また、派生開発では下表のように新しい機能の追加に伴って問題が発生しているケースが少なくありません。これも派生開発の特徴です。
2.保守開発との違い
もともとソフトウェアエンジニアリングの世界には、「保守」あるいは「保守開発」というプロセスがあります。(JIS X 0160:ソフトウェアライフサイクルプロセス)
「保守開発」で想定しているのは、主にバグなどの「是正保守」や稼働後の環境の変化に対応するための「適応保守」であり、そのようなケースでは今でも「保守」のプロセスで対応しても支障はないと思います。
ビジネス分野においては、このようなケースが多いと思われますが、それでも最近は、新しい機能の追加なども伴うことが多く、変更要件が複雑になっていると思われます。
これに対して、組み込みシステムの世界では「是正保守」よりも、機能追加や性能の改良などを行って新しい製品として市場に出すというケースが多く、そこには「保守開発」という概念はありません。たとえば「携帯電話」が今日の「ケータイ」端末に変化(進化)する過程は「保守」では説明がつきません。パッケージソフトや流通などの制御システムでも、ビジネスの競争に勝つという要求に応えるために頻繁に機能の追加が行われています。
こうした中で、2008年にJIS X 0160が改訂され「緊急保守」と「改良保守」が追加されました。「改良保守」は主に機能追加など新しい要求への対応を想定しています。ただし、「是正保守」と「改良保守」では求められている「要求」が根本的に異なるという、新しい問題が生じます。
3.XDDPの考え方
「XDDP」は派生開発に特化した開発アプローチで、派生開発の特徴である「短納期」や「部分理解」の中での作業に対応しています。短納期の要求に対しては無駄のない合理的なプロセスで対応する必要があります。また「部分理解」に対してはいきなりソースコードを変更するのではなく、適切な成果物を生成して他の人のレビューを受ける機会を作ることが重要です。
「部分理解」に対応した開発アプローチによって手戻り作業が大幅に減り、結果として「短納期」を支援することにもなります。XDDPによって「Q」と「C」「D」を同時に手に入れることに繋がるのです。
また派生開発では、変更行数が少ないときは「一人プロジェクト」になるのはやむを得ませんが、「部分理解」の下で生じる思い込みや勘違いを防ぐ方法を講じる必要があります。XDDPの開発アプローチはこの問題にも対応できます。
「XDDP」は、下図のように「USDM」と「PFD」の2つの主要な技術に支えられています。
「PFD」 ( Process Flow Diagram ) は、今回の派生開発の要求(納期やコストも含む)を達成するために合理的な成果物とプロセスの連鎖を設計する技術であり、これによって手戻りが起きにくい開発アプローチを設計します。また途中での変化に対しても、開発アプローチの「別案」を考え出すための重要なツールなのです。
ただし、設計された開発アプローチの合理性を判断するには、そこに現れる成果物の構成などの定義とプロセスにおける作業の定義が必要になります。
一方「USDM」 ( Universal Specification Describing Manner ) の方は、今回の要求(追加/変更)を適切に表現し、そこから必要な仕様を引き出す方法を提供します。USDMは要求と仕様を階層関係の中で捉えますが、これはもともとモレが生じにくい構成です。そして要求に含まれる「動詞」をしっかりと表現することで、要求に含まれる「仕様」を引き出すテクニックを提供しています。
このようなUSDMの表記法によって、実際にベースライン設定後の仕様変更率が「1%」にまで押さえることもできています。
4.XDDPの特徴
XDDPの主な特徴を以下に列記します。
もっとも重要なことは、「変更」と「追加」を異なるプロセスで対応することです。「追加」は通常の要求仕様書が必要で、その後の設計プロセスや実装プロセスも新規開発のアプローチが使えます。そこに現れないのはシステム全体の「アーキテクチャを設計する」プロセスぐらいです。
一方「変更」は、簡単なケースでは変更要件から該当箇所の当たりをつけてソースコード上で見つけて変更する、というプロセスも必ずしも否定できません。税率の変更などはこのような対応でも問題は生じないでしょう。
もちろん、変更要件の内容によっては、もっと緻密なプロセスが必要になります。たとえば現状のソースコードを解析して不足している設計書の記述を補いながら、関係箇所の相互関係の理解を進めたり、メモリーの競合やCPUの負荷の状況を検証したりしながら、最適な変更箇所を特定するといった方法も必要です。しかも、こうして見つけた「変更箇所」も担当者の思い込みや勘違いの可能性があり、レビューの機会を設けながら作業を進める必要があります。
XDDPでは、このように「追加」と「変更」の要求が異なることを考慮し、変更プロセスにおいて「変更要求仕様書」「TM(Traceability Matrix)」「変更設計書」の3種類の成果物(3点セット)の作成を勧めています。これらは「What」「Where」「How」の3つの視点から変更箇所の情報を表現しています。
「変更要求仕様書」は、変更要求に対して変更箇所を「変更仕様」として記述しますが、すべて「before / after」で表現することを求めています。「追加する」や「削除する」は、それ自身が「before / after」を内包している用語です。そこでXDDPでは「変更」も「現状の仕様」に対して「新しい仕様」を対峙して記述することで「変更」の意図を表現します。この副次効果として影響箇所の気づきを誘導し、変更の難易度や変更行数の見積もりも容易になります。
「3点セット」のポイントは、生成するタイミングが異なることです。従来は、変更要件ごとに
①該当箇所(変更箇所)を見つけて
②変更方法を考え
③その場でソースコードを変更する
という一連の作業が行われますが、XDDPでは①で変更要求仕様(とTM)を作成し、すべての変更要件に対して①の作業が終わった後にレビューを行い、担当者の思い込みや勘違いを除去してから②の作業に入って変更設計書を作成します。そしてすべての変更仕様に対して変更設計書を作成し必要なレビューを終えてから、変更設計書に沿ってソースコードを一気に変更します。
このように「3点セット」の成果物を作るタイミングが工夫されていることで、担当者自身でも思い込みや勘違いを除去できるのと同時に、それぞれの段階で関係者によるレビューを可能にしているのです。そして最後になって一気にソースコードの変更に取り掛かります。この一気呵成のソースコードの変更はXDDPの特徴の一つです。
こうすることで、複数の変更要件で変更箇所が重なるケースにも対応しやすくなり、従来のように何度もソースコードを変更し直す必要もなくなります。また別の変更要件の探索中に、既に対応した変更要件の対応方法で漏れていた箇所などに気づくこともあります。その場合でもまだソースコードを変更していませんので、より適切な情報に基づいて変更要求仕様を訂正できるのです。
5.XDDPの効果
XDDPの開発アプローチは適切な成果物を生成しながら作業を進めるため、途中で思い込みや勘違いに気づき易く、総じてバグは減ります。特に、複数人数で対応するケースでは、従来では各担当者が分担するソースコードを結合してテストに入ったところで、お互いの食い違いが元でバグが噴き出します。XDDPでは「3点セット」の成果物によって互いに変更箇所やその意図を確認する方法を提供してことで、テストで発見されるバグは大幅に減るのです。
また「一気にソースコードを変更する」というのもXDDPの特徴です。一般に上位のプロセスは要件の内容が生産性に影響を与えますが、実装プロセスは事前の準備さえ整えておけば個人の生産性データがそのまま適用できます。要件の内容に左右されることはありません。
XDDPでは変更設計書によって、すべての変更要件について具体的な変更方法まで記述していますので、ソースコードの実装工程は予定通りに進行します。ソースコードの同じ箇所を何度も変更することもありません。
従来の方法ではソースコードの変更に着手するのが早く、1時間あたりのコード生産性が「5行前後」というケースも少なくありません。その結果、20000行の変更(追加も含む)に4000時間(5人で4ヶ月)必要になります。
これに対してXDDPではコード生産性は一般に80行~100行に達します。
この結果、従来方法ではソースコードの変更作業を終えるのに合計5000時間超の工数が必要になります。またその後テストに回されたところで200件を超えるバグ(10件/KLOC)が発生します。さらに変更箇所の記録がないためにバグの対応に1000時間超の手戻り工数(平均5時間/1件)が費やされます。
これに対して、XDDPでは「3点セット」の成果物を作りながら作業を進めますので、ソースコードの変更作業はわずか250時間、日程にして約1週間で終わってしまいます。つまり、3750時間(4000時間-250時間)を投入して「3点セット」の成果物を作ってレビューすれば、わずか1週間余りでソースコードを変更できるということです。
実際には変更依頼から変更設計書に展開するのに「3750時間」を必要とせず、2割?3割ぐらいは余ります。この「2割」というのは従来方法では
している工数です。
XDDPの開発アプローチには「3点セット」があることでレビューなどによって思い込みや勘違いが相当数除去されますので、テストで発見されるバグも1/5~1/10に減ります。上のケースでは30件程度に減ると予想されます。さらに変更箇所の記録が残っていますので、バグの平均対応時間も半分に減り、手戻り工数は80~100時間程度で済むはずです。
こうして、従来方法で6000時間を要していた工数が、XDDPでは3100時間程度で対応できるということになります。実際にこれを裏付けるデータが多数上がっています。
しぶといバグを効率的に絞り出そう!
株式会社 日立製作所
ソフトウェア事業部生産技術部主管技師 居駒 幹夫
一昔前に比べてソフトウェアの品質管理の考え方は広く普及しました。品質管理のスキルが高くなった組織では、出荷早々の障害頻発といったレベルの問題は少なくなります。しかし、そうなると目立ってくるのが品質管理の網をくぐり抜けた「しぶといバグ」です。出荷してから長い期間を経てポツポツそういうバグが現れてくるのが問題になっている組織も多いのではないでしょうか。
上のグラフを見てください。ある(成熟度の高い)ソフトウェア開発組織でのバグの寿命グラフです。横軸は、製品を出荷してからの期間。縦軸は単位期間で発生した障害数です。横軸のスケールは明示できないのですが、週や月の単位ではなく、年の単位です。確かに、一番事故が発生しやすいのは出荷の直後なのですが、すぐに収束せず、10年、20年たってから発現するバグもあります。このグラフで注目してほしいのは、単に出荷してから長い期間を経て事故が発生するということだけではなく、指数分布、正規分布といった統計分布よりもずっと分散が大きいことです。統計的にはもうバグは滅多に出ないはずなのに、現実には障害が出てくる危険性が大いにあるということ、すなわちバグの寿命は結構長い。今風の言い方をすると、ロングテール、それもかなり太い尻尾を持っているのです。
この問題の解決のためには、多角的なアプローチが必要でしょう。オーソドックスな考えの方であれば、「そもそも、そのようなバグを作り込まないようにしろ」、さらに、「開発プロセスの改善により、より早い工程でバグを摘出することが大切だ」と言うでしょう。筆者は、これらの施策に加え、「しぶといバグ」の性質を見極め、こういうバグを狙って絞り出すようなテスト技術やテストツールも普及させたいと思っています。「しぶといバグってなんでしぶといのだろう」、「これまでのテスト方法では何故摘出が難しかったのだろう」、「こうすれば、こういうバグだって絞り出せる!」と考えてみることも十分意味があるということです。
私の経験からいうと、しぶといバグのしぶとい理由ベスト4は下記です。
こういうしぶといバグを、ソフトウェアをギュッと締め上げて絞り出すような技術と言ったら何でしょう。私は、テスト自動化による加速試験だと思います。
日本のテスト業界では、テストの自動化とは、テストにかける労力を少なくする技術だと思われている方が多いようです。しかし、品質保証の立場からいうと、テストの自動化とは断じて「テストの十分度を高める技術」でなければなりません。どんなに売れているソフトウェアでもお客様の数は有限ですし、実行される回数も有限です。これをテスト自動化で先回りして、実運用での5年、10年を、開発環境での1日、2日に加速することが、しぶといバグ摘出に有効な技術になるはずだと思うのです。
本コラムを読んでいる多くの方は、「話は分かったけど、現実的にそんなツール可能なの?」と思われているでしょう。実は、弊社内のテスト支援ツールRandomized-Cを強化して、無償公開します。このツール、テスト対象のソフトウェアをさまざまな環境、さまざまな入力データ、さまざまな実行順序、さまざまなタイミングで動作させ、その結果の確認を支援します。さらには、テスト対象プログラムの外部仕様(の一部)を指定することにより、その仕様の範囲で自動的に実行順序や、入力するパラメタを変えながらテストを続けます。
では、どこまでテストするのか。これまでの同種の考えだと、「パラメタ数が多いので、All-Pairs法で強度2まで」とか、「ユースケースでの典型的な操作を数回」とかいったテストの間引き技法があります。このツールの場合、制限の対象は時間とテストのカバレージです。許された時間がある限り、単純なテストから、複雑なテストまでを繰り返し実行します。All-Pairs法の場合、強度1から始まって強度2,3, …と時間のある限り全組み合わせを目指してテストを続けます。時間切れになったときに、どの強度までテストが出来たかです。
上図にRandomized-Cのパラメタのイメージを書いてみました。このツール、現状はUNIX系のOSで動作するC言語で書かれたソフトウェアを対象にしていますが、今後、適用対象範囲を広げていく予定です。
こんなツールが欲しかったと思われた方、ためしに使ってみたい方、もう少し詳しい話しを聞いてみたい方、いらっしゃいましたら遠慮なく下記の連絡先にご一報下さい。
原因分析「プロセスネットワーク分析法(PNA)」の勘所
品質マネジメントシステムの原則に基づく原因分析法
株式会社 プロセスネットワーク
代表取締役 金子 龍三
1. はじめに
「なぜなぜ問答は修得が難しいので、簡単に習得できる原因分析法を」と品質保証部長等から言われ、「分析後に関係者から感謝される原因分析」、「これが真の原因だと関係者が悟り改善意欲がわく原因分析」を目指して開発したのがプロセスネットワーク分析法(PNA)です。
組織のすべての業務は(経営者の業務も、管理者の業務も、技術者の業務も)インプットをアウトプットに変換するプロセスとみることができ、組織の成果を出すためにはそれらの業務は相互関係をもっていてネットワーク状になっている。これはJIS Z 9900に記載されていたプロセスネットワーク(JIS Z 9900 4.7 組織におけるプロセスのネットワーク、及び4.8 品質システムとプロセスのネットワークとの関係)概念です。図にプロセス図および説明を示します。
2. PNAにおける分析範囲
価値を付加する仕事をするために、組織に存在している業務【プロセス】が分析の対象範囲です。製品実現プロセス(JIS Q 9004 7.製品実現 JIS Q 9005 9 製品・サービス実現)関係だけではなく、マネジメントプロセスも、管理者や経営者の責務に関係するプロセス(JIS Q 9004 5.経営者・管理者の責任、及び、6.資源の運用管理、JIS Q 9005 7 経営者の責任 8 経営資源の運用管理)も必要に応じて分析の対象になります。
3. PNAの概要
PNA法では概略、(1)分析課題の定義、(2)プロセスネットワーク(プロセスフロー以外に、プロセスマネジメントプロセス、プロセス能力調達プロセス)の調査、及び(3)プロセスネットワークの分析、(4)改善項目のまとめの順で分析を行います。実際にPNAを行ってみるとプロセスフローを調査し、分析しただけで原因が判明することもあります。開発業務の場合のプロセスフローと特定のプロセスの能力支援プロセス群を図に示します。
4. 分析順序概要
4.1 |
分析課題の定義と事実の確認
|
4.2 |
プロセスフローの調査
発見プロセスから遡って実際に行ったプロセスとプロジェクトマネジメントプロセスを調査し、各プロセスのインプットとアウトプットを調査し(中間成果物を確認する)プロセスフロー図を作成します。 |
4.3 |
プロセスフローの分析
プロセスフローについて追跡可能性及び専門的観点から分析します。 |
4.4 |
課題定義と特定プロセスの能力支援プロセスの調査
現象を専門家の観点から、技術課題あるいは/及びマネジメント課題を定義し、どのプロセスが原因か特定し、そのプロセスについて能力支援プロセスを調査します。 |
4.5 |
プロセスネットワーク図の作成と分析のまとめ
これらの結果からプロセスネットワーク図を作成し、分析年月日を記入し、改善課題を列挙し(通常は5項目程度に絞る)、改善計画を策定します。 |
5. 原因分析力の向上のために
開発技術およびマネジメントについての体系的な知識の収集と知識資産の構築が分析を行うためには重要です。そのためには組織としてプロセス能力・資産の構築と、資源の運用管理(JIS Q 9004 5項、6項、JIS Q 9005 7項、8項)が重要な項目です。
6. 原因分析法の使い分け
PNAは、世の中に成果を出すための目的達成行動を対象とした原因分析技術です。しかし退職やノイローゼなどの衝動的な行為に基づく問題の分析には適用できません。この分野は心理的カウンセリングを用いた「なぜなぜ問答」の適用領域です。
原因分析「なぜなぜ問答」の勘所
株式会社 プロセスネットワーク
代表取締役 金子 龍三
1. はじめに
適確な原因分析技術を修得していると、改善が進み技術力・マネジメント力が向上し、次のプロジェクトから未然防止ができるようになります。
原因分析の方法のひとつが「なぜなぜ問答」ですが、「なぜ」を単純に5回繰り返しても分析は成功しません。分析結果が縦の棒状になるようでは原因を見逃している可能性があり、多くの場合失敗です。分析結果はツリー状になることがしばしばあります。
2. なぜなぜ問答の勘所
「なぜなぜ問答」は管理者や品質保証スタッフが分析するのではなく、当事者が自問自答し、その後管理者や品質保証スタッフがレビューし、分析方法を指導することが勘所です。管理者や品質保証スタッフが分析すると過去の経験から誘導しやすく、誘導すれば再発しやすくなります。
当事者が原因分析する際には次の事項について注意する必要があります:
原因分析を管理者や品質保証スタッフが分析する場合には:
3. 原因分析「なぜなぜ問答」レビューの勘所
レビューする際にも、同様な事項を確認しながら行います。
4. おわりに
それぞれが原因分析の結果を保存し、後日見直すと原因分析力の向上のきっかけになります。
分析結果を集めてみると「知らなかった型」「守らなかった型」「できなかった型」「意図的に省略した型(弁解型を含む)」「ヒューマンエラー型」などの類型があることがわかります。類型別に分析方法を訓練することを推奨します。
原因が判明したら、関連の専門領域を調べ知識体系や同様な要因類型(一般化)を調査し(一を聞いて十を知る)、系統図に追加することも原因分析では重要です。
「なぜなぜ問答」による分析は広い範囲に適用できますが、分析も、分析結果のレビューも難しい技術です。より簡単に修得できる技術として、ISO-9000に基づく原因分析技術「プロセスネットワーク分析」法があり、11月号に掲載する予定です。「なぜなぜ問答」だけではなく、「プロセスネットワーク分析」法の適用もお勧めします。
顧客に聞く。経営に効く。気になる品質は?
テラ・システム株式会社
代表取締役 松原 弘治
1. はじめに
私の会社は、主なサービスとして障害者の方の地域生活を支援する事務所に対して、業務全般を支援するシステムをインターネットブラウザから利用する形で提供しています。
いわゆるSaaS(Software as a service)にあたるかと思います。派遣や請負開発もしていますが、現在は全てをSaaSへシフトしていく途上という感じです。
ここでは、お客様からの意見等を通じてどういった品質特性がどういった評価を得ているか、ということをお話してみたいと思います。
2. 提供側の事情から ~SaaSでシステムを提供する~
簡単に、障害者の方の地域生活支援について説明しますと、介護保険に類似した仕組みです。地域で障害者の方が暮らしていくサービスを提供している事業所に対して、国がサービスの対価を給付するといったものです。私の会社で提供しているソフトは、国に対する請求の計算と介護のコーディネート管理を主な機能としています。
このサービスを、自分たちでシステム化して提供するにあたっての状況、環境は以下のようでした。
こういった状況を解決するのにSaaSが持っているといわれるいくつかの特徴は、非常に費用対効果が高いであろうと考えました。
特徴1: |
Webブラウザを利用してシステムを提供するため、インストールを必要とせず、またお客様と同じ画面、現象を提供側である会社でも見ることができる。 |
特徴2: |
プログラムがサーバー側にある。 |
特徴3: |
プログラムを購入してもらうのではなく、利用料をいただく形でシステムを提供する。 |
効果1: |
初期導入が容易で早くなる。 |
効果2: |
プログラム変更、バクの修正等もサーバー側で修正するだけで完了する。 |
効果3: |
お客様のコスト削減。また必要な機能、運用規模に応じてシステムの提供を増減しやすい。 |
3. 計測してみる ~品質特性に当てはめてみた~
実際に、SaaSの仕組みでシステムを提供してみると、管理の容易さや遠隔地のお客様の増加等提供する立場としては、当初予想した通りに近い効果を得ている実感がありました。しかし、お客様の側から見てはたしてよいイメージがあるのか、あるいはそうだとすればどの部分がよいと感じているのだろうかとの疑問がわきました。ただなんとなくヒアリングしても漠然とした評判を聞いたような形になってしまうともったいないので、いいタイミングで私が参加していた社外コミュニティの集まりでISOの品質特性の話が出ていたのを、「これが面白い」と思い、かみくだいた形の質問を用意しそれを利用してシステムの評価をして見ました。
ご存知のように、ISO/IEC9126-1:2001では、ソフトウェア品質を示す特性とそれをさらにブレイクダウンした品質副特性を定めています。ヒアリングは、事業所の業務上のスタイルみたいなものがありますので、偏らないよう30社ほどにお願いしました。
顧客にとっての重要度、顧客評価はヒアリングの結果を、SaaS貢献度は提供側の社内評価で、3段階評価にしてみました。
4. 結果から
質問も品質特性にうまく該当するものを作成できたかは自信ないです。しかし、ざっくりとした調査ではありますが、漠然とした実感と実際にお客様が思っていることのずれを認識するにはとても役立ったと感じました。精度、粒度はともかく実際に計測することの大切さを実感した次第です。
5. おわりに
もともと自分なりに、システムはこういうものを提供すれば、と思っていたのを簡単にまとめると、お客様が
の四つです。
経営というのはある意味、この四つをどれだけコストを掛けず質を落とさず叶えるかにかかっている気がしています。
今回の試みは、すでに利用しているお客様にお願いしたものなので主に、「使ってみて」「ずっと使ってみて」の部分についての評価と思いますが、実際にシステムやサービスが製品として成り立つには、「使うとよさそう」「使ってみよう」の部分もとても重要です。これはコストの問題と、あと品質特性でいえば使用性、機能性、信頼性、効率性などを可視化して、サービス利用を始める前に伝えることができるかがとても大切な要素となります。機会があればここの部分についても何らかの形で、想定ユーザーの意識を知る試みができればと考えています。
品質2.0経営 ~新・品質の時代を生きる~
東京大学大学院
工学系研究科
医療社会システム工学寄付講座
特任教授
飯塚 悦功
価値の提供
「わが社のA関連製品の売上が最近思わしくありません」「どんな製品ですか」「例えば、○○、○○などです」「いや製品の種類や名前でなく、顧客にどのような“価値”を提供しているかお聞きしたのです」「価値?」「ええ、それらの製品を通して顧客に提供している価値です」「そんな風に考えたことはありません。私たちは製品を提供していると思っていました」「製品そのものではなく、製品を通して価値を提供しているのではないのですか。売上減は、提供できている価値が、顧客が期待している価値に合致しないからではないのですか」
品質の時代
振り返れば、日本は戦後の復興がなった1960年ごろから四半世紀にわたり“品質立国”として高度経済成長を謳歌しました。それは心を込めて顧客価値提供に徹した経営の成果でもありました。1980年代初めにはジャパン・アズ・ナンバーワンなどとおだてられていい気にもなりました。そしてバブル経済に見舞われ、その後に味わってきた成熟経済社会の運営の難しさにまだ戸惑っています。打開のための有効な処方箋はあるのでしょうか。
品質立国日本が実現したのは、工業製品の大衆化による経済高度成長期が“品質の時代”だったからです。品質が競争優位要因であって、賢くも日本が“品質優等生”だったからです。品質が良いとよく売れます。品質が良いとスリムな効率的な管理が可能になります。その結果生産性が上がりコストが下がります。品質立国はこうして実現したのです。
品質中心経営
バブル経済後の苦しみは、日本が成熟経済社会に移行し、それまでと異なる経営スタイルが求められているにもかかわらず、十分に対応できていないという国の経済構造、産業構造に原因があると言ってよいでしょう。
どのような時代にあっても、経営の目的が製品・サービスを通して顧客に価値を提供し、その対価から得られる利益を源泉として、この価値提供の再生産サイクルを回すことにあるという基本は変わりありません。品質とは、製品・サービスを通して顧客に提供される価値に対する顧客の評価を意味するなら、どのような環境にあっても“品質中心”すなわち“顧客価値提供中心”の経営が正統であることに変わりはないのです。
新・品質の時代
「経営において品質が重要だということは重々承知しています」「それで何をしてきましたか」「品質中心をスローガンに掲げ、コストより品質、納期より品質に重点を置いて経営管理を進めてきました」「どんな品質を求めてきたのですか」「えっ、ですから品質第一です」「どのような品質特性を重視してきましか」「……」「お客様はその製品のどこを評価して買って下さるのですか。評価して下さる特性は変化していませんか」
この会社は、品質を真摯に追求してきたと言っています。しかし、追求すべき品質についての自分たちの仮説を見直すことなく追求してきたのです。いま私たちには、成熟経済社会という“新・品質の時代”にあります。新たな品質の時代に、新たな品質概念の確立とその方法論の構築をめざすべきではないのでしょうか。経営の目的である顧客価値の追求、その達成方法の確立に血道を上げるべきではないのでしょうか。成熟した経済社会における品質管理は、原則は以前と同じでも、目標とする品質の範囲とレベル、企画・開発プロセスにおけるポイント、技術の活用、パートナーとの関係などにおいて、高度成長期とは異なるはずです。
競争優位要因
「どのような品質の製品を提供すべきか分かったとして、その事業で成功し続けるためにどのような能力が必要だと思いますか」「能力?」「そうです、能力です。顧客の視点で価値のある、競争力のある強い製品を提供するためにあなたの会社はどのような点が優れていなければなりませんか」「競争力?」「ええ、顧客価値提供において他社に比べて優れていなければ事業としては成功できません」「わが社には、いいところもありますが、弱みも……」「もちろんです。何もかも強いなんてことはあり得ません。しかし、その事業分野で強くなくてはならない側面については、他社より優れていなければなりません」「競争優位要因ということですね」「ようやく分かっていただけましたか」
どのような事業分野にも、その分野の特徴、すなわち製品に対するニーズの特徴、顧客の特徴、製品実現に関わる技術の特徴、業界の特徴などに応じて、事業で成功するために必要な組織の能力像というものがあります。ある事業ドメインで成功する方法は多種多様ですが、ある勝ちパターンを現実のものとするためには何かが優れていなければなりません。それが競争優位要因です。
品質2.0経営
どのような時代でも、顧客価値中心という意味での品質中心経営が成功への道であることに変わりありません。しかし、目標とする品質は高度成長期と同じではありません。その目標品質を達成する方法の重点もまた従前と同じではありません。成熟経済社会に移行して、再び“品質の時代”を迎えました。しかし品質の意味は高度成長期に比べ広く深くなっています。現代は“新・品質の時代”なのです。現代の組織には“品質2.0経営”が求められているのです。経営の原点が組織的顧客価値提供活動にあるとの認識に立ち、品質中心、ひと中心、システム志向、自己変革などの行動原理に基づく品質マネジメントを推進して行くことが、いまとるべき道なのです。
ソフトウェア品質保証方法への提言
キヤノン株式会社
品質本部製品品質センター
永田 哲
1. 高品質は日本製品の強みの源泉
日本製品の強みは高品質にあり、それは企画、設計、製造、品質保証、市場サポートに携わる人々の品質意識、技術力そしてプロセスの質の高さによるものです。ハード量産前に工場の技術者により主に生産性に対するチェックを通して設計に磨きがかかります。さらに品質保証部門による統合的なユーザー視点の製品テストとその結果に基づく「生産開始の合否判定権限」が製品の高品質に寄与しています。設計者も製造部門や品質保証部門のハードルがあるからレベルが上がり、三者のモチベーションも高いわけです。
しかし、近年競争の激化に伴う機能と複雑さは増加の一方であり、それを実現するために組み込みソフトウェアの規模も肥大化の一途です。また、生産開始日程や製品品質を決める比重がしだいにハードからソフトへと移ってきています。テスト前の上流工程でのソフトウェア品質は見えにくいため、 ソフトウェアの重要度が増すにつれ品質の維持が難しくなってきています(測定できないものはコントロールできません)。加えて、ハードと違ってソフトウェア設計品質には工場からの磨きはかかりませんので、品質保証部門も最後の総合テスト(システムテスト)のみでは品質に自信を持つことができません。最終の総合テストの段階で予想以上のバグが発見される場合の多くは、それ以前の工程での品質の造り込みが不足していたことを意味しますので、結局出荷後の潜在バグは多いわけです(ブラックボックステストのバグ摘出率は50%未満といわれています)。
2. 変わるべき品質保証部門の役割と品質保証方法
品質保証部門はハード主体の製品では総合テストを主たる任務とすることで済んでいましたが、ソースコードを含めた設計品質で製品品質の大勢が決まってしまうソフトウェアでは、それだけでは品質保証はできません。「工程検査」をしっかりやるべきです。すなわち、ソフトウェア開発工程の「要件分析・定義」「外部(主に機能)設計」「内部設計(アーキテクチャ設計とインターフェース設計を主とした詳細設計)」「コーディング」の各段階で、ドキュメントレビューやコードレビューが充分に実施されているかを確認しなければなりません。もちろん、スキルがあればレビュー(検証)に直接参加すべきですが(特に要件定義書や外部仕様書においては)、重要なのは各工程の成果物であるドキュメントの完成度が設計内でチェックされているかを確認することです。ソースコードについては、静的解析ツールを使用しながら可読性を含めたコード品質のチェックも済んでいることを確認します。そして、クラスのメソッドあるいは関数ごとに単体テストが基準を満たすように(例えば正常系はC1パスカバレッジ100%)実施され、関連モジュールとの結合テストが充分に済んでいるかを確認します。
そして、これらの「検証の充足度をいかに可視化するか(ものさし作り)という可視化技術」と「充足度を判定する基準作り」が品質保証部門に求められているわけです。このような途中のチェック能力と、いざとなればブレーキを踏むことができる権限が品質保証部門には必要です。さもないと先に進みたい一心の企画/設計部門はアクセルを踏みっぱなしとなり、途中までは早いですが、最後の総合テストで大ブレーキがかかり、製品プロジェクトという車は結局ゴールに予定時間内につけないことになるか、それでも無理に突っ走れば事故(市場問題)を起こすことになるでしょう。このようなことが起きないように、各製品プロジェクトに参加している品質保証部門の担当者は、設計成果物の品質確認(レビューやテスト)が計画通り実施されていることを適宜チェックしていくわけです。
3. 請負型契約におけるWin-Win関係を目指して(調達管理)
現在は、多くの設計開発を資本関係のない外部の、しかも海外の開発会社へ請負型契約で委託しなければ競争に勝てない時代です。請負先には成果物責任がありますが、調達側が受け入れテストで品質の低さに気がついても「時すでに遅し」です。このような事態を避けるには調達側は内部仕様書、ソースコード、テストセット(単体テスト、結合テストに必要なテストコード、スタブ、テストケースなどのすべて)の品質を、早期に確認する必要があります。具体的には内部での開発と同様な成果物の品質保証計画を請負先に要求し、適宜調達側の設計部門が成果物品質を再確認することが大切です。この品質保証計画は当然調達契約書に含むようにします。工程検査では、この品質保証計画書の内容確認とともに、計画通りに請負側と調達側が成果物の確認を実施しているかチェックします。
品質保証部門が請負側のバグ出し屋になってしまうと、人をどんどん増すことになり結局品質も充分に上がりません。ハード部品の調達と同様な仕組みがソフトウェアの調達にも必要です。そして成果物の質と量で対価を支払らうべきです。
4. 最後に
製品の品質問題を起こしてユーザーに迷惑をかけることは、その製品に関わった個人、チーム、組織のすべてにおいてプロ意識を欠いた恥ずかしいことである、という認識がまず必要です。次にその失敗を繰り返さないように、類似問題の再発防止/未然防止につながる予防措置を組織レベルまで共有することです。そして品質保証部門は、そのような仕組みが正しく機能しているかを確認する必要があります。プロセス改善は重要ですが、製品品質の維持には、特にソフトウェア開発に携わる設計者一人一人の「品質と生産性への意識」と「技術力」のレベルがある水準以上であることが前提です。逆も真、すなわち製品の高品質を目指すことが個人から組織レベルでの技術力、品質意識そしてプロセスの質を押し上げることになるのです。
プロセス監査の強化~やりきり感の見える化~
ボッシュ株式会社
パワートレインECU事業室
玉井 治久
1. はじめに
私の所属する部署は、部品サプライヤー(以下B社)としてお客様の完成車メーカ(以下A社)へ納めるエンジン制御ユニットのソフトウエア(以下SW)を開発しています。 SWの品質を保つため、B社内でのValidation後、A社内でも、完成車としてValidationを行います。 また、B社内では、Projectへの開発中のプロセス履行監査(以下監査)を行っています。
ある時、そのA社のSW品質監査室の方から「B社さん、A社へ開示できないノウハウを含め詳細な内容に立ち入った監査をB社で完結することにより、不具合の防止をして下さい。ついては、B社さんの監査の仕組みのアセスメントをします」と言われました。
そこで私どもB社の監査のアセスメントをA社さんに行っていただきました。その際頂いたご指摘を基に、現在仕組みの強化中です。本編では今までB社の構築してきた監査の仕組みと、現在の強化の取り組みについてご紹介します。
2. アセスメント結果と指摘事項
A社のアセスメント結果は、「監査の仕組みがあり、必要なことの大部分はカバーされている。 しかしプロジェクト全体としての『やりきり感』が見えず、そのやりきりの監査が出来ていないので、やりきりを監査する仕組みを構築して欲しい」とのことでした。 やりきり確認の監査の方法はB社へ一任されました。
B社の監査の方法はインタビュー形式で、作業成果物の確認を行っています。そのため、 今までのインタビュー形式では例えば、「コードレビューを行っていますか?」に対し、プロジェクトリーダー(以下PL)は数件のレビュー結果(エビデンス)を示して、「はい」と答えればよいことになっていました。つまり、レビューを行った事実の一部を見せればよく、プロジェクトが設計工程でやるべき全てのレビューとテストをやりきっているか確認できていませんでした。
3. やりきり確認の仕組み作り
上記の『プロジェクトのやりきりの監査』構築のために、当初は監査担当者が直接エビデンスの確認を行うつもりでした。 しかし、エビデンスが入っているフォルダーを監査担当者が見ても、現在のプロジェクトの進捗に対し、全てエビデンスが格納されているのか判断できませんでした。
そこで、先ずプロジェクト自身で『やりきり』を『見える化』し、その姿を確認出来るようにしました。これによって、(1)今までは、担当者のレビューなどの工程スキップにPLが気付かなかった、または気付いても放置していたことによる不具合の流出への歯止めになると期待しています。また、(2)エビデンスチェックをインタビューの前に行っておくことにより、忙しいPL達とのインタビューの時間を短く出来ました。【図1】『やりきり』に関しては後述します。
上記をまとめますと下記のような方法になります。
『「プロジェクトの開発者が工程を遵守していること」を
「PLが確認(検図)していること」を
「監査部が監査する」』
また、監査部門として、開発プロジェクトへお願いした新たな品質目標は、以下の2点です。
(1)『工程不遵守による不具合ゼロ!』
(2)『工程未定義による不具合ゼロ!』
以下で、『やりきり』と『見える化』の具体例を示します。
『やりきり』とは
行動としてまずは、例えば、全て(10件)の顧客要件に対して、それぞれ(10件)テスト結果があるということです。設計工程の例で言えば『要件分析-設計-コーディング-単体テスト-結合テスト』の工程があり、それぞれの工程にレビューがあり、テストにはテスト報告書があります。これらの全てのレビューとテストが行われていること。 これが『やりきり』の第1ステップです。当たり前に『愚直』に行うことですね。
『見える化』とは
各顧客要件に対して設計工程での作業成果物(エビデンス)が全てあることを確認したことを『見える化』します。【図2】の例では、3件の顧客要件に対し、PLは各設計工程でのレビューとテストの作業成果物を検図した後に●をつけます。
『見える化』のポイントは、ステータスの良し悪しが一目でわかることです。【図2】の例では、顧客仕様No.0002の『結合テストRM(レビュー議事録)』の欄が空白(検図されていないand/orエビデンスがない)になっているのが一目でわかります。
監査部署では、PLへ空白の理由を確認後、不適合項目として監査報告します。PLは報告に対して原因に対する是正処置をとります。
上記『見える化』例で考慮すべきことは5S(整理、整頓、清潔、清掃、躾)の精神だと思います。いつもきれい(全て●)になっていないと、空白があっても気にしなくなってしまうからです。
4. レビュー自体の『やりきり(品質)』は?
これはきりの無い質問です。しかしまずはRM(レビュー議事録)を見て、「(1)レビューアは間違いを指摘できるレベルの経験者である。*1 (2)添付されているレビューチェックリスト(ノウハウとしての観点集)を全て確認(✓ฺ)している。 (3)レビュー時間がレビュー対象の量に対して妥当である。*2 (4)全ての指摘事項に対し対策が打たれている。」
上記4点でレビューの『やりきり』を確認します(上記4点が検図の観点であり、レビューの『良品条件』です)。
5. 今後
対策中で、まだまだ改善の余地があります。大きなポイントは以下の2点です。
6. 最後に
『やりきり』という言葉は、無限∞なイメージがあります。きっと決まったゴールは無く、自分で限界を決めてしまってはいけないという心があるのかもしれません。また『やりきり』とは、行動(努力)を示す一方、『やりきった』ことの判断は結果でするものかもしれません。今回の対策例に対し、これで十分『やりきっている』のかという問いは、『工程不遵守による不具合ゼロ!』を維持できていますかという問いに代わるのかもしれません。ですから逆説的ですが、手段としての『見える化』だけをやり過ぎることにより工数ばかり掛かって結果の出ない『見せる化』にならないよう注意が必要だと感じています。
SQiPとは
セミナー
研究会
シンポジウム
資格試験
国際会議
ニュース
コミュニティ
アーカイブ
調査・研究
SQuBOK®
その他