ソフトウェア品質って何だろう

ちょっとお仕事で品質に関わる機会が増えたんだけど,
「品質ってなんだよ」というレベルなので,
これを機にお勉強することとする.

そもそも「品質」の定義自体が提唱者によってバラッバラ.
とりあえずいつも通り,Wikipedia先生に聞いてみる.

品質 - Wikipedia

サービス業が提供するサービスの有する特性、もしくは属性をいう。

例えば
「NK5の身長は160cmだ」
という文章においては,「身長」という特性が,一種の「品質」となる.

さて,この160cmという数字を
「チビ乙wwww」と思う人もいれば,
「ちっちゃくてかわいい」と思ってくれる人もいるだろう.
あるいは江戸時代の人なら
「標準的な身長ですね」くらいに言ってくれるかもしれない.

重要なのは,品質の評価は受け取り手によって変わるということだ.
また,今回は身長という測定可能な特性を扱ったが,
例えば「NK5のルックス」なんて話になったら
実際に見てもらわない限り,品質の是非を論じることはできない.

で,とても残念なことに,ソフトウェアは基本的に目に見えない.
正確には,最終的には何かしらのViewが生まれるわけだけど,
製造過程においては,ほとんど紙か電子データの集合でしかない.
このことからもわかるように,ソフトウェアの品質というのは
とても論じることが難しく,究極的には宗教に近い.

それでも,品質を定義しようと頑張っている人がいる.
代表例が,ISO/IEC 25000シリーズとかいうやつだ.
そこから導出されたJIS規格については
以下から誰でも無料で参照することができる.

JIS X 25000:2010 ソフトウェア製品の品質要求及び評価(SQuaRE)−SQuaREの指針
JIS X 25010:2013 システム及びソフトウェア製品の品質要求及び評価(SQuaRE)−システム及びソフトウェア品質モデル

全部読んでいると日が暮れるので(いつかは読まないといけない),
とりあえず今回は後者の品質モデルに着目する.

品質モデルとは何ぞやということだけど,
要は上述の例でいうところの「身長」のような「特性」を
カテゴライズしながら列挙したもの,という理解で良いと思う.

ここで
「品質の評価は受け取り手によって変わる」
という事実に立ち返る.
ソフトウェアの品質を評価する人って誰だろうか?

まずは間違いなくユーザだ.
だからこそ品質モデルには「利用時の品質」というものが
定義されている.
これはとても分かりやすい.

続けて開発者だ.
開発者にとって製品は我が子みたいなものなので(例外もあるが),
あれやこれやと褒め称えたくなるものだ.
その褒めたたえる観点が,
もう1つの品質モデルの「製品品質」と言える.
つまり,
「うちの子はこんなことが出来るんです」
の「こんなこと」に埋め込む言葉を集約したのが,製品品質だ.

「利用時の品質」も「製品品質」も,つまるところ視点の違いなので,
同一の対象に対し,同時に論じることが可能だ.
例えば「音読ガイド機能」を考えよう.
目が不自由な人向けに用意されたこの機能は
「製品品質」においては「アクセシビリティ」に対して
大きな加点をもたらす,かもしれない.
一方で「利用時の品質」においては「満足性」とか「有効性」に
加点をもたらす,かもしれない.

「かもしれない」を連呼している理由は,例えばこれが
俺個人だけの利用を想定している自作アプリに実装されていたとしても,
まったく無駄な機能であり,品質上何の加点ももたらさない.

しつこいが,「誰が」「いつ」「どうやって」使うかという点が
品質を語る上で必要不可欠だ.
特に直接的な利用者ではない開発者にとって
そこの特定は至難の作業と言えるし,腕の見せ所ともいえる.
古典的なウォーターフォールでは,それを要件定義書という形で
大量の文字列に置き換えようと試みる.
アジャイルはもっと開き直っていて,
「利用時の品質を知りたければ,利用してもらえば良い」という信念で
ドキュメンテーションよりデリバリを優先する.
無論,大外れしないよう,ユーザーストーリーという仮説を用意するが.

とりあえず,大枠はこんな感じ.
この後,数パートに分けて,具体的な品質特性を勉強する記事を書く予定.