放課後のプログラミングクラブ。中学生のユウキが先生に質問しました。
「先生、プログラムを書いてると、動かなくなることがあって大変なんです。効率よくミスを減らす方法ってないんですか?」
先生は笑顔で答えました。
「それなら、TDD(Test-Driven Development)という手法が役に立つよ。日本語では『テスト駆動開発』と言うんだ。」
「テスト駆動開発って何ですか?」
「簡単に言うと、プログラムを書く前にテストを書く方法だよ。このテストが、プログラムが正しく動いているかを確認する基準になるんだ。」
「でも、プログラムを書いてないのに、どうやってテストを書くんですか?」
「いい質問だね!TDDの基本サイクルを説明しよう。」
先生はホワイトボードに次のサイクルを書きました。
「これを繰り返すんだよ。このサイクルをRed/Green/Refactorと呼ぶんだ。」
「Red/Green/Refactor?それは何ですか?」
「TDDでは、テスト結果を色で通知してくれるツールが使われることが多いんだ。たとえば、xUnitというテストツールでは、テストが失敗すると赤いバー、成功すると緑のバーが表示されるんだ。それに基づいて作業を進めるのがTDDの特徴だよ。」
「なるほど!テストが赤いバーから緑のバーに変わるのを目指してプログラムを書くんですね。」
先生は続けます。
「そうそう。これを繰り返すことで、バグが少なく、変更に強いコードが書けるんだよ。」
「普通のプログラミング方法とどう違うんですか?」
先生は比較表を黒板に書きました。
| 項目 | TDD(テスト駆動開発) | 従来の開発手法 |
|---|---|---|
| 順序 | テスト→プログラム→リファクタリング | プログラム→テスト |
| 目的 | テストを基準にコードを書く | コードを書いた後にテストを追加 |
| バグの発見 | 早い段階で発見 | 発見が遅れることが多い |
「これを見ると、TDDは最初からゴールが見えてるから安心して進められそうですね!」
「その通り。テストを最初にするからテストファーストプログラミングとも呼ばれるんだよ。TDDはプログラミングを迷路じゃなくて地図のある冒険に変えるんだ。」
A. Test
B. Target
C. Task
A. Blue/Green/Improve
B. Red/Green/Refactor
C. Test/Code/Release
A. ブログ記事のデザイン変更
B. バグが許されない金融システムの開発
C. 個人用メモ帳アプリの作成
A. Test
(解説:TDDは「Test-Driven Development」の略です。)
B. Red/Green/Refactor
(解説:TDDのサイクルでは、テストの失敗(Red)、成功(Green)、コードの改善(Refactor)が順番に行われます。)
B. バグが許されない金融システムの開発
(解説:TDDは信頼性が求められる場面で効果を発揮します。)