テストコードとは?テストコードの導入メリットと設計方法を解説
COLUMN
最終更新日:2023年05月18日 / 投稿日:2023年05月09日
システム開発の現場では、動作確認の場面で思いもよらないバグが見つかるケースもあります。予期しない動作を早い段階で発見しておくために必要なのが「テストコード」です。システム開発を効率よく進めたい方は、テストコードを作成するとよいでしょう。
当記事ではテストコードとはどういうものか、必要な例や導入するメリット、具体的な設計方法を解説します。システム開発に関わる方はぜひ当記事を参考にして、テストの効率化を進めましょう。
1. テストコードとは?
テストコードとは、開発したソースコードが想定通りに動くかを確かめるためのソースコードです。近年、品質向上の観点から、プログラムの実装より先にテストコード実装を行い開発をすすめるテスト駆動開発という手法を取る企業も増えています。
1-1. テストコードが必要な例
テストコードが必要となるのは、一見しただけでは問題を発見しにくい場合です。小数同士の差を計算するコードを見てみましょう。
public double subtract(double a, double b) {
return a – b;
}
a=1、b=0.9として動きを確認します。
subtract(1, 0.9); // -> 0.09999999999999998
期待する数値0.1に対し、0.09999999999999998という誤差のある結果が表示されます。
これは浮遊小数点型の丸め誤差によるもので、float型やdouble型といった浮遊小数点型を使用した場合に発生することがあります。 0.1を 2進数で表すと0.00011001100…と続く循環少数になるため、近似値に丸めこみせざるを得ません。期待する数値と違う結果が出る例ですが、コードを見ただけでは予測が難しいでしょう。
微小な数値の誤差であっても、金融機関システムや会計に関わるシステムでは重大なトラブルの原因となります。問題を防ぐためにテストコードの設計は必要だと言えます。
2. テストコードを導入するメリット
テストコードの導入により、3つの大きなメリットが得られます。
テストコードを導入する3つのメリット |
---|
|
テストコードはプログラミングコードの品質の向上はもちろん、開発者のスキル向上にもつながるものです。ここでは、テストコードのメリットを詳しく解説します。
2-1. 開発効率が上がる
開発したプログラミングコードは、実装と動作確認により初めて不具合やバグが発見できます。テストコード導入がされていない開発現場では、自分の担当だけでなくプロジェクト全体が可能な段階になるまでは動作確認ができません。リアルタイムでの動作確認が難しい環境では、テスト忘れや不具合の見落とし、対応不足につながる恐れがあります。
テストコードを導入すると、コード作成後すぐの動作確認が可能です。不具合の早急な検知・バグの発見ができ、都度修正が行えるため、開発スピードが上がります。
さらに効率の良い開発が可能なテスト自動化ツールについてはこちらをご覧ください。
テスト自動化ツールならATgo
1か月トライアル無料:詳細はこちら
2-2. リグレッションテストをスムーズに行える
不具合やバグの修正後に必要となるのがリグレッションテストです。プログラムの修正や追加・変更は、その部分だけでなく全体に何らかの影響を及ぼす可能性があります。リグレッションテストの実行により、修正変更後のプログラム全体の動作に問題がないかを確認できます。
しかしプログラムの修正・変更のたびにリグレッションテストを行うのは、時間・人材の負担が増えてしまいます。テストコードを実装している場合、テストコード自体を実行するだけで修正・変更がプログラム全体に影響を及ぼす可能性を把握できます。
2-3. コードへの理解が深まる
テストコードの導入により、プログラムの仕様や要件の理解が容易になり、下記のようなメリットが生まれます。
プログラムコードの使用例を見ることができる |
---|
テスト実行結果から、ある数値を入力した際に返される結果といったインプット・アウトプット例を確認できます。コードの実際の動きを確認することはプログラムコードの意図・仕様の理解に役立ちます。 |
プログラムコードの問題点が分かる |
---|
テストコードの読み取りにより、プログラムの何を確認するコードかが理解できます。テストの対象・内容の理解はプログラムコードの問題点の把握に有効です。 |
プログラムの全体像が分かる |
---|
テストコードで使用される関数・変数の名前やテスト名といった情報はプログラムの内容を予測し理解する材料となります。テストコード作成がされていない状態と比較し、効率よく早く全体像を把握することができます。 |
3. テストコードの設計方法
テストコードの設計では、不具合・バグをもれなく発見できるようにテスト対象を設定することが重要です。テストにはテスト対象・目的によりいくつもの設計方法があります。代表的な設計方法であるブラックボックステスト、ホワイトボックステストを例に、テスト設計方法を解説します。
3-1. ブラックボックステスト
ブラックボックステストでは、システムの仕様通りにインプット・アウトプットが行われるかのみを確認し、その間の内部処理の内容は考慮しません。ユーザーから見える範囲で実際にシステムを利用する立場でテストを行うことから、ユーザー側のテストとも呼ばれます。
特徴 | 内部のプログラム処理の内容は考慮しない |
---|---|
目的 | システム仕様通りの入力・出力ができるかを確認すること |
主な方法 | 同値分割法 境界値分析 |
主な工程 | システムテスト 機能テスト |
ブラックボックステストで使われる主な手法に同値分割法、境界値分析があります。それぞれの内容、特徴は下記の通りです。
同値分割法 |
---|
正常処理ができる数値パターン(有効同値)とエラーが予測される数値パターン(無効同値)を入力値として用い、正常処理・エラー処理が正確に行われるかを確認する方法です。例えば、1か月に存在する日数の範囲を判定するプログラムで、1~31の数値が正常処理され、0や32以上の数字でエラー処理されれば問題がないと分かります。 |
境界値分析 |
---|
正常処理される値とエラー処理される値の上限下限の境界値にテストを行う方法です。初めに同値分割法により正常な値を決定した後、数値の境界が正常かを確認することが多い。 |
3-2. ホワイトボックステスト
ホワイトボックステストは、プログラムコードが意図した通りに動くかを確認するテストです。プログラムの内部における制御の流れが正しく行われるかを確認することから、作り手側のテストと呼ばれています。
特徴 | プログラムの内部構造を把握した上で、正しく制御の流れが行われるかを確認するため、ホワイトボックステストを行う場合、テスト担当者にプログラミングに関する知識が必要。 |
---|---|
目的 | 内部のプログラムが意図した通りに動作するかを確認すること。 |
主な方法 | 制御フローテスト データフローテスト |
主な工程 | 単体テスト |
ホワイトボックステストで使われる主な手法に制御フローテスト、データフローテストがあります。それぞれの内容、特徴は下記の通りです。
制御フローテスト |
---|
プログラムコードの処理が、網羅的に行われているかを確認する方法です。どれくらい網羅的に実行されているかは、条件網羅・命令網羅・分岐網羅といった基準に対する判定結果により確認されます。 |
データフローテスト |
---|
プログラムで使用する変数は生成→1回以上の使用→消滅と言うサイクルを繰り返しています。この流れが順番通りに正常に行われているかを確認するテスト技法です。 |
まとめ
テストコードとは、開発したプログラムがきちんと動くかどうか確認するためのソースコードのことです。簡単には見つからない問題を、実装や動作確認を行うよりも先に発見できるので開発効率の向上につながります。また、コードへの理解が深まるメリットも存在します。
開発効率を改善したい場合は、テスト自動化のためのツールを導入することもおすすめです。ATgoのテスト自動化ツールは、導入により最大85%工数を削減した実績があるので、導入をぜひご検討ください。