ソフトウェアテストとは?第三者検証との違い、種類や目的、7原則を解説
目次[非表示]
- 1.ソフトウェアテストを実施する目的
- 1.1.第三者検証とは?
- 2.ソフトウェアの品質と品質特性
- 3.ソフトウェアテストの7原則
- 3.1.1.不具合があることしか示せない
- 3.2.2.全数テストは不可能
- 3.3.3.初期テスト
- 3.4.4.不具合の偏在
- 3.5.5.殺虫剤のパラドックス
- 3.6.6.テストは条件次第
- 3.7.7.不具合ゼロの落とし穴
- 4.ソフトウェアテスト自動化とは
- 5.まとめ
ソフトウェアテストを実施する目的
ソフトウェア開発において、ソフトウェアテストには重要な意味があります。ソフトウェアは、作れば必ず動作するというものではありません。規模が大きくなればなるほど、不具合は必ずどこかに隠れ潜んでいるものです。
ソフトウェアが動かない原因や不具合を放置してリリースすれば、ユーザーからは低品質なソフトウェアと評価されるでしょう。開発した会社も信頼を失うことになりかねません。もしかすると、ソフトウェアが動作しないことが原因で、ユーザーの命が危険にさらされる可能性も十分にあり得ます。
このような状況を防ぐためにも必要なのが「ソフトウェアテスト」です。不具合がないソフトウェアを作ることは困難です。しかし、不具合を見つけ出して可能な限り取り除くことはできます。
ソフトウェアテストでは、様々なケースを想定したテストを何度も繰り返し行います。ソフトウェアに隠れている不具合を見つけだし、リリース前に取り除くことがソフトウェアテストの目的です。
第三者検証とは?
「第三者検証」とは、ソフトウェア開発に携わっていない人間がソフトウェアの検証を行うことをいいます。第三者の立場からソフトウェアの動作確認を行い、品質のチェックをしてもらいます
開発に関係のない人間にソフトウェアの検証をさせるのはとても重要です。ソフトウェア開発をしている側の人間は、ソフトウェアを作っているうちに不具合や欠陥に気付きにくくなるものです。そこで、第三者にチェックしてもらうことで、開発者側が見落としている不具合を発見することが可能です。
▼第三者検証は、こちらを参考にしてみてください。
→第三者検証とは?必要性から社外の「第三者」に依頼するメリット・ポイントまでを解説
ソフトウェアの品質と品質特性
ソフトウェアの品質を向上するために、テストの実施は必要不可欠です。不具合が残っている低品質の状態でソフトウェアをリリースすることで、次のようなリスクを負うことになります。
- 経済に大打撃を与える
- 改善のために時間が使われる
- 開発会社の信頼が失われる
- ユーザーの命が危険にさらされる
「ソフトウェアに不具合があるだけで大げさすぎる」と考える人もいるかもしれません。しかし、実際にソフトウェアが正常に動作しないことが原因で、大事件に繋がったケースが少なくないのです。
例えば、
- ハイブリッドカーのソフトウェアに不具合があったために走行不能に陥った
- 株取引のソフトにバグがあったために誤発注が取り消せず大混乱を引き起こした
- 銀行のATMのソフトウェアにミスがあったため大量の振り込みが未処理になった
など、ソフトウェアに不具合があることで、あなた自身にも損害を与える危険性が潜んでいるのです。
さらに、ソフトウェアの不具合は、経済的にも大損害を与えることが分かっています。米国通産省の調査によると、ソフトウェアのバグが原因で年間で推定595億ドルの損失が生じているといいます。
不具合が多く品質の悪いソフトウェアは、生活に多大な悪影響を与えてしまいます。しかし、一口に高品質なソフトウェアといっても、何を基準にすればいいのか判断に迷います。
そのような時に、判断材料となるのが国際規格「ISO/IEC 25010:20118」です。ISO/IEC 25010:20118では、ソフトウェアの品質を評価の基準として、8つの品質特性が定められています。
- 機能性:目的に応じた機能が実装されているか
- 信頼性:障害が起こらず正常に動作するか
- 互換性:他製品などと機能や情報を共有できるか
- 使用性:ユーザーが効果的に使えるか
- 効率性:時間や資源をどらだけ効率的に使えるか
- 保守性:保守作業にどれだけ労力が必要か
- セキュリティ:データや情報を保護できているか
- 移植性:違うハードウェアなどに移植しやすいか
これらの品質特性をどれだけ満たしているかが、ソフトウェアの品質を判断する基準となります。
▼品質については、下記の記事もぜひ参考にしてみてください。
→ソフトウェア品質の重要性とは?評価するための方法や品質向上の解決策
ソフトウェアテストにはさまざまな種類がある
開発したソフトウェアに隠れている不具合を見つけるために、様々なテストが行われます。各テストは次のような4つに分類することが可能です。
- 工程
- 品質
- 実行方法
- 技法
以下では、ソフトウェアテストの種類について解説します。
①工程
- 単体テスト:個々のプログラムが動作するかをテスト
- 結合テスト:個々のプログラムを組み合わせても動作するかをテスト
- システムテスト:仕様通りにプログラムが動作するかをテスト
- 受入テスト(顧客側):ユーザー側が使用して希望通りに動作するかをテスト
②品質
- 機能テスト:ソフトウェアが目的に沿って使えるかを検証
- 非機能テスト:ソフトウェアの動作以外を対象とした検証
- 構造テスト:ソフトウェアの使用で障害のない速度が出るかを検証
- 確認テスト:不具合が問題なく修正されているかの検証
- 回帰テスト:機能の追加や変更などで不具合がでないかを検証
③実行方法
- 動的テスト:ソフトウェアを実際に動かして行うテスト
- 静的テスト:ソフトウェアを構成するコードの記述をチェック
④技法
- ブラックボックステスト:プログラムの内部を考慮せずに期待通りに動くかを検証する
- ホワイトボックステスト:プログラムの内部に着目して正常に動作するかを検証する
- 同値分割:グループ分けしたデータから個々または複数のデータを抽出して検証する
- 境界値分析:有効・向こうの境界データを取り出して検証する
- エラー推測:経験則から起こりえるエラーを推測して検証する
テストではどのような作業をおこなうのか
実際のテストでは、次のような工程で作業が行われます。
- テスト計画
- テスト設計
- テスト実行
以下で詳しく解説します。
1)テスト計画
テスト計画では次のことが決められます。
- テストをする目的
- テストレベルの定義
- テストを行う範囲
- テストの方法や手段
- テストをする環境
- テストのスケジュール
- リスク等の管理
2)テスト設計
「テスト設計」では、テスト計画をもとにテストの手順や使用するデータなど、テストする方法を細かく決定します。
- テスト範囲の分析(インプット情報の取得と確認)
- テストの範囲を決定[1] (テスト設計方針の決定)
- テストケースを作成
3)テスト実行
テスト計画や設計が完成したら、次はテストを行うために次のような準備が行われます。
- テストする優先度を設定
- テストデータを作成する
- テストスイートを作成する
- テストを実行する手順を確認する
- テストに必要なツールを準備する
- 実際にテストを行う
テストが終わったらそこで完了というわけではありません。テスト実行後は「どのような環境でテストしたのか」「それによってどのような結果が得られたのか」など、テスト結果をまとめて記録する必要があります。
バグや不具合が発見された場合、修正や改善を行います。不具合修正の後は、新たな不具合が出ないか「回帰テスト」を実行します。
ソフトウェアテストの7原則
ソフトウェアの品質を高めるために必要不可欠なソフトウェアテストですが、実行する前に次の7つの原則を心得ておく必要があります。
1.不具合があることしか示せない
ソフトウェアテストで把握できるのは「不具合がある」ということだけです。どれだけテストをしても「不具合がない」ことを証明することはできません。テストを繰り返して不具合を減らすことは可能ですが「絶対にない」と言い切ることはできません。
2.全数テストは不可能
ソフトウェアの処理は無数のパターンで行われています。そのため、それらの処理を全てテストすることは不可能です。全てのパターンをテストするとなると、多大な時間や人員、労力を必要とするため現実的ではありません。
3.初期テスト
ソフトウェアに潜む不具合の発見が早いほど、時間や費用を抑えることが可能です。時間がたつほど不具合の修正にコストがかかるため、開発の初期段階でテストを行うことが重要です。
4.不具合の偏在
ソフトウェアの不具合は色々な箇所に散らばるよりも、一カ所に偏るケースが多い傾向にあります。そのため、不具合が起きやすい箇所を予測し、絞り込んでテストを行います。
5.殺虫剤のパラドックス
同じテストばかりを繰り返すと、最終的に不具合が発見されなくなります。これを、現実の虫に殺虫剤が効きにくくなることに例えて「殺虫剤のパラドックス」といいます。これを回避するために、テストの手法や内容を見直して、新しいテストを実施する必要があります。
6.テストは条件次第
ソフトウェアのテストは条件次第で変える必要があります。ソフトウェアの使用目的や期待される効果など、条件に合わせてテストを行うべきです。
7.不具合ゼロの落とし穴
「不具合ゼロ」にこだわりすぎるのは止めておきましょう。ソフトウェアテストでわかるのは「不具合がない」という事実だけです。全ての不具合をなくすために全数テストを行うことは現実的ではありません。仮に不具合がゼロになったとしても、ユーザーが使いにくいのでは意味がありません。
■関連記事:
ソフトウェアテスト自動化とは
ソフトウェアテストには、人件費や時間など多くのコストがかかります。それらの作業の一部、もしくは全てを自動化することをいいます。
ソフトウェアテストを自動化することで、次のようなメリットがあります。
- 限られた人員でテストが可能
- ヒューマンエラーをなくせる
- 不具合を早い段階で見つけられる
- 手動よりも実行速度が速い
その反面、以下のようなデメリットもあるため注意が必要です。
- 設計したテストしかできない
- すぐに結果が得られるわけではない
- 継続運用のためにコストがかかる
- 初期コストが高め
ソフトウェアテスト自動化は、メリット・デメリットを正確に把握したうえで導入する必要があります。
■関連記事:
まとめ
当記事では今回、ソフトウェアテストについて解説しました。
ソフトウェアの品質を高めるためには、ソフトウェアテストは必要不可欠です。仮にテストを満足に行わずにリリースした場合、次のようなリスクを負うことになります。
- 経済に大打撃を与える
- 改善のために時間が使われる
- 開発会社の信頼が失われる
- ユーザーの命が危険にさらされる
しかし、ソフトウェアの品質といっても、どのように判断すればいいのかが難しいところです。そこで、ソフトウェアの品質を評価する基準として、国際規格「ISO/IEC 25010:20118」を活用するといいでしょう。
ソフトウェアテストでは、テストを行うソフトウェアに適したテストケースを組むことが重要となります。テストを繰り返し行い不具合を発見することで、ユーザビリティの高いソフトウェアを作り上げることが可能です。
人が作る以上、開発工程の不具合はゼロにはできません。だからこそ、ソフトウェアテストは、質の高いソフトウェアの開発のための重要な工程の一つなのです。
「ソフトウェア開発で望むような品質が得られていない」と感じているのであれば、ソフトウェアテストの手法を見直してみることをおすすめします。
コウェルでは2007年の創立以来、多くのオフショア開発における品質保証支援を行ってきました。
これまでに様々なオフショア開発での品質課題を解決するなかで蓄積したノウハウや方法論をベースに、オフショア開発に加えソフトウェアテストのご支援もさせていただいております。
特にオフショア開発における品質面においてお悩みや課題を抱えられている方は、ぜひ一度コウェルにご相談ください。
なお、コウェルに関する詳細資料は以下でダウンロードすることが可能ですので、何かございましたらお気軽にお問い合わせください。
このほか、弊社の具体的なサービスや導入事例については以下をご覧ください。
コウェルのソフトウェアテスト>>>
コウェルは、日本とベトナムから世界中のお客さまへ高品質なソフトウェアテスト・品質保証・オフショア開発サービスを提供しています。
コウェルの導入事例>>>
コウェルは情報通信、金融、流通・小売サービス、医療・ヘルスケアなど、さまざまな業界のお客様の導入を支援しています。