ソフトウェアの品質とは

一ヶ月くらい前に、EEBOFのメンバーでソフトウェア品質に関わっておられる方から「新入社員に“システム開発における品質とはなんですか?”“標準とは何ですか?”と問われたとしたら、どのように回答しますか?」 という質問メールをもらった。ソフトウェア品質に関しては、『組込みソフトエンジニアを極める』の第4章−品質の壁を越える−でも、結構真剣に書いたし、本業でも今後本格的に取り組んでいくことになったので考えていることはたくさんある。

この質問メールの答えが自分でもいい答えだったかもしれないと思ったのでここで紹介しようと思う。

【一回目の返信より引用】

まずは google で”品質とは”と検索するとミツエーリンクスという会社のこのアドレスがトップででてきます。

http://www.mitsue.co.jp/column/backnum/20030131a.html

このページに書かれている「品質とは、顧客要求を満たし満足させる程度」に賛同します。品質と顧客満足を結びつけた説明は中堅社員向きかと思います。

新人向けには ISO9126-1998 による ソフトウェア品質特性および属性 を説明するとよいかも知れません。 ソフトウェアエンジニアリング基礎知識体系―SWEBOKに書いてあります。

機能性(Functionality)
使用性(Usability)
効率性(Efficiency)
保守容易性(Maintainablity)
移植性(Portability)

なぜなら・・・ 新人技術者は答えのない、もしくは答えがひとつではない問題に解答するのが苦手な傾向があります。そういう訓練を受けていないのですね。だから、品質とはと聞かれたら、「国際標準で定義があるよ」と言うとそれ以上つっこんでくる可能性がほとんどありません。

しかし、中堅になってきたら、機能性がよいとなぜ品質が高いの? とか、どんなメリットがあるの?とか、効率性を高めると保守容易性が低下することはないの? とかについて考えて欲しいものです。したがって、冒頭の品質と顧客満足を結びつけた考え方を紹介した方がよいと考えます。

【引用終わり】

このあと、最初のメールだけでは何か説明が足らないような気がして以下のような追加のメールを送った。

【二回目の返信より引用】

一つだけ追加させてください。 品質を語るときは”誰に対しての品質であるか”を考える必要があると思います。 標準も同じで、いくら国際標準であっても特定の地域だけでしか売らないプロダクトなら従うメリットがないかもしれません。

"123.45" という(ピリオドで)小数点表示するソフトウェアがあって、そのソフトをスペインでも使う可能性があるのなら、"123,45" とカンマで表示できるようにした方がスペインやドイツのユーザーに対しての品質が上がります。

しかし、日本国内だけでしか使わないのなら過剰品質となり、その開発費を商品価格に上乗せしただけ、国内ユーザーに対して品質が下がると言えるかもしれません。

国際標準の場合、国と国との力関係もあるので一概にはいえませんが、グローバルに商売するのなら、CEマーキングとか取っておいた方が品質が高いと評価されることが多くなります。
PSEマークなんか付けていても、海外じゃなんの評価にもつながりません。

誰に対するとか誰のための品質かということを考えることも大事だと思います。

【引用終わり】

今もこの意見は変わらない。品質を考えるときに“誰のための品質か”について考えることは重要だ。そこがはっきりしないと、商品を提供する側が考える品質という価値を過剰にまた間違った形でユーザーに押しつけることになりかねない。品質を顧客が満足する度合いであると考えると分かりやすい。

ちなみに、ソフトウェアの品質を高めるためには金も時間もかかる。技術者への教育も必要だ。事故が起こってはいけないクリティカルデバイスにとって過剰品質などないという主張もあるかもしれないが、人も物も金も無限に使っていいわけではない。ソフトウェアの品質を高めた上で、競合他社との競争に勝って対価を得ていかなければ意味がない。

そのためには、、『組込みソフトエンジニアを極める』で書いたように顕在的価値(Real Value)と潜在的価値(Potential Value)のバランスをとることが重要だと思う。カタログスペックに書かれるような顕在的価値が高くても、商品が壊れやすかったり、保守の対応が悪いといった潜在的価値が低いとリピートオーダーはこない。しかし、潜在的な価値だけ高くても魅力的な商品にはならない。

やはり商品を市場に投入してユーザーに満足してもらいながら利益を得ていくのであれば、商品の顕在的価値と潜在的価値はどちらも高くなければならない。

誰のための価値か、誰のための品質かについて考えないと、そのバランスをとることは難しい。単純に機能性(Functionality)、使用性(Usability)、効率性(Efficiency)、保守容易性(Maintainablity)、移植性(Portability)の6つを高めるだけではソフトウェア品質は語れないはずだ。

ソフトウェア品質とは商品の潜在的価値に起因するもので、商品や組織、ブランドに対するユーザーの満足度と相関を持つ。また、ソフトウェア品質をどこまで追求すべきかは、商品の潜在的価値と顕在的価値のバランスを考えて決めるべき、というのが最終的な質問の答えとなる。