簡単な例を考えましょう。本稿では次のような関数を取り上げてみます。
【関数の定義内容】
int abs_compare(int x, int y);
【関数の実装内容】
x、y双方の絶対値「|x|」と「|y|」を比較し、
「|x| < |y|」なら「-1」、
「|x| = |y|」なら「0」、
「|x| > |y|」なら「1」
を返す。
abs_compare関数の仕様
この仕様を満たす関数を実装しましょう。まずヘッダ・ファイル(abs_math.h)を書きます。
#ifndef ABS_MATH_H__
#define ABS_MATH_H__
#ifdef __cplusplus
extern "C" {
#endif
int abs_compare(int x, int y);
#ifdef __cplusplus
}
#endif
#endif /* ABS_MATH_H__ */
この段階で、さっそくテストを書くことができます。実際にabs_compare関数を呼び出して“期待される振る舞い”(=期待される結果)が得られるか否かを確認すればいいですね。
次のコード(ソース・ファイル:abs_math_test.cpp)は、引数の組をいくつか用意して、abs_compare関数のテストを書いたものです。ここでのテストには、C/C++開発者なら誰もが知っているprintf関数(=メッセージをコンソール出力する関数)を使っています。
#include <cstdio>
#include "abs_math.h"
using namespace std;
void abs_compare_test() {
/* 0 を返すケース */
printf("line:%d result = %d\n", __LINE__, abs_compare( 2, 2));
printf("line:%d result = %d\n", __LINE__, abs_compare( 2,-2));
printf("line:%d result = %d\n", __LINE__, abs_compare(-2, 2));
printf("line:%d result = %d\n", __LINE__, abs_compare(-2,-2));
/* 1 を返すケース */
printf("line:%d result = %d\n", __LINE__, abs_compare( 3, 2));
printf("line:%d result = %d\n", __LINE__, abs_compare( 3,-2));
printf("line:%d result = %d\n", __LINE__, abs_compare(-3, 2));
printf("line:%d result = %d\n", __LINE__, abs_compare(-3,-2));
/* -1 を返すケース */
printf("line:%d result = %d\n", __LINE__, abs_compare( 2, 3));
printf("line:%d result = %d\n", __LINE__, abs_compare( 2,-3));
printf("line:%d result = %d\n", __LINE__, abs_compare(-2, 3));
printf("line:%d result = %d\n", __LINE__, abs_compare(-2,-3));
}
int main() {
abs_compare_test();
return 0;
}
これだけのテストを行い、期待どおりの結果が得られれば、abs_compare関数は“信頼できる関数”といえるでしょう。Visual Studio 2005またはVisual C++ 2005 Express Edition(以下、Visual Studio)を使って、実際にこのテストを実行してみましょう。
Visual Studioを立ち上げ、ソリューション&プロジェクトを作ります。ソリューション名は「my_library」、プロジェクトは「abs_math」という名前の「スタティック・ライブラリ」としましょうか。ソリューション&プロジェクトの作成手順は以下の画面を参考にしてください。
以上の手順により、ソリューション「my_library」と空のプロジェクト「abs_math」が生成されます。これに、前述のヘッダ・ファイル(abs_math.h)を、次の画面の手順で追加します。
abs_math.hファイルが追加できたら、そこに先ほど示した「abs_compare関数を定義するヘッダ・ファイル(abs_math.h)」のコード内容を記述します。
次に、(ソリューションに)テスト・プロジェクト「abs_math_test」を「コンソール・アプリケーション」として追加します。その際の手順は以下のとおりです。
以上の手順で、テスト・プロジェクト「abs_math_test」が追加されます。このプロジェクトにソース・ファイル(C++ファイル)「abs_math_test.cpp」を追加し、前述した「printf関数で記述したabs_compare関数をテストするソース・ファイル(abs_math_test.cpp)」のコード内容を書き込んでください。
Copyright© Digital Advantage Corp. All Rights Reserved.