製造業で使われる「品質管理」という言葉は、ソフトウェア開発においても重要な意味を持ちます。しかし、ソフトウェア品質管理について関心はあるものの、その詳細を理解している方は少ないのではないでしょうか。
本記事では「ソフトウェア品質管理とは何か」に関して、基本からわかりやすく解説します。ソフトウェア品質管理を現場で実現したい方はもちろん、ソフトウェア品質管理に関して理解を深めたい方も、ぜひ参考にしてください。
- もくじ
1.ソフトウェア開発における品質管理とは
まずは、ソフトウェア開発における品質管理とは何かを整理しましょう。品質管理という言葉の定義から目的、混同されやすい「品質保証」との違いまで解説します。
1-1 品質管理の定義
「品質」とは、「製品・サービスが要求事項を満たす度合い」のことです。ソフトウェア開発でいえば、「求められる機能や性能がどれだけ適切に実現されているか」を意味します。そして、文字どおりその品質を管理するのが「品質管理」です。
品質管理(Quality Control)とは、「製品・サービスの品質を正しく把握し、その向上につながる適切な取り組みを策定・実施すること」と表現できます。ソフトウェア開発においては品質管理の対象が変わるものの、本質的な意味は製造業と変わりません。
注意点としては、品質管理の対象にはソフトウェア製品だけでなく、開発成果物(設計書やテストケースなど)や開発プロセスも含まれることが挙げられます。低品質な開発成果物や開発プロセスが、結果としてソフトウェア製品の不具合を招くケースもあるためです。
よって、ソフトウェア品質管理とは「ソフトウェア開発に関わる要素の品質を把握し、それらの向上につながる取り組みを策定・実施する一連の取り組み」といえます。
1-2 品質管理の目的
品質管理が、ソフトウェア品質向上による開発プロジェクト成功のために行う活動であることは想像できるでしょう。しかし、ソフトウェア品質向上の先には顧客やエンドユーザー、さらには社会の存在があることを忘れてはいけません。
品質管理によって高品質なソフトウェアを開発・提供することは、顧客やエンドユーザーの満足度向上につながります。また、社会のニーズに応える高品質なソフトウェアを提供することで、ソフトウェアの社会的な価値も高まるのです。高品質なソフトウェアの提供による信頼の積み上げは、長期的には開発プロジェクトの利益にもつながるでしょう。
つまり、品質向上によってあらゆるステークホルダーの満足度向上を実現することが、ソフトウェア品質管理の目的です。
1-3 品質管理と品質保証の違い
品質管理と混同されやすい言葉に「品質保証」があります。これらの違いについては諸説ありますが、大まかな違いを把握しておきましょう。
品質保証(Quality Assurance)とは、「満たすべき要求事項が満たされている」という事実を証明するための一連の活動です。つまり、品質を直接的に向上させるのではなく、
「品質に問題がないという確証を得ること」に焦点を当てた活動といえます。
一方の品質管理は、「より多くの要求事項を、より高いレベルで満たすこと」に焦点を当てた活動です。一般的に品質管理では、品質低下を招く問題の是正・改善を行います。直接的に品質向上の実現に向けて取り組む点が、品質保証との大きな違いです。
ただし、両者はまったく無関係というわけではなく、互いに強く依存しています。品質管理によって品質を高めたとしても、品質保証なしには確証を得られません。また、品質保証によって品質上の問題が判明したとしても、品質管理がなければ改善は不可能です。
品質管理の延長線上には品質保証があり、品質保証の延長線上には品質管理があります。
両者の関係性に対しては多様な捉え方がありますが、どちらもソフトウェア開発に欠かせない要素であることには違いありません。
2.ソフトウェア品質管理が正しく行われない場合の主なリスク
ソフトウェア開発では、さまざまなリスクを防ぐ意味でも品質管理を正しく行うことが重要です。ソフトウェア品質管理が正しく行われない場合の主なリスクは、次の3つです。
2-1 顧客離れ
不具合やパフォーマンス低下といった問題は、満足度やブランドイメージに直結する重大な要素です。ソフトウェア品質管理が正しく行われないと、こうした問題が改善されずエンドユーザーからのクレームにつながる恐れがあります。結果として顧客との信頼関係が崩れ、顧客離れにつながってしまうでしょう。
2-2 開発日程や予算の圧迫
ソフトウェア品質管理が正しく行われないと、システム障害のような緊急性の高い問題も生じやすくなります。トラブル対応が必要になれば、調査や対策検討のために開発者の工数を浪費することになるでしょう。別件対応中の開発者が想定外のトラブル対応に巻き込まれることで、開発日程や予算を圧迫するケースも少なくありません。
2-3 サイバー攻撃による被害
テクノロジーの発展にともないサイバー攻撃の拡大・巧妙化が加速し、セキュリティの重要性は高まっています。品質管理が正しく行われない場合、新しい脆弱性に素早く対応することは困難です。セキュリティ上の問題を抱えたままでは、サイバー攻撃により情報漏洩やサービス障害といった被害を受けるリスクが高まります。
3.ソフトウェア品質管理における主なプロセス
ソフトウェア品質管理を実現するにあたっては、さまざまなプロセスの実施が求められます。ソフトウェア品質管理において必要となる主なプロセスは、次の6つです。
3-1 品質計画
「品質計画」では、ソフトウェア品質管理において達成すべき「品質目標」を定め、それらの達成に向けた具体的なプランや作業項目を明確にします。品質目標とは、何をもって「品質を満たしている」と判断するかを決める基準です。品質目標があいまいだと取り組みの成果を正しく把握できないため、明確に測定可能なものにする必要があります。
3-2 品質測定
「品質測定」では、ソフトウェア品質の「現在地」を把握するために、現状の品質レベルを測定します。詳細は後述しますが、品質測定には「メトリクス」と呼ばれる指標を用いることがポピュラーです。ソフトウェアの品質に関連するデータを収集・可視化し、品質を定量的に分析できる状態にします。
3-3 品質分析
「品質分析」では品質測定の結果データをもとに、現状のソフトウェア品質における課題や傾向を把握します。品質目標に対する達成状況を確認するだけでなく、「なぜこの項目の品質が低いのか」「別項目との関係性はないか」など多角的な分析が必要です。
3-4 品質評価
「品質評価」では品質分析の結果を踏まえて、ソフトウェア品質上の問題点や改善点を明確にします。問題点や改善点には、プロジェクト全体のゴールや計画も加味して、優先度を付けるとよいでしょう。なお、品質評価の一環として前述の品質分析が行われることも多く、順序や位置付けは開発プロジェクトにより変わります。
3-5 品質改善
「品質改善」では、明らかとなった問題点や改善点に対して、具体的な施策を検討・実施します。品質改善のための施策は多岐にわたりますが、主なものは次のとおりです。
- ソフトウェアの改修やリファクタリング(内部構造の最適化)
- 開発成果物のフォーマットや運用ルールの見直し
- 開発プロセスの順序や進め方の見直し
前述のように、開発成果物や開発プロセスの良し悪しもソフトウェア品質を左右します。よって、ソフトウェアに関連する要素はすべて品質改善の検討対象に含めることが重要です。
3-6 品質保証
「品質保証」では品質改善の結果を踏まえて、ソフトウェア品質上の問題が解消・改善されたことの裏付けを取ります。品質保証は、一般的なソフトウェア開発の枠組みにおいても重要なプロセスです。ただし品質管理においても、品質目標を達成できたかどうか判断するために品質保証が欠かせません。
品質保証について詳しくは、次の記事を参考にしてください。
4.ソフトウェア品質管理に欠かせない活動
ソフトウェア品質管理に欠かせない主な活動として、次の3つを把握しておきましょう。これらの活動は、特に品質保証において重要な意味を持つものです。
4-1 デバッグ
「デバッグ」とは、ソフトウェアに含まれるバグ(問題)を検出し、取り除く作業のことです。開発ツールや実機を用いて実際にソフトウェアを動作させ、バグがないか確かめます。判明したバグに対しては原因調査から修正の実施、修正後の再確認まで行います。
「バグを検出する」という点でいえば、デバッグは後述する「テスト」の要素も含んだプロセスです。ただし、テストには「バグを取り除く作業」は含まれないため、バグの判明時にはデバッグが必要となります。
デバッグは開発の延長線上にある作業です。しかし、デバッグを怠ると以降のプロセスにバグが持ち越され、被害が拡大する恐れがあります。品質低下の要因となるバグに対して直接的に対処できるデバッグは、品質管理においても重要な作業といえます。
デバッグについて詳しくは、次の記事をご覧ください。
4-2 テスト
「テスト」とは、ソフトウェアを実際に動作させて品質に問題がないことを確認する作業のことです。どのように品質を確認するかを「テストケース」として定義し、テストケースの手順に沿ってソフトウェアの挙動や性能を確認します。
テストでバグが判明した場合は、取り除くためのデバッグが必要です。ただし、バグを取り除くこと自体を目的としてテストを実施するのは望ましくありません。テストは、デバッグにより自明なバグを取り除いた前提で行うのが理想です。
デバッグは一般的に実装の担当者が行いますが、テストは別の担当者(テスター)が行うケースも多いです。テストにより判明した問題は、開発者やプロジェクト関係者へ報告します。
一般的なソフトウェア開発において、「ソフトウェアが仕様や設計どおりに振る舞うか」という観点でのテストが欠かせません。一方で、仕様や設計により明示されない非機能要件、たとえばセキュリティやユーザビリティ(使いやすさ)なども重要な観点です。こうした観点を考慮したテストを行ううえでも、適切な品質管理が求められます。
ソフトウェア開発におけるテストについて詳しくは、次の記事をご一読ください。
4-3 レビュー
「レビュー」とは、開発成果物をチームやプロジェクト内で精査し、その妥当性を検証する作業のことです。開発成果物の作成者(レビューイ)が説明し、チェック者(レビューア)が問題ないかチェックする、といった形式がポピュラーです。
作成者の先入観や勘違いによる問題を検出するために、原則としてレビューアによる客観的なチェックが欠かせません。ソフトウェアの品質低下につながる問題を後の工程に持ち越さないために、高品質なレビューの実施が求められます。
なお、レビューにはウォークスルーやインスペクションなど、さまざまな種類が存在します。レビューの種類やウォークスルーの詳細については、次の記事をご確認ください。
5.ソフトウェア品質管理の代表的な手法・フレームワーク
ソフトウェア品質管理を適切に進めるうえで、手法やフレームワークを適用することが効果的です。ここでは、品質管理の代表的な手法・フレームワークを2つ紹介します。
5-1 QC七つ道具/新QC七つ道具
「QC七つ道具」とは、品質管理(QC)を行ううえで役立つ7つの手法をまとめたフレームワークです。QC七つ道具は主に開発や製造の工程で使われ、品質を「定量的」に扱うことを可能にします。一方で、品質を「定性的」に扱えるものが「新QC七つ道具」です。新QC七つ道具は、企画や設計を含むより幅広い工程の品質管理に役立ちます。
それぞれの手法名と概要は以下のとおりです。
QC七つ道具 | 新QC七つ道具 |
---|---|
【グラフ】 数値の変化を折れ線や円などで可視化 |
【親和図法】 親和性の高い要素をグループ化して整理 |
【パレート図】 項目ごとのデータ比率を可視化 |
【連関図法】 「原因と結果」「目的と手段」の関係を整理 |
【ヒストグラム】 データを範囲で区切り、分布を可視化 |
【系統図法】 問題解決の手段や方法をツリーで整理 |
【散布図】 2要素の関係性をプロットで可視化 |
【マトリックス図法】 現象や要因を表形式で整理 |
【管理図】 管理状況を折れ線グラフで可視化 |
【アロー・ダイアグラム法】 作業工程の手順や前後関係を整理 |
【特性要因図】 結果(特性)に対する要因を可視化 |
【PDPC】 問題解決の流れを整理 |
【チェックシート】 項目の抜け漏れを防ぐフォーマット |
【マトリックスデータ解析法】 表形式のデータを散布図で可視化 |
QC七つ道具や、新QC七つ道具との違いについては、次の記事をお読みください。
5-2 テスト密度・バグ密度
「テスト密度」や「バグ密度」は、テストが十分であるか把握するための手法です
・テスト密度:プログラムの規模に対するテストケース数の割合
・バグ密度:プログラムの規模に対するバグ数の割合
一般的に、プログラムの規模が大きくなるほど多くのバグが混入しやすくなり、テストケース数も多く必要となります。そのため、バグやテストケースの数にプログラムの規模を加味することで、テストが不足しているかを判断しやすくなるのです。
テスト密度・バグ密度について詳しくは、次の記事を参考にしてください。
6.ソフトウェア品質管理に関する主な用語
ソフトウェア品質管理にはさまざまな用語が存在します。ここでは、よく使われる品質管理の用語を3つピックアップして紹介するため、ひと通り把握しておきましょう。
6-1 メトリクス
「メトリクス」とは、ソフトウェアの品質に関する要素を数値データとして定量的にとらえるための指標です。メトリクスによって明確な品質測定が可能となるだけでなく、品質目標の達成状況チェックや他プロジェクトとの比較分析も容易となります。
具体的なメトリクスはさまざまですが、例を挙げると次のとおりです。
- ソースコード行数
- モジュール間の結合度
- レビュー指摘件数
- テスト密度/バグ密度
メトリクスの活用方法をより具体的に知りたい方は、次の記事を参考にしてください。
6-2 トレーサビリティ
ソフトウェア開発における「トレーサビリティ」とは、開発成果物や情報の関係性を明確にし、相互に追跡できる性質のことです。たとえば、ソースコードの変更箇所ごとに対応する要件をコメントで記録することで、要件と実装のトレーサビリティを確保できます。
品質低下につながる漏れや不整合を防ぐために、トレーサビリティをしっかり確保することが重要です。トレーサビリティについて詳しくは、次の記事をご覧ください。
6-3 品質管理責任者
「品質管理責任者」とは、文字どおり品質管理に対して責任を負う人材のことです。品質管理に関わるプロセス全体のかじ取りを行い、品質管理を成功に導く役割を担います。品質管理責任者は、ISO9001の認証取得時にも重要となるでしょう。なお、品質管理責任者はソフトウェア開発に限った用語ではありません。
7.ソフトウェア品質管理を成功させるポイント
ソフトウェア品質管理を成功させるうえで、ポイントを押さえることが重要となります。品質管理を成功させるポイントは、次の3つです。
7-1 バグは作りこみ工程での除去を心がける
ソフトウェアの品質低下を招くバグは、作りこみ工程での除去を心がけましょう。後工程にバグを持ち越すと、手戻りが大きくなるためです。
たとえば、設計工程で混入したバグがテスト工程で判明すると、設計・実装・テストで手戻りが生じることになります。一方、設計段階でバグを検出できていれば、実装やテストの手戻りは発生しません。
工数の浪費を防ぐために、レビューの品質向上や管理体制の見直しなどを図り、バグを早期検出することが重要です。
7-2 品質マネジメントの原則を遵守する
品質マネジメントを体系化したISO9001では、下記の7原則が示されています。品質管理でもこれらの原則に従うことで、成功につながりやすくなるでしょう。
- 顧客重視(全ステークホルダーのニーズに応えられるように努める)
- リーダーシップ(リーダーが組織を方向付け、けん引する)
- メンバーの積極的参加(個々のメンバーが積極的に関与する)
- プロセス重視(結果だけにとらわれず、プロセスにも着目する)
- 改善(改善の余地を積極的に模索する)
- 客観的事実をもとにした意思決定(データから主観によらない判断を行う)
- 関係性の管理(ステークホルダーとの良好な関係を構築する)
なお顧客重視の「顧客」は、単に「開発を発注する人」という意味ではなく、「ソフトウェア製品に関わるすべての人々」を指します。
7-3 定量的に品質を分析する
品質を分析するうえでは、数値データを用いて定量的に品質を扱うことが重要です。個人の感覚や経験則にもとづく主観が入り込むと、本来の品質を正確に把握できません。前述したメトリクスを活用して、品質を定量化しましょう。
8.ソフトウェア品質管理に役立つ代表的な資格
ソフトウェア品質管理への理解を深めるうえで、資格取得を目指すのも効果的です。体系的な学習を通じて、品質管理の知識がしっかり身につきます。また、ソフトウェア業界への就職・転職で客観的に知識を証明できるのもメリットです。
ここでは、ソフトウェア品質管理に役立つ代表的な資格を4つ紹介します。
8-1 JSTQB認定テスト技術者資格
「JSTQB認定テスト技術者資格」は、テスト技術者に求められる幅広い知識を証明できる資格です。テスト技法やテスト支援ツール、テストマネジメントなど、ソフトウェアの品質保証において重要な知識を学習により網羅できます。JSTQB認定テスト技術者資格について詳しくは、次の記事を参考にしてください。
8-2 IT検証技術者認定試験(IVEC)
IT検証技術者認定試験(IVEC)は、一般社団法人IT検証産業協会(IVIA)が認定するテストエンジニアの資格試験です。ソフトテストの現場における実務を重視していることが特徴で、7段階のキャリアレベルごとに実務力を問う記述式試験が設けられています。IVEC資格の取得は、エンジニアが自身の持つスキルレベルを対外的に見せる際の指標として役立ちます。
8-3 JCSQE(ソフトウェア品質技術者資格)
日本科学技術連盟が運営する「JCSQE(ソフトウェア品質技術者資格)」は、ソフトウェア品質に関する幅広い知識を証明できる資格です。ソフトウェア品質の知識を体系化したガイドライン「SQuBOK(スクボック)」に準拠した内容のため、学習の過程で幅広い知識が身につくでしょう。JCSQEについて詳しくは、次の記事をご覧ください。
8-4 品質管理検定(QC検定)
「品質管理検定(QC検定)」は名前のとおり、品質管理に関する幅広い知識を証明できる資格です。品質管理の各プロセスに関する知識に加えて、QC七つ道具のような手法・フレームワークについても出題されます。区分は1級/準1級~4級の4つです。ソフトウェア開発に限らず、品質管理の知識を証明するうえで役立つでしょう。
まとめ:品質管理への理解を深めて高品質なソフトウェア開発を
ソフトウェア品質管理とは、ソフトウェア開発に関わる要素の品質を把握し、それらの向上につながる取り組みを策定・実施する一連の取り組みのことです。ソフトウェアの品質を向上し、あらゆるステークホルダーの満足度向上を実現するうえで欠かせません。
ソフトウェア品質管理にはさまざまなプロセスや手法、用語が存在します。ソフトウェア品質管理を成功させるうえでは、こうした知識を正しく理解することが重要です。品質管理への理解を深めて、高品質なソフトウェア開発を実現しましょう。