読者です 読者をやめる 読者になる 読者になる

TDS のススメ

一人アドベントカレンダー 2016 2 日目 by @takkyuuplayer

1行まとめ

新しい言語やライブラリを勉強するときは、テストも書くといい

概要

仕事で書くコードにテストを書くのは当然であるが、新しいライブラリや言語を勉強する時もテストを書いておくと後々大変捗る。 その理由を述べる。

テストコードとは、動く仕様書/ドキュメント

(セクション名が昨日のデジャブ・・・)

人は新しい事を勉強しても、しばらくすると忘れてしまう。

例えば perl における配列の取扱いについてを学ぼうと

use Data::Dumper;

my @array = (1, 2, 3);
warn Dumper $array[2]; # 3
warn Dumper $array[3]; # undef

my $array_ref = \@array;
warn Dumper $array_ref->[2]; # 3
warn Dumper $array_ref->[3]; # undef

my $array_ref2 = [4, 5, 6];
warn Dumper $array_ref2->[2]; # 5

done_testing;

といったコードを書いて、出力された文字列から

perl では 配列の定義は `@` で行い、要素へのアクセスは `$array[]` でアクセスする。 
範囲外の要素にアクセスすると `undef` が返ってくる。
配列リファレンスの場合は `$array_ref->[]` と -> を書けば要素にアクセスできるらしい。

と理解したつもりでも、1週間もすれば忘れてしまう。それは勿体無いので忘れる前にテストコードを書いておこう。

use Test::More;

subtest '配列' => sub {
    my @array = (1, 2, 3);

    is $array[2], 3;
    is $array[3], undef;
};

subtest '配列リファレンス' => sub {
    subtest '\@で定義' => sub {
        my @array = (1, 2, 3);
        my $array_ref = \@array;

        is $array_ref->[2], 3;
        is $array_ref->[3], undef;
    };
    subtest '[]で定義' => sub {
        my $array_ref2 = [4, 5, 6];

        is $array_ref2->[2], 6;
        is $array_ref2->[3], undef;
    };
};

done_testing;

書いたテストコードは「動くドキュメント」となって、1週間後の自分に配列の取扱いについて教えてくれる。 テストコードがたまれば、それは言語仕様やライブラリの自分専用のマニュアルとして活用できる。

テストは常に最新バージョンで行うとなお良い。

最近は travis とか Circle CI とか github と連携して無料で使えるテスト環境が増えた。 書いたテストはそういうCI環境で回せるようにしておこう。 その際に言語やライブラリの最新のバージョンでテストが行われるようにしておくと良い。

昔使えてた機能が今は使えなくなった、ということを教えてくれる。

まとめ

Test Driven Study = TDS いいよ!!

※ タイトルを見て Tokyo Disney Sea だと思った人は、クリスマス前に余計な事を思い出してはいけない。

次回予告

明日の担当も @takkyuuplayer です。