📊

内部品質と外部品質 - ソフトウェア品質の探求

2024/01/14に公開

ソフトウェア品質とは何かを様々な観点から考える記事群です。

はじめに

ソフトウェアの品質に関する議論や資料において「内部品質」や「外部品質」という単語が出てきたことはないでしょうか。なんとなくわかるけれど体系立てて理解していなかったので、来歴と私なりの解釈を残しておこうと思います。

独断と偏見による説明

出典

「内部品質」や「外部品質」はソフトウェア品質に関する規格「JIS X 25010」に登場する「ソフトウェア品質のライフサイクル」という以下の図に由来していると考えられます。
software lifecycle
初見では何やらよくわからない図ですが、円の中に「プロセス品質」「内部特徴」「外部特徴」「利用時の品質」という単語が出ています。「特徴」という単語を「品質」に読み替えて、4つの品質が存在すると言っているように読み取ることにします。

4つの品質

ソフトウェア開発の文脈で「品質」と言った場合、多くの人は「外部品質」をイメージするのではないでしょうか。しかし「プロセス品質」や「内部品質」もあると考えて良いように思います。それぞれの品質についてのイメージは以下の通りです。

品質の種類 ざっくり言うと 高品質な状態のイメージ
プロセス品質 開発手順が決まっている ・俗人性が少ない
内部品質 ソースが読みやすい ・同じ種類のコンポーネントの構造が均一である
・変更時の影響範囲が見極めやすい
外部品質 仕様書通りに動く ・カタログスペックが優秀である
利用時の品質 利用者の満足度が高い ・ソフトウェアが使いやすい
・アクティブな利用者が多い

品質同士の関係

これら4つの品質は互いに関係しています。前述の図を再度みると、それぞれの品質が「影響」や「依存」していると示されています。
software lifecycle
この繋がりは以下のような関係であると考えられます。

品質の種類 影響 依存
プロセス品質 高品質な手順で作ると高品質な成果物が製造できる(内部品質に影響) -
内部品質 ソースコードが綺麗だと不具合が混入しにくい(外部品質に影響) 手順やルールが曖昧だとソースコードの質が低くなる(プロセス品質に依存)
外部品質 仕様通りに動くと利用者の満足度が上がる(利用時の品質に影響) ソースコードの質が低いと不具合が多い(内部品質に依存)
利用時の品質 - 仕様通りに動かないと利用者の満足度は低い(外部品質に依存)

評価するには

これらの4つの品質は計測対象や計測方法が異なります。代表的な評価方法は以下のようになるのではないでしょうか。

品質の種類 計測対象の例 計測方法の例
プロセス品質 ・開発プロセス
・手順書
・プロセス/手順書レビュー
内部品質 ・ソースコード ・lint
・ソースレビュー
外部品質 ・動作中のソフトウェア ・要件や仕様に基づいたテスト
利用時の品質 ・利用者の利用状況
・利用者の満足度
・ユーザーレビュー
・アンケート
・利用状況の計測

改善するには

最後に4つの品質の改善方法ですが、評価方法と同様に改善方法も品質ごとに異なると考えられます。

品質の種類 改善方法の例
プロセス品質 ・標準化の推進
内部品質 ・リファクタリングの実施
・ペアプロ/モブプロの実施
外部品質 ・不具合の改修
利用時の品質 ・CICDを回す

出典

  • JIS X 25010(前身は JIS X 0129)
  • ISO/IEC 25010(前身は ISO/IEC 9126)
GitHubで編集を提案

Discussion