猫でも使えるソフトウェアのテスト網羅(3):無料ツールで単体テストを楽に実行しよう:山浦恒央の“くみこみ”な話(86)(3/4 ページ)
組み込み開発の大規模化により、プログラムテストの重要性が高まっています。パス網羅をベースにする単体テストは困難な作業ではありませんが、ツールを導入することで効率化できます。今回はGcovを用いたテスト手法を紹介します。
3.1 例題プログラム
テスト実施するためにはプログラムが必要です(当たり前ですが)。今回は、テスト技術者におなじみの三角形判定問題で考えてみましょう(表1、List1)。
表.1 三角形判定プログラムの仕様
仕様 :3辺の値から正三角形、二等辺三角形、不等辺三角形を判定するプログラム
仕様-1 :3辺の値が等しい場合、画面に「正三角形」と出力する。
仕様-2 :3辺の値のうち、2辺が等しい場合は、画面に「2等辺三角形」と出力する。
仕様-3 :3辺の値が全て異なる場合、画面に「不等辺三角形」と出力する。
仕様-4 :三角形の判定をする場合は、以下を考慮すること。
4-1:3辺の値のいずれかが0以下の場合は、画面に「入力エラー」と出力する。
4-2:三角形が成立しない場合は、画面に「三角形ではありません」と出力する。
(辺1 > 辺2 + 辺3, 辺2 > 辺1 + 辺3, 辺3 > 辺1 + 辺2)
表.1は三角形判定プログラムの仕様です。シンプルにするため、直角三角形と直角二等辺三角形は考慮していません(この仕様では、直角三角形は、「不等辺三角形」、直角二等辺三角形は「二等辺三角形」になります)。この三角形判定プログラムの仕様は、要約すると次のようになります。
- 3辺が等しければ(例えば4、4、4)の場合、正三角形と出力する。
- 2辺が等しければ(例えば3、3、4)の場合、二等辺三角形と出力する。
- 3辺が等しくない(例えば3、4、5)の場合、不等辺三角形と出力する。
- 三角形が成立しない(例えば1、2、3)場合、三角形ではありませんと出力する。
- 3辺のいずれかが0以下の場合(例えば −1、2、3)の場合は、入力エラーと出力する。
#include<stdio.h> void triangle_handler(int side1, int side2, int side3); main() { triangle_handler(1,2,3); triangle_handler(4,4,4); triangle_handler(3,3,4); triangle_handler(3,4,5); } void triangle_handler(int side1, int side2, int side3) { //入力チェック if ( (side1 <= 0) || (side2 <= 0) || (side3 <= 0) ) { printf("入力エラー\n"); return; } //三角形判定 if ( (side1 + side2 > side3) && (side2 + side3 > side1) && (side3 + side1 > side2) ) { if (side1 == side2 && side2 == side3 && side3 == side1) { printf("正三角形\n"); } else if ( (side1 == side2) || (side2 == side3) || (side3 == side1) ) { printf("二等辺三角形\n"); } else { printf("不等辺三角形\n"); } } else { printf("三角形ではありません\n"); } }
List1は筆者が作成した三角形判定プログラムです。プログラムには、2つの関数(mainとtriangle_handler)があり、main関数から呼び出します。triangle_handlerは、3つの引数(side1、side2、side3)があり、これが3辺に相当します。呼び出す場合、triangle_hander(1、2、3)という形でコールし、判定します。
プログラムを実際に実行すると「三角形ではありません」「正三角形」「二等辺三角形」「不等辺三角形」と表示するはずです。現状では、入力エラー(3変数のどれかが0になるパターン)は、意識的に実行していません。よく見ると、いくつも問題はありますが、あくまでも例題としてお考えください。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 猫でも使えるソフトウェアのテスト網羅(2):パス網羅の種類と内包する問題点
趣味ならとにかく、ビジネスとしてのプログラミングに「網羅的なテスト」は欠かせません。網羅的なテストの代表的な手法である「制御パス・テスト」の手法について、解説していきます。 - 猫でも使えるソフトウェアのテスト網羅(1):基本のC0パス・カバレッジ
ソフトウェアのバグが全て取れたか?は開発における最大の関心事でしょう。網羅的テストはもちろんですが、その前に単体テストが必要です。代表的な手法である「制御パス・テスト」の基礎を紹介していきます。 - 統計の食わず嫌いを直そう(その11)、5分で残存バグ数を予測する方法
「回帰分析」は統計分析の有力な手法であり、Excelさえあれば5分で統計的に根拠のある数字を出せます。今回はExcelのツールを使って簡単に残存バグ数を予測する方法を解説します。 - 統計の食わず嫌いを直そう(その10)、ワインを飲まずに品質を予測する方法
統計アレルギーの解消には、身近な分野で考えてみることも大切です。今回は「ワインを飲まずに、ワインの品質を予測する方法」を例に統計に触れてみましょう。 - 統計の食わず嫌いを直そう(その9)、昼休みにタダで統計分析をする方法
「統計分析」と聞くと面倒な感じですが、何を証明するか明確ならExcelで簡単にこなせます。Excelさえあれば追加費用はかからず、しかもランチタイムに終わるほどカンタンなのです。