「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

TDD(テスト駆動開発)

pointこの用語のポイント

pointシステム開発の やり方だよ

point「テストコードを書く→テストがOKになるような最低限の(実際の)コードを書く→テストがOKの状態を維持したまま(実際の)コードを整理する」の流れで進めるよ

point「TDD」と表現された場合は「Test Driven Development」の略だよ

スポンサーリンク

簡単に書くよ

TDD(テスト駆動開発)(読:テストクドウカイハツ 英:test driven development)とは

システム開発の やり方のひとつ
であり

まず動作確認用の処理(テストコード)を作って、次にテストコードがOKになる最低限の処理が書かれたプログラムを作って、最後にテストコードがOKになる状態を維持したままプログラムの中身を良い感じに書き換えて整理する やり方……を繰り返して作る やり方
です。


image piyo

詳しく書くよ

順番に見ていきましょう。
まずは予備知識として

プログラムの作り方
ソースコードコード
テストファースト
リファクタリング


について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。

プログラムを作って動かすまでの一般的な流れは

1.人間語でプログラムの元ネタを書く
2.元ネタを人間語から機械語に翻訳する
3.翻訳された指示に従って、コンピュータさんが お仕事する


です。

テスト駆動開発

コンピュータさんは人間語が分かりません。

テスト駆動開発2

人間様はコンピュータさんの言葉が分かりません。

テスト駆動開発3

プログラムは人間様が作るものです。
そこで最初は人間様が分かる言葉でプログラムを作ります。
コンピュータさんに対する「あれをやれ」「これをやれ」な命令を人間語で書くのです。

テスト駆動開発4

次に人間語で書いたプログラムの元ネタをコンピュータさんが分かる言葉に翻訳します。
実際に お仕事をするのは、コンピュータさんですからね。
コンピュータさんが分かる言葉に変換する必要があるのです。

テスト駆動開発5

コンピュータさんが分かる言葉に翻訳したので、コンピュータさんは命令の内容を理解できます。
指示に従って、お仕事をしてくれるでしょう。

テスト駆動開発6

かなり簡略化した説明ですけどね。
これがプログラムを作るときの流れです。

この話で登場した「人間語で書いたプログラムの元ネタ」を「ソースコード」と言います。

テスト駆動開発7

また「ソースコード」を省略して「コード」と表現したりもします。

テスト駆動開発8

テストファーストは「先にテスト用(動作確認用)のプログラムを用意して、テストがOKになるように実際のプログラムを作る やり方」です。
今回は「プログラム」と表現しましたが「処理」でも「コード」でも「関数」でも好きに読み替えてください。

例えば、そうですね。

ピヨ太君がケーキが出てくる箱を作ろうとしています。

テスト駆動開発9

テストファーストでは、先にテスト用のプログラムを作ります。
今回は「箱からケーキが出てくるかチェックする」プログラムを作ったとしましょう。

テスト駆動開発10

今の時点で「箱からケーキが出てくるかチェックする」プログラムを動かすとテスト結果はNGになります。
当然ですよね。
現時点ではケーキが出てくる箱は影も形もないわけですから。

テスト駆動開発11

ピヨ太君はケーキが出てくる箱を作りました……が、出てきたのはコーヒーでした。

テスト駆動開発12

「箱からケーキが出てくるかチェックする」プログラムを動かすとテスト結果はNGになります。
あるのは「ケーキが出てくる箱」ではなく「コーヒーが出てくる箱」だからです。

テスト駆動開発13

ピヨ太君は箱を改造してケーキが出てくるようにしました。

テスト駆動開発14

「箱からケーキが出てくるかチェックする」プログラムを動かすと今度はテスト結果がOKになります。
ケーキが出てくる箱があるからです。

テスト駆動開発15

このような

テストを先に用意して、そのテストが合格するように実際の物を作る やり方

がテストファーストです。

なお「テスト」とは言っていますが、システム開発とかでやる実際のテストとは少しニュアンスが違います。
「動作確認用」くらいのニュアンスで捉えてください。

リファクタリングは「プログラム自体の動きは変えないように気を付けつつ、ソースコードを書き換える作業」です。

1.無駄な処理を省いて処理の流れを分かりやすくする
2.ソースコードを見やすくする
3.仕事してる感を出す


のような目的でやります。

テスト駆動開発16

以上を踏まえて

まず動作確認用のプログラム(テストコード)を作り、次にテストコードによるテストに合格する最低限のコードを書き、テストに合格する状態を維持したままコードの中身をキレイに整理する(のを繰り返す)ことでプログラムを完成させる やり方

が「テスト駆動開発」です。
専門用語を使って説明すると

テストファーストで最低限のコードを書き、リファクタリングして完成させる やり方

ですかね。

ちなみに「Test Driven Development(テスト・ドリブン・デベロップメント)」を省略して「TDD」と表現されることも あります。
気が向いたら、覚えてあげてください。

テスト駆動開発17

※「Test Driven Development」を何となく日本語にすると「テストに突き動かされた開発」となります。[詳細]

例えば、そうですね。

ピヨ太君がケーキが出てくる箱を作ろうとしています。

テスト駆動開発18

テスト駆動開発では、先にテスト用のプログラムを作ります。
今回は「箱からケーキが出てくるかチェックする」プログラムを作ったとしましょう。

テスト駆動開発19

今の時点で「箱からケーキが出てくるかチェックする」プログラムを動かすとテスト結果はNGになります。
当然ですよね。
現時点ではケーキが出てくる箱は影も形もないわけですから。

テスト駆動開発20

この状態を専門用語で「レッド(red)」と言います。
テストコードはあるけど実際のコードがないからチェック結果がNGになる状態です。

逆に、この状態でチェック結果がOKになるのであれば、テストコードがおかしいです。
テストコードを直す必要があります。

あるいは、チェック結果が表示されるところまでいかない可能性もあります。
その場合もテストコードを直す必要があります。

レッドの状態を確認することで「とりあえずテストコードは ちゃんと動いてそうだね」を確認するのです。

さて、レッドの状態が確認できたら、次は いよいよ実際の物を作る作業です。
ただし、ここでは必要最低限の「動けば良いや~」な気分で作ります。
ピヨ太君はピヨ子さんに箱の中に入ってケーキを出してもらうことにしました。

テスト駆動開発21

この状態で「箱からケーキが出てくるかチェックする」プログラムを動かすと今度はテスト結果がOKになります。
ケーキが出てくる箱があるからです。
まぁ、実際には箱の中に入っているピヨ子さんが、あらかじめ持っていたケーキを投げているだけですけどね。

テスト駆動開発22

この状態を専門用語で「グリーン(green)」と言います。
中身が どんな状態かは分かりませんが、とりあえずテストに合格する実際のコードがある状態です。

さて、ここで ちょっと考えてみてください。
これで「ケーキが出てくる箱」は完成でしょうか?

今はピヨ子さんが中に入ってケーキを出している状態です。
これで完成と言えますかね?

きっと言えませんよね。
「ケーキが出てくる箱」と言われたら、なんか自動でケーキが出てきそうです。

そこでピヨ太君は「ケーキが出てくる」という状態を変えないように気を付けながら「ケーキが出てくる箱」を改造しました。
ピヨ子さんにケーキを出してもらうのではなく、ロボットを作って、そいつにケーキを出させることにしたのです。

テスト駆動開発23

これを専門用語で「リファクタリング」と言います。
動きを変えないように気を付けつつ、中身を変える作業です。

リファクタリングが終わったら「箱からケーキが出てくるかチェックする」プログラムを動かします。
もう一度テストするのです。

テスト駆動開発24

もしチェック結果がOKであれば、改造後の状態は「箱からケーキが出てくる」という条件を満たしています。
ピヨ太君の改造は、それで完璧かは分かりませんが、とりあえず成功していると言えます。

テスト駆動開発25

一方、チェック結果がNGであれば、改造後の状態は「箱からケーキが出てくる」という条件を満たしていません。
どんな改造をしたにせよ、やってはダメな改造をしたと判断できます。
すぐに改造前の状態に戻しましょう。

テスト駆動開発26

このような

1.まずはテストを用意し
2.テスト結果がOKになる最低限のコードを作り
3.テスト結果がOKな状態を維持しつつコードをキレイにして完成させる


やり方がテスト駆動開発です。

……というのが大雑把な説明です。

実際にテスト駆動開発をやってみようと思ったら、今回説明した内容だけでは足りません。
例えば「三角測量」とか、他にも なんか いろいろと知っておくべきことがあります。
そこら辺の あれやこれやは他のところで勉強してください。

テスト駆動開発27

あと、テストファーストとテスト駆動開発の違いを気にする人がいますが、個人的には気にしない方が幸せになれると思います。

人によってはテストファーストとテスト駆動開発を(ほぼ)同じものと捉えています。
人によってはテストファーストとテスト駆動開発を区別しています。
テストファーストとテスト駆動開発を区別している人同士でも区別の仕方が違ったりもしました。


image piyo2

一言でまとめるよ

まぁ「テスト駆動開発」って単語が出てきたら「『テストコードを書く→テストOKになる最低限のコードを書く→テストOKの状態を維持したままコードの中身を整理する』を繰り返す やり方なんだな~」と お考えください。

一番上に戻るよ
スポンサーリンク
書籍画像024
書籍画像077

おまけ

■検索してみる?




書籍画像
わわわ説明術コラム
宣伝だよ
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本【Audible】
実践サイバーセキュリティ入門講座 現場に残された痕跡からハッカーの攻撃を暴け
ウォーターサーバーのキャッチコピーを100本考える方法