fc2ブログ

テストコードについてなんとなく説明

プログラマーアイドルグループ「電脳カプセル」のリーダブルコードの輪読会の動画を見ていたら
テストコードの話で盛り上がっていたので久しぶりに記事を書いてみます。
動画を見た感じだと「電脳カプセル」のメンバーはスキルに多少差があるようなので
この記事は超初心者向きに書いてみます。
サンプルコードはPHPのコードになります。

テストコードって何?
その名の通りテストするためのコードです。

$this->assertTrue($result); // isOne()の結果がTrueかテスト



じゃあ、テストコードはなんのために書くの?
テストコードとはリリースしようとしているプログラム(システム)を自動でテストするためのコードです。
1だったらTrue、それ以外はFalseを返す関数isOne(int Num)を作ったとします。
isOne(int Num)をテストするプログラムは以下のようになります。(抜粋)

$result = isOne(1); // 渡した引数が1か判定する関数を呼び出し
$this->assertTrue($result); // isOne()の結果がTrueかテスト

$result = isOne(2); // 渡した引数が1か判定する関数を呼び出し
$this->assertFalse($result); // isOne()の結果がFalseかテスト


テストコードを書く目的は自信を持って修正できるようにするためです。
開発をすすめるとこの変数名おかしいから変更しよう、ここの処理は共通化できるから
別の場所に移動しよう、ということがあると思います。
修正を行うと修正前と修正後で同じを動きをするか不安になります。
不安だからテストするのですが毎回値を変えながら数パターンのテストするのはめんどくさいです。
修正の規模が大きいとテストに漏れが出るかもしれません。
テストコードがあれば、すべてのテストコードが通れば修正に問題ないし、
テストコードが通らなかったら一旦修正前に戻すことも出来ます。
「”多分”動いている”はず”」をなくせます。

テストプログラムがあれば品質は担保されるか?
そもそもテストプログラムを書くのは品質を担保するためではありません(結果、品質が上がることはあると思います)。
システムを作るときは設計フェーズ、開発フェーズ、テストフェーズ、運用フェーズがあると思いますが
「テスト」コードだからといってテストフェーズでたくさんのテスト項目を自動的にこなすためのものではありません。(そういう使い方をしているチームもあるかもしれませんが)
どういうことか説明したかったのですが簡潔に説明するのが難しいので機会があればTDD(テスト駆動開発)を勉強してください。

テストコードが間違ってた場合はどうするの?
間違ってていいんです。
先程言ったようにテストコードは品質を担保するものではないので品質を保証するテストは別にきちんと行ってください。
その際にバグが発生したならテストコードのテストケースが間違っている(漏れている)のでテストコードを修正してから製品コードを修正してバグが治ったことと他に影響がでてないことを確認します。


元々がリーダブルコードの輪読会だったのでその辺の話も
多分短いコードがいいのか理解しやすいコードがいいのかの話でテストコードが出てきたと思うのですが、一般的に同じ処理を繰り返すならfor文で繰り返します。
先程のisOne(int Num)のテスト

for($i; $i < 3; $i++){
  $result = isOne($i);
  $this->assertTrue($result);

  if($i > 1){
    $this->assertFalse($result);
  }
}


ですが、テストコードはforで書かないほうがいい場合があります。

$result = isOne(1); // 渡した引数が1か判定する関数を呼び出し
$this->assertTrue($result); // isOne()の結果がTrueかテスト

$result = isOne(2); // 渡した引数が1か判定する関数を呼び出し
$this->assertFalse($result); // isOne()の結果がFalseかテスト

$result = isOne(3); // 渡した引数が1か判定する関数を呼び出し
$this->assertFalse($result); // isOne()の結果がFalseかテスト


後者の書き方で書いておくと「どのようなテストを行っているか明白」「どの値でエラーがあったか明白」というメリットがあります。

以上、文才が無いのでうまく伝わったかわからないですが「電脳カプセル」のみなさんがテストコードで疑問に思ってた部分に回答してみました。

スポンサーサイト



プロフィール

yanchi52

Author:yanchi52
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
カウントダウンタイマー
検索フォーム
カレンダー
09 | 2020/10 | 11
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
RSSリンクの表示
last.fm
twitter
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR