LoginSignup
10
12

More than 5 years have passed since last update.

TDD(テスト駆動開発)メモ

Last updated at Posted at 2015-03-08

某所でテストの神様と呼ばれるt-wadaさんの講演を聞く機会があったので、参加してきました。
その際に聞いた話&学びを残していきます

TDD(テスト駆動開発)とは

プログラム開発手法の一種で、プログラムに必要な各機能について、最初にテストを書き(これをテストファーストと言う)、そのテストが動作する必要最低限な実装をとりあえず行った後、コードを洗練させる、という短い工程を繰り返すスタイルである。
(wikipedia参照)

TDDの進め方

  1. テストコードが失敗するコードを書く
  2. 最低限動くコードを書く
  3. テストを失敗させるテストコードを書く
  4. 3で失敗したテストコードが通るようにコードを修正する
  5. テストが通った状態でリファクタリングをしていく

さっそくやってみる

今回はmochaでテストを書いていきます

1. テストコードが失敗するコードを書く!

test.js
describe('偶数かどうかチェックする関数', function() {
    it ('2は偶数なのでtrueで返す', function() {
        var result = checkEven(2);
        assert(result === true);
    });
});

checkEvenという関数が存在しない&assertをよんでいないので、失敗します。

2. 最低限動くコードを書く!

test.js
var assert = require('assert');

function checkEven() {
    return true;
}

describe('偶数かどうかチェックする関数', function() {
    it ('2は偶数なのでtrueが返ってくる', function() {
        var result = checkEven(2);
        assert(result === true);
    });
});

3. テストを失敗させるコードを書く

test.js
var assert = require('assert');

function checkEven() {
    return true;
}

describe('偶数かどうかチェックする関数', function() {
    it ('2は偶数なのでtrueが返ってくる', function() {
        var result = checkEven(2);
        assert(result === true);
    });

    it ('3は奇数なのでfalseが返ってくる', function() {
      var result = checkEven(3);
      assert(result === false);
    });
});

evenCheck関数が必ずtrueを返すので2つ目のテストは失敗する

4. 3で失敗したテストが通るようにコードを直す

test.js
var assert = require('assert');

function checkEven(num) {
    if (num % 2 === 0) {
      return true;
    } else {
      return false;
    }
}

describe('偶数かどうかチェックする関数', function() {
    it ('2は偶数なのでtrueが返ってくる', function() {
        var result = checkEven(2);
        assert(result === true);
    });

    it ('3は奇数なのでfalseが返ってくる', function() {
      var result = checkEven(3);
      assert(result === false);
    });
});

これで全部のテストが通ります!
次にこの状態を保持してリファクタリングをします。

5.テストが通った状態でリファクタリングをしていく

test.js
var assert = require('assert');

function checkEven(num) {
    return num % 2 === 0;
}

describe('偶数かどうかチェックする関数', function() {
    it ('2は偶数なのでtrueが返ってくる', function() {
        var result = checkEven(2);
        assert(result === true);
    });

    it ('3は奇数なのでfalseが返ってくる', function() {
      var result = checkEven(3);
      assert(result === false);
    });
});

これがTDDのひと通りの流れです。

感想

テストコードを書きながら開発が進められたら一番いいけど
納期とか色々あってうまくいかないこともあるかもしれません。
その時はそっちを優先するとしてもきちんとテストコードを書く癖をつけます。
結構テストを書いている時に思うのが、どこまで書けばいいのか、これで足りるのかを悩んでしまいます。
今後はそのへんも考えてテストしていきたいです。

10
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
12