しかし、普段から何気なく使っているソフトウェアの品質はどのように担保されているのでしょうか?
ここでは、ソフトウェアにおける外部品質、内部品質と、ソフトウェア品質特性について解説します。
■そもそも「品質」とは
ソフトウェアの品質は、お客様の満足度につながります。しかし、作った製品が、仕様書通りに作られていても、エンドユーザーが満足するものでなければ、それは品質が高いとは言えません。
では、品質とは、何でしょうか?品質は「物」ではなく「概念」であるため、それ以上の説明はできません。
もう少し簡単にするなら「モノの良し悪し」をあらわす言葉です。
品質が良いのか悪いのかを判断するためには、測定をおこなうことによって、なんらかの値に置き換えて評価する必要があります。
■「外部品質」と「内部品質」
システムの利用者が、最初に触れる品質が「利用時の品質」です。この利用時の品質に直接影響を与えるのが「外部品質」です。
外部品質とは、システムが実行されるときの品質のことを指し、実行時のプログラムの振る舞いなどが対象になります。
一般的に「品質」というと、この外部品質のことを指す場合が多いです。
さらに、この外部品質に影響するものが「内部品質」です。
内部品質とは、ソフトウェアの内部的な特徴のことで、 ソースコードや、仕様書、設計書などが測定対象になります。
これらは静的な測定によってほとんどが数値化できます。
■品質を測定するための「ソフトウェア品質特性」
ソフトウェア品質特性では、測定可能で物理的、または概念的で、それ以上は分解できない特徴のことを「属性」とよびます。例えば、ソースコードの改行・インデントのつけ方や、仕様書やソースコードでの表現のしかたなど、さまざまです。
これらを細かく分類したものを「副特性」といいます。
この副特性を、さらに品質の観点から整理したものを「品質副特性」といい、品質副特性は大きく6つに分類できます。これを「品質特性」といいます。
ソフトウェア品質特性には、機能性、信頼性、使用性、効率性、保守性、移植性があり、この6つの特性から、外部品質、内部品質を評価していきます。
■機能性:
ソフトウェアを指定された条件のもとで動作するとき、要求されている仕様を満たす能力のこと。
■信頼性:
ソフトウェアを指定された条件のもとで動作するとき、達成水準を維持し続ける能力のこと。
誤作動時の復旧や、障害に対する許容性をあらわす場合もある。
■使用性:
ソフトウェアを指定された条件のもとで動作するとき、利用者が理解、習得、利用がスムーズにおこなえる能力こと。
いわゆる「使い勝手」や「使いやすさ」、「操作性」のこと。
■効率性:
与えられたリソースに対して、適切な性能を発揮する能力のこと。
たとえば、決められた処理時間の中でいかに早く、数多くの処理ができるか、などがあります。
■保守性:
できたソフトウェアの修正のしやすさの能力のこと。
作った本人しか理解できないプログラムでは、改修が発生した際に多くのコストがかかってしまいます。
これは利用者には直接は関係しない特性のように見えますが、最終的なサービスリリースまでにかかるコストの軽減は、利用者へのメリットにつながることが多くあります。
■移植性:
別な環境へ移すことになった際に、容易に移せる能力のこと。
サーバーの移行や、使うフレームワークが変更になった場合などに重要になってくる。
★まとめ
●品質は概念なので、測定をして良い・悪いを判断する必要がある●ユーザーが最初に接する外部品質と、それを支える内部品質
●6つのソフトウェア品質特性
ここまでで、ソフトウェアの品質について解説してきました。
自分がソフトウェアを作る立場なら、「ソフトウェア品質特性」を意識した開発をすることで、自然と高品質なシステムができるかもしれません。
【参考文献】:
『ソフトウェアテスト教科書 JSTQB Foundation 第3版』