-shared-img-thumb-takebekaeru_TP_V

システムで使うソフトウェアには、バグがつきものです。ソフトウェアの出荷前にバグをなくしておくことは、お客さまとソフトウェア開発会社の両方にメリットがあります。なぜなら、稼働中のシステムでバグのためにシステムが停止した場合、お客さまの業務に支障を与えたりバグ改修のためにエンジニアの予定外工数が発生したりするからです。

バグによりエンジニアがトラブル対応に追われた場合、そこにかかる工数は予定外の出費となり会社の利益を損ないます。すなわち、「バグの少ないソフトウェアを出荷することが、ソフトウェアベンダーの利益につながる」のです。

それでは、バグの少ないソフトウェアを出荷するにはどうしたら良いでしょうか。それには、ソフトウェアの出荷前に「ソフトウェアテスト」を行ってバグを徹底的に洗い出し、ソフトウェアの品質を上げることが一番の近道です。

ここでは、ソフトウェアテストの手法に関する基礎知識と実際に行われる手法についてお話ししていきます。ここで述べる内容を理解することにより、ソフトウェアのバグを減らして品質を向上させるための手法について学ぶことができます。

さらに、その知識を実際の開発作業に活用することで、会社の利益に貢献することができるようになります。

ソフトウェアテストとは

ソフトウェア開発の作業は、主にコンピュータープログラムの開発になります。開発が完了したプログラムは、そのまま製品として出荷して良いかというとそうではありません。なぜなら、その段階ではプログラムが正しく動作するかどうかの確認がされていないからです。

ソフトウェアは、出荷前の動作検証を行う必要があります。この作業が、「ソフトウェアテスト」です。仮に、ソフトウェアテストを100%完ぺきに行うことができたとすれば、ソフトウェアのバグはなくなり、システムの不具合もなくなるかもしれません。しかし、そのようなことは実際にはありません。

なぜなら、100%完ぺきなテスト手法が存在しないからです。または、100%完ぺきなテストを実施しようとすると、時間がかかりすぎて現実的な時間内に終わらないからです。このことを定量的に示してみましょう。

例えば、「入力A:半角英大文字3文字」「入力B:半角英大文字3文字」の2つの入力に対して、「出力C:AとBの文字列を連結する(計6文字)」を求めるというとても簡単なプログラムを考えてみます。

このプログラムのテストの組み合わせ(テストパターンといいます)は、どのくらいあるでしょうか。なお、「半角英大文字」とは’A’から’Z’までの文字セットのことです。全部で26文字あります。

答えは、「26の6乗=308,915,776」です。すなわち、3億通り以上のテストを行って初めてバグがないことが保証されるのです。このような簡単なプログラムでさえ、3億ものテストパターンが必要になるのです。実際の業務で使われるソフトウェアは非常に複雑です。その複雑度は、ここで挙げたプログラムのそれとは比較になりません。

このような事情で、一般的な業務システムにおいて完ぺきなソフトウェアテストは実施できないのです。そこでソフトウェアテストにおいて重要になる考え方は、「完全ではないけれども、いかに現実的な時間内でソフトウェアの品質を担保するためのテストを行えるか」というものになります。

すなわち、ソフトウェアテストの作業は有限の時間内に行う最大公約数的なものになるのです。そして、テスト担当者には「限られた時間の中で重大なバグが出そうなテストパターンを優先的に実行する」というスキルが求められます。

実際のソフトウェアテスト

ソフトウェアテストの実際の手法には、大きく分けて次のようなものがあります。

  • ホワイトボックステスト
  • ブラックボックステスト
  • システムテスト

ホワイトボックステストは、プログラムの内部構造(ソースコード)に着目してテストを行うものです。ソフトウェアテストの基本ともいえる手法です。しかし実際のところ、業務システムではあまり用いられないかもしれません。なぜなら、業務システムのソースコードは大変大きくなるためにテストパターン作成の時間がかかりすぎるからです。

ブラックボックステストは、ソフトウェアを一種のブラックボックスと見て(ソースコードを見ないで)個々の機能に対してテストを行うものです。実際の業務フローに近い形で入力値の選定や一連の操作を行い、テストを行います。業務システムのテストでは、最も多く使用される手法です。

システムテストは、ソフトウェアの機能に着目するのではなくシステム全体として正しく動作するかを確認するものです。システムに高い負荷をかけて誤動作が起きないかを確認したり、全体的なシステムパフォーマンスを確認したりします。また、セキュリティ上の攻撃に耐えられるかどうかの確認も行います。

これまで述べたように、ソフトウェアテストの意味を正しく理解し、正しい方法で行うことでソフトウェアの品質を上げることができます。ソフトウェアの品質が上がれば、システムを使うお客さまに迷惑をかけることがなくなります。また、それによってソフトウェア開発会社は自社の利益を上げることができます。

ぜひ、ソフトウェアテストを実践して利益を上げていくようにしましょう。