ソフトウェア品質とは

ソフトウェア品質とは

はじめに

テクノロジーの進化によりあらゆる業界でデジタル化が進む中、それらを支えるソフトウェアの役割はますます重要になっています。現代はソフトウェアの品質がビジネスの成功を左右する時代と言っても過言ではありません。そこで今回はソフトウェアの品質はどのように担保され、どうあるべきかについて考えてみたいと思います。

そもそもソフトウェアの品質とは

ソフトウェアは自動車や電化製品などのハードウェアと違い、形がなく、目に見えない製品です。このため、開発工程でどのような作業が行われているのかも外部からは見えにくいという特徴があります。このため、一口に品質と言っても、その捉え方は決して一様ではありません。

例えば、多くの開発現場ではソフトウェアの機能が想定通りに正しく動作すること、すなわちソフトウェアの不具合(バグ)をゼロにすることが品質保証(QA、Quality Assurance)の観点から重視されており、多くのQAエンジニアがそうした不具合を検出するために必要なテストの設計や実行、その結果を受けた不具合の分析などに従事しています。

ただ、こうした工程を通して不具合のないソフトウェアを開発することができれば、品質をめぐる問題がすべて解消されるというわけではありません。実際、ソフトウェアの開発や利用が広がるにつれて、ソフトウェアに対する人々の期待はますます高くなるとともに多様化しています。

ちゃんと動くモノから満足するモノへ

開発を請け負う企業の立場を例に挙げて考えてみると、以前は「ちゃんと動くモノを開発してもらいたい」という顧客の要望を満たせば、品質面でも高い評価を得られていたものの、近年では「ちゃんと動くだけでなく、使って満足できるモノが欲しい」という風に顧客側の要求レベルが上がってきています。

つまり、機能面での動作を保証しただけでは品質の高いソフトウェアであるという評価を得られないケースも生じており、顧客満足度をどれだけ満たせるかという視点で品質を捉えることがより重要になってきていると言えます。こうした顧客満足度にはソフトウェアの機能だけでなく、操作性や安全性、運用・保守性、さらにはビジネス上の付加価値創出など、さまざまな要素が含まれます。

このため、顧客を満足させる品質を実現するためには、こうした多様な顧客側の期待を分析した上で目指すべき品質要求を精査し、開発を進めることがますます重要になっています。

ステークホルダーごとに異なる品質への期待

また、社会のデジタル化が進む中、ソフトウェア製品を取り巻く環境も大きく変化しています。かつてのようにソフトウェアが限られた業務で一部の人が利用することを目的に開発されていた時代には、利用者(ユーザー)をはじめとした特定の人々の要求を満たせば十分だったかもしれません。しかし、ソフトウェアの機能が高度化、複雑化するにつれて、ソフトウェアに関わる人々(ステークホルダー)が多様化しているのが現代です。

このため、ソフトウェアの発注者だけに限らず、利用者、運用管理者など、より幅広い関係者の期待に応えることが開発の成否を握るようになっています。

つまり、以下の図のように製品に対する期待というのは、それぞれの立場によって異なるため、各ステークホルダーがどのような品質を求めているのかをしっかりと把握することは非常に重要になります。実際、ユーザー目線で捉えれば、「使いやすさの向上=高品質」ということになりますし、事業担当者の立場からみれば「システムが安定稼働し、サービス提供がなされること=高品質」という風に認識されるでしょう。また、システム運用担当者からは「運用・保守に手間取ることなく、簡単に管理できるシステム=高品質」を期待されることは想像に難くありません。

製品に対する期待はステークホルダーによって異なる

ソフトウェア品質を評価するための国際規格

このようにソフトウェアの品質に対する期待は、機能だけでなく、使いやすさや安定性、運用・保守の容易さなど、非常に多くの観点に及びます。このため、ステークホルダーのあらゆる要求を洗い出し、彼らの期待に漏れなく応えることは簡単ではありません。

そこで、こうした多様な品質要求を定義し、整理するための基準のひとつして、いくつかの指標が存在しますが、今回はソフトウェア品質の評価に関する国際規格「ISO/IEC 25010:2011」をご紹介します。この規格では、ソフトウェアの品質特性を以下の8つに分類しています。

1. 機能適合性 実装された機能がニーズを満たす度合い
2. 性能効率性 システムの実行時の性能や資源効率の度合い
3. 互換性 他製品やシステムと機能や情報を共有、変換できる度合い
4. 使用性 効果的、効率的に利用できる度合い
5. 信頼性 必要時に実行できる度合い
6. セキュリティ 不正に悪用されることがなく、情報やデータが保護される度合い
7. 保守性 効果的、効率的に保守や修正ができる度合い
8. 移植性 効果的、効率的に他のハードウェアや実行環境に移植できる度合い

例えば、ECサイトを例に挙げれば、それぞれの品質特性は以下のように当てはめることができるでしょう。

1. 機能適合性・・・利用者が買い物をするために必要な機能が過不足なく備わっていること。

2. 性能効率性・・・ユーザーが購入ボタンや決済ボタンを押下したときに、適切なタイミングで応答があること

3. 互換性・・・さまざまな機種のスマートフォンからアクセスしても同じように使用できること

4. 使用性・・・年齢や性別、システムへの慣れなどに関係なく、商品検索や購入をスムーズにできること

5. 信頼性・・・購入合計金額の計算や決済が間違いなく行われること。また、システム障害が起こらないこと

6. セキュリティ・・・登録してある個人情報の流出・不正利用がないこと

7. 保守性・・・システムやソフトウェアに不具合が発生した際に、原因の特定と修正を速やかに行えること

8. 移植性・・・スマートフォンの新しい機種やOSに速やかに対応できること

参照:テストのツボ:根幹なのに曖昧な「品質」 国際規格の8分類を活用(日経XTECH).

ソフトウェア品質というのは煎じ詰めれば、ソフトウェアやサービスに関わる人々(ステークホルダー)の要求をどれだけ満足させるか、ということに尽きます。

前述したとおり品質に対する期待や要求はステークホルダーごとに異なりますが、ごうした8つの品質特性をベースに何を優先して開発を進めるべきかを検討することにより、顧客満足度の高い製品を開発することが可能になります。

外部品質と内部品質

ここまでソフトウェアの品質についてステークホルダー視点でみてきましたが、次にもう少し違う視点から品質について考えてみることにしましょう。

品質には、顧客やユーザーから見える品質と見えない品質が存在します。ソフトウェアの品質保証業務においては前者を「外部品質」、後者を「内部品質」という用語で表現することが多いですが、それぞれが意味するところは以下のように分類することができます。

外部品質・・・顧客を含む製品のユーザーが実際に製品を利用した時に感じる品質を示す概念。これには、正確性、使いやすさ、効率性、信頼性などが含まれ、利用する過程で気づくことができるものと言えます。

内部品質・・・ソフトウェアを支えている内部のつくりを示す概念。これには、ソースコードや仕様書のほか、保守性や柔軟性、移植性、テストのしやすさ(テスト容易性)などが含まれますが、製品ユーザーが直接目にすることができるものではありません。むしろ、利用者というよりも、そのソフトウェアの開発に携わった開発者や運用・保守担当者により影響を与える品質と捉えることができます。

外部品質への対応で精一杯の現場も

ソフトウェアの品質だけを考えるのであれば、理想的には外部品質と内部品質をともに満たした製品を開発することが望ましいということは誰の目にも明らかでしょう。しかし、ソフトウェアの開発現場は品質だけを追求すればよいという環境に置かれているわけではありません。現実的には開発期限や納期といった時間的制約に追われ、何よりも開発スピードが重要視されるケースも少なくないのは、言わずもがなと言えます。

また、新規に開発を行う以上、よりビジネスや業務に付加価値やインパクトをもたらすソフトウェアを開発することも重要な命題となっています。このため、実際の開発では品質への取り組みというのは数ある重要事項のうちのひとつに過ぎないという面も存在します。

こうした現実を受け、現場レベルでは顧客やユーザーの評価に直接的に影響する外部品質を満たすことで精一杯で、内部品質への対応が後回しにされるケースが少なくありません。例えば、製品に不具合が発生した場合、まずはその不具合を取り除くことが優先されますが、これは外部品質を向上させる取り組みに相当します。

ただ、時間的な制約などから目に見える不具合だけを改善する対処療法的なアプローチを繰り返した結果、外部品質としては問題は解決されたように見えるものの、本質的な改善が見送られ、やがては内部品質に歪みが生じることも起こり得ます。

もちろん外部品質が悪ければ製品が正しく評価されないため、外部品質が優先されるという面は理解できますが、その結果として内部品質が疎かにされるようであれば、品質にも影響を与えてしまうことは避けられません。このように内部品質は直接的な影響が可視化されにくい分、外部品質よりも難易度の高い領域と言っても差し支えないでしょう。

おわりに

今回はソフトウェアの品質をめぐる捉え方や基準などについて考えてみました。実際、品質をめぐる議論はソフトウェア開発では常に避けては通れない課題であり、品質とスピードを両立させ、さらにはインパクトも創出できる製品を開発することは容易ではありません。なお、次回の原稿では、さらに品質に迫るために顧客が求める品質のモデルに関する考え方をご紹介したいと思います。