Intro Blog

プログラミング言語を作っています

IntroJS でテストファーストを実践してみる

IntroJS の自動テスト機能を使って、テストファーストを実践してみます。

例題として、簡単な足し算プログラムを作ります。

入力データ仕様は、1 行目と 2 行目に整数 1 つずつとします。

出力データ仕様は、入力データの 2 つの整数を足したものを 1行目に 1つ出力するとします。

まず、空のソースコードファイル add.intro を作成しておきます。

def main()
end

次に、add.intro ファイルを作成したディレクトリに、case1 ディレクトリを作成します。 そして、その case1 ディレクトリの中に、次のように入力データファイル input.txt を作成します。

1
2

同様に case1 ディレクトリの中に、出力データファイル output.txt を作成します。 足し算プログラムが正しく動作したときの出力データを記述します。 ここでは、入力データの 1 + 2 の結果 3 となります。

3

ここで、一度、自動テストを実行してみます。

introjs -t add.intro

まだ、ソースコードに何も処理を書いていないので、エラーが表示されるはずです。

とりあえず、テストが成功するようにするため、add.intro を次のように修正します。

def main()
  write_int(3)
end

再度、自動テストを実行します。

introjs -t add.intro

今度は、テストが成功するはずです。 ただし、このままでは、他のテストケースでは、うまく動作しないはずです。

もうひとつテストケースを作成するため、case2 ディレクトリを作成し、 その中に input.txt と output.txt を作成します。

case2 の input.txt は次のようにします。

2
3

case2 の output.txt は次のようにします。

5

テストを実行します。

introjs -t add.intro

case 1 は成功しますが、case2 は失敗するはずです。 add.intro を修正して、足し算を正しく計算するプログラムにしましょう。

def main()
  var a = read_int()
  var b = read_int()
  write_int(a + b)
end

テストを実行します。

introjs -t add.intro

すべてのテストケースに成功するはずです。

こうして、無事、足し算プログラムをつくることができました。

このように、テストケースを先に作成してから、ソースコードを作成する手法は、テストファーストと呼ばれています。

ということで、整数型しか使えない簡易プログラミング言語 IntroJS は、いかがでしょうか。

IntroJS