コラム

  • 2020.11.10
  • ソフトウェアテスト
  • #テストレベル
  • #テスト実行
  • #テスト技法
  • #テスト計画
  • #テスト設計
  • #基礎知識

ソフトウェアテストとは?種類や目的、重要な7原則を紹介

/

皆さんは、日常の中で「ソフトウェア」が不可欠であることをご存知でしょうか。ソフトウェアを安心・安全に利用するためには、開発工程でそのソフトウェアが正常に動作するかを確認する「ソフトウェアテスト」が必要です。 今回は、「ソフトウェアテスト」の分類や7つの原則などの基本的な内容についてご紹介します。

ソフトウェアテストとその目的は?

ソフトウェアをリリースする上で大切なことは、「不具合のない製品」を作ることです。不具合が多く使えない機能が多いことは、品質が悪い製品を意味します。このことから、ソフトウェアテストは不具合を発見し改善するために行います。

ソフトウェアテストでは、テスト対象の特徴に合わせてテストケースを組み、さまざまなテストを繰り返して不具合を見つけ出すことで、ユーザーにとって有用なソフトウェアになることを目指します。人が作る以上、開発工程での不具合をゼロにすることは不可能であるため、ソフトウェアテストは質の良いソフトウェアを開発する上で重要なプロセスの1つです。

ソフトウェアテストの7原則

ソフトウェアテストでは、全ての担当者が心得ておくべき7つの原則があるとされています。以下の7原則を頭に入れておくことで、より正確なテストが可能になるでしょう。

不具合があることしか示せない

ソフトウェアテストを行うことで不具合を見つけ出し、修正することができますが、見つけた全ての不具合を排除しても「もう不具合がない」ことを証明することはできません。たまたま不具合が出なかった可能性やそのテストでは発見できなかったという可能性を否定することはできないからです。そのため、不具合は必ずあるもの、という心構えでソフトウェアテストへ臨む必要があります。

全数テストは不可能

ソフトウェアの処理における全てのパターンをテストすることを全数テストと呼びますが、これは不可能だとされています。

例えば、四角形の左上の頂点から右下の頂点までを通る道筋のパターンを数えてみます。通常の四角形なら2通りですが、縦横2つに分割して2×2のマス目になると、同じ場所を通らない条件で考えても12通りにまで増えます。これが3×3のマス目になると184通り、4×4のマス目になると8,512通り、5×5のマス目になると126万2,816通りと爆発的に増えていきます。

このように、組み合わせによってパターンの数は膨大になるため、全数テストは不可能とされているのです。実際にはソフトウェアの性質を考慮し、テストする箇所を絞ったり優先順位をつけたりします。

初期テスト

不具合ゼロのソフトウェア開発は不可能なため、不具合はできるだけ早く発見することが大切です。開発初期の不具合を時間が経ってから発見すると、その影響範囲も大きくなってしまうため、初期テストが特に重要だとされています。

不具合の偏在

ソフトウェアの不具合はあちこちに散らばっているよりも、特定の箇所に集中しているのが一般的です。そのため、テスト計画では過去のデータや直近のテスト結果を参考に、不具合が起きうる箇所を予測してテストケースを絞り込んでいきます。

殺虫剤のパラドックス

同じ殺虫剤を使っているとだんだんと害虫が耐性をつけてしまうことを、殺虫剤のパラドックスと言います。ソフトウェアテストも同じように、不具合を見つけて修正することで「開発段階で不具合を出しにくくする」ことが可能になるため、似たような性質のソフトウェアで同じテストを行い続けると不具合が発見しにくくなっていきます。

テストは条件次第

ソフトウェアの設計や使用目的、状況、期待する結果などに合わせ、テストケースは変えていく必要があります。全く同じテストを適用できるソフトウェアは他に1つも存在しない、ということです。

不具合ゼロの落とし穴

ソフトウェアテストにより不具合をしらみつぶしにし、仮に不具合がない状態にまで修正できたとしても、本来はできるはずの機能が使えなくなったり使い勝手に影響が出たりすることは考えられます。そうなると、不具合はゼロでも良い製品とは言えません。ソフトウェアテストでは、不具合を修正することによる影響についても考慮する必要があります。

ソフトウェアテストの分類方法

ソフトウェアテストの種類や内容は多岐にわたりますが、以下にご紹介する4つの分類方法をおさえるとその全体像を把握しやすくなります。

品質によるソフトウェアテストの分類

前述の通り、ソフトウェアテストのリリースにおいて「不具合がない」製品品質を担保することはとても重要になります。そこで、ソフトウェアの品質の詳細な定義やテスト方法について紹介いたします。

ソフトウェアの品質とは?

ソフトウェアの品質とは「システムやサービスを使う人の要求をどれだけ満足させられるか」という程度を指します。「お客様の満足度」と言い換えることもできるため、システムの種類や関係者の立場によって要求や考え方はさまざまです。

そこで一定の基準を設けるために、ソフトウェア品質の評価に関する「ISO/IEC 25010:2011」という国際規格が定められています。この規格では、以下のようにソフトウェアの品質特性を8つに分類しています。

ISO/IEC 25010:20118が示す8つの品質特性

出典:株式会社SHIFT、日経BP「駄目パターンに学ぶ 失敗しない ソフトウェアテスト 実践ノウハウ」12ページ 表1 「ISO/IEC 25010:20118が示す8つの品質特性」

開発するシステムには必ず目指すべき品質があるため、その品質を曖昧にするのではなく、きちんと定義する必要があります。そこで、上記の8つの品質特性が参考になります。

品質を測るためのテストの具体例

上記のようなソフトウェアの品質を測るためのテストとしては、主に機能テスト、性能テスト、負荷テスト、ユーザビリティテスト、セキュリティテストがあります。

機能テストは最も基本的なテストで、そのソフトウェアの搭載する機能がリクエスト通りに動作するかを確認します。これに加え、ユーザーが快適に使用できるかどうか、レスポンスの早さなどをテストするのが性能テストです。負荷テストでは、そのソフトウェアに負荷をかけて許容できる限界値を測ります。

ユーザビリティテストは、ユーザーが使いやすいと感じるかどうかのテストです。機能や性能は十分でも、直感的に使いにくいと感じるようなら良い製品にはなりません。第三者に悪用されないためには、セキュリティテストも重要です。今後、あらゆるモノがインターネットにつながっていくことになるため、サイバーリスクに対するセキュリティ強度は特に重要性を増しています。

工程によるソフトウェアテストの分類

実際には細かいプロセスがありますが、ソフトウェアテストは主に以下のような工程があります。

テスト計画

ソフトウェアテストは闇雲に必要なテストを行うのではなく、目標の期日までに十分なクオリティを確保するべく計画的に実施します。テスト計画においては、どのようなテストを行うのか、どのタイミングで行うのか、どの程度のリソースを確保するのかなどを設計します。具体的には、以下の6つの必須作業があり、それらを決定します。

出典:株式会社SHIFT、日経BP「駄目パターンに学ぶ 失敗しない ソフトウェアテスト 実践ノウハウ」24ページ 図2 「テスト計画プロセスの作業」

テスト設計

テスト設計では、具体的にテストで確認したいことを詰めていきます。インプットとなる情報を入手、テストケースの作成方針の作成、それに従ったテストケースの作成の大きな3つの作業が、最低限すべきものとしてあげられます。

出典:株式会社SHIFT、日経BP「駄目パターンに学ぶ 失敗しない ソフトウェアテスト 実践ノウハウ」26ページ 図3 「テスト設計プロセスの作業」

テスト実行

テストの実行後では、大きく6つの作業をおこないます。実行の前の準備作業が長くなりますが、基本的にはどの工程も着実なテストの実施に必要な作業になります。

出典:株式会社SHIFT、日経BP「駄目パターンに学ぶ 失敗しない ソフトウェアテスト 実践ノウハウ」28ページ 図4「テスト実行プロセスの作業」

上記の作業にもプロジェクトの規模やシステム特徴によっては、省略できるものもあるかもしれません。しかし脈絡なく省略してしまうと、テストの進行に混乱が生じたり進捗が遅れたり、目的が達成できなくなったりなどの問題の原因になる可能性があります。主要な工程を理解した上で目的を持って省略をする必要があります。

テストレベルによるソフトウェアテストの分類

ソフトウェアテストでは、まずそのソフトウェアの動作における最小単位でテストを行います。これを単体テスト、あるいはユニットテストと言います。

次に、複数の動作を組み合わせて結合テストを行います。結合テストでは連続する動作が正常に動くかどうかを確認します。

開発の終盤で行われるのが、ソフトウェアの全体の流れを確認するシステムテストです。システムテストでは、ソフトウェアだけでなくハードウェア部分も包括してテストを行います。

技法による分類

テスト技法で分類すると、ブラックボックステストとホワイトボックステストに分けられます。

ブラックボックスは「中身が見えない」という意味で、ブラックボックステストではソフトウェアの中身を見ずに、入力した内容に対して期待した出力があるかを確認します。

一方、ホワイトボックスではソフトウェアの中身も確認し、入力から出力の間にどのような処理が行われているかも併せて確認します。

ソフトウェアテストの基本をおさえておこう

人が作るものである以上何かしらの不具合は避けられませんが、全てのパターンをテストすることはできません。ソフトウェアテストにおいてはそのソフトウェアの特性を理解し、どこに重点を置いてテストすべきかを判断する必要があります。

ソフトウェアテストに携わる方は、この記事でご紹介したソフトウェアテストの基本をぜひおさえておいてください。

関連サービス