ソフトウェア品質特性とは?
そもそも、品質とは、「不備のなさ」に加え、「実際に使う人(お客さん/ユーザー)の要求をどの程度満たすことができているか」ということを表す指標です。
ソフトウェア・システムにおける品質を担保・評価する為に、JIS X 25010(国際規格ISO/IEC 25010)という組織が基準として以下の8つの品質特性を定義しています。
- 機能適合性:お客さんの求める機能(潜在的なニーズ含め)をどの程度満たしているか
- 信頼性:壊れにくさ、障害の起こりにくさ
- 性能効率性:燃費の良さ
- 互換性:別の環境でも動かすことができるか
- 使用性:使いやすさ
- セキュリティ:許可していない人に勝手に使われない状況を作れているか
- 保守性:メンテナンスのしやすさ
- 移植性:別の環境に変わるときの移しやすさ
エンジニアは、この基準に沿ってソフトウェアの品質を高めていきます。
品質特性をみて分かる通り、ソフトウェアの品質は、「お客さん」視点と「システムを管理する人」視点の2つの視点を意識する必要があります。
機能適合性
機能適合性とは、お客さんの求める機能をどのくらい実現できているかという指標です。
「機能」を基準とした観点です。
お客さんの求める機能には、設計する段階でお客さんから伝えられている機能に加え、言葉では伝えられていないお客さんの心理に眠る機能があります。
エンジニアは、伝えられている機能はもちろんのこと、伝えられていない機能についてもお客さんの意図を適切に汲み取り、予算とのバランスを見ながら提案していくことが必要です。
信頼性
信頼性とは、障害(システムが想定通りに動かなくなってしまう状態)の起こりにくさ、障害が発生した際の不具合解消しやすさの指標です。
「障害」を基準とした観点です。
システムを使っていて、毎日問題・故障が発生する、一度壊れると直るまで長時間かかるようでは不便だし、使う気にならないと思います。
お客さんが使いたいと思わないシステムは「品質が低い」といえます。
性能効率性
性能効率性とは、使用する資源(エネルギー)の量を表す指標です。
「資源」を基準とした観点です。
同じことをやるなら、エネルギーが少なくできる方がいいです。
車で言えば、同じ距離を走るときに消費するガソリン量のようなイメージです。
システムにおける資源は、例えばメモリ・CPU・ディスクの容量等のことを指します。
互換性
互換性とは、別の動作環境でも問題なく動かすことができるかという指標のことです。
「動作環境」を基準とした観点です。
アプリをイメージすると分かりやすいです。
iPhoneでもAndroidでも使うことができるか、WindowsでもMacでも使うことができるか等、動作環境が違う場合の使用可能レベルのことです。
当然、様々な環境で使うことができる方が「品質が高い」といえます。
使用性
使用性とは、利用者が使う際に、どれだけ分かりやすいか、便利かを表す指標です。
「使いやすさ」を基準とした観点です。
例えば、夕飯のデリバリーを頼む際に、お店のサイトで飲み物メニューばかりが表示されて、食べ物メニューをどこから見ればいいか分からなかったり、金額が表示されなかったりしたら困りますよね。
実際に使う人がやりたいことを迷わずにできるか、知りたいことをすぐに知ることができるかを追求することで使いやすい(=品質が高い)システムを実現できます。
セキュリティ
セキュリティとは、使うべき人が使い、使われたくない人に使われないような状況をどのくらい実現できているかを表す指標のことです。
「防護」を基準とした観点です。
例えば、銀行のATMシステムで自分の口座から他人が勝手にお金を引き出せてしまったら大切なお金を好き勝手に使われてしまいます。
このような事態を防ぐために、適切な人のみが利用できるようにコントロールし、不正な侵入やなりすましを防ぐ仕組みが整備されている必要があります。
保守性
保守性とは、システム・ソフトウェアを管理する側が管理しやすいか、メンテナンスしやすいかを表す指標のことです。
「管理」を基準とした観点です。
システムやソフトウェアには必ず管理者が存在します。
管理者が日々の稼働状況をチェックし、異常がないかを確認、異常があった場合は対処を行う為、利用者は安心して使うことができるわけです。
管理者の立場で管理しにくい状態では、異常を見落としてしまったり、異常があった際に改善に時間がかかってしまったりしてしまいます。最終的には、利用者に影響が出てしまいます。
逆に、新しく機能を追加したい場合や環境の変化に対応してプログラムを書き換える場合に変更箇所を素早く見つけることができれば、円滑に作業を実施できます。
長期的な運用を見据えた設計が行われている状態が望ましいです。
移植性
移植性とは、別の動作環境に移行する際に、どのくらい移行しやすいかを表す指標のことです。
「移動しやすさ」を基準とした観点です。
システム全体・ソフトウェアを別の動作環境に移す際に、移行先の環境に合わせてカスタマイズして対応していく必要がある場合があります。
移植性は、移行時のカスタマイズしやすさを指します。
例えば、Windowsのバージョンが上がったときやiPhoneの最新版が出たとき等、すぐに使うことができるようになるか等です。
ソフトウェアの作成当初に想定していなかった環境への適応しやすさのことです。