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

Test Driven Development

pointこの用語のポイント

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

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

point日本では「テスト駆動開発」と表現されるのが一般的だよ

スポンサーリンク

簡単に書くよ

Test Driven Development(読:テスト・ドリブン・デベロップメント)とは

「テスト駆動開発」のこと。
用語の中身としては

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

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


image piyo

詳しく書くよ

最初に留意事項です。
テスト駆動開発」や「TDD」と言われて「あぁ、アレのことね」と分かる方は最後まで読む必要ありません。
テスト駆動開発の英語表現が「Test Driven Development」です。

Test Driven Development(テスト・ドリブン・デベロップメント)

テスト駆動開発を「TDD」と表現することがあります。
この「TDD」が「Test Driven Development」の省略表現なのです。

Test Driven Development(テスト・ドリブン・デベロップメント)2

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

以上が「テスト駆動開発(TDD)」の意味を知っている人向けの説明です。

「テスト駆動開発(TDD)って何?美味しいの?」な人は、このまま読み進めてください。
用語の中身について説明します。

ちょっと休憩2

それでは、いってみましょう。
まずは予備知識として

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


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

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

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


です。

Test Driven Development(テスト・ドリブン・デベロップメント)3

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

Test Driven Development(テスト・ドリブン・デベロップメント)4

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

Test Driven Development(テスト・ドリブン・デベロップメント)5

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

Test Driven Development(テスト・ドリブン・デベロップメント)6

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

Test Driven Development(テスト・ドリブン・デベロップメント)7

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

Test Driven Development(テスト・ドリブン・デベロップメント)8

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

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

Test Driven Development(テスト・ドリブン・デベロップメント)9

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

Test Driven Development(テスト・ドリブン・デベロップメント)10

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

例えば、そうですね。

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

Test Driven Development(テスト・ドリブン・デベロップメント)11

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

Test Driven Development(テスト・ドリブン・デベロップメント)12

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

Test Driven Development(テスト・ドリブン・デベロップメント)13

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

Test Driven Development(テスト・ドリブン・デベロップメント)14

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

Test Driven Development(テスト・ドリブン・デベロップメント)15

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

Test Driven Development(テスト・ドリブン・デベロップメント)16

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

Test Driven Development(テスト・ドリブン・デベロップメント)17

このような

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

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

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

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

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


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

Test Driven Development(テスト・ドリブン・デベロップメント)18

以上を踏まえて

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

が「Test Driven Development」です。
専門用語を使って説明すると

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

ですかね。
上でも書きましたが、一般的には「テスト駆動開発」や「TDD」と表現されます。
※本ページでも以降は「テスト駆動開発」と表現します。

例えば、そうですね。

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

Test Driven Development(テスト・ドリブン・デベロップメント)19

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

Test Driven Development(テスト・ドリブン・デベロップメント)20

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

Test Driven Development(テスト・ドリブン・デベロップメント)21

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

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

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

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

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

Test Driven Development(テスト・ドリブン・デベロップメント)22

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

Test Driven Development(テスト・ドリブン・デベロップメント)23

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

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

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

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

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

Test Driven Development(テスト・ドリブン・デベロップメント)24

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

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

Test Driven Development(テスト・ドリブン・デベロップメント)25

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

Test Driven Development(テスト・ドリブン・デベロップメント)26

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

Test Driven Development(テスト・ドリブン・デベロップメント)27

このような

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


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

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

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

Test Driven Development(テスト・ドリブン・デベロップメント)28

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

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


image piyo2

一言でまとめるよ

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

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

おまけ

■訳してみるよ

「test(テスト)」はカタカナで「テスト」で分かりますよね。
「driven(ドリブン)」の意味は「~に突き動かされた」とかです。
「development(デベロップメント)」の意味は「開発」とかです。
何となく くっつけると

テストに突き動かされた開発

となります。




書籍画像
わわわ説明術コラム
宣伝だよ
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本
つくって、壊して、直して学ぶ Git&GitHub 入門
サイバーセキュリティお嬢様と学ぶ 情報セキュリティの基本