はじめに
エンジニアをしていると、〇〇駆動開発や〇〇駆動設計という言葉を聞く機会があるかと思います。
ただ、この間友達と話していて、「駆動開発」の意味が分かってなくてそれぞれの手法が理解しづらいんだろうなという人がいたため、
「駆動」とはなにかを共有します。
駆動とは
「駆動」とは、「動力を伝えて動かすこと」です。(「デジタル大辞泉」引用)
例えば、車には前輪駆動と後輪駆動があります。
後輪駆動は、後輪が動力となり、その動力が元となって前輪も回り前に進みます。
また、駆動は英語で「driven」です。
drivenは、driveの過去分詞で、動かす、走らせるといった意味があります。
先程の例で行くと、後輪駆動は、後輪が回ることによって車を走らせるという意味になります。
駆動開発とは
「駆動」が走らせるという意味なので、「〇〇駆動開発」は開発を〇〇によって走らせるということになります。
つまり、
開発の軸として〇〇があり、それを元に開発が進む
ということです。
テスト駆動開発(駆動開発の例)
テスト駆動開発(TestDriven Development)は、テストによって駆動します。
テストを書いて、そのテストが通るようにし、その後リファクタリングという流れになります。
勘違いされがちですが、テストを書けばテスト駆動開発というわけではないですし、
テスト駆動開発をすればバグが0になるわけではないです。
また、テスト駆動開発を行っても製品が完成後はテストが必要です。
じゃあテスト駆動開発とは何なのか?
また、これを理解しやすくするために、従来の開発は何に駆動しているかを明確化します。
従来の開発は、「実装→テスト→完成」となるかと思います。
実装によって、開発が進むので、これは「実装駆動開発」と呼べるのではないでしょうか?
テスト駆動開発: 「テスト→実装→(テスト)→完成」
実装駆動開発: 「実装→テスト→完成」
余談
最近、ウォーターフォールといいながら納期によって開発ボリュームが左右されることがあったり、
要件が追加されることがあってなんか気持ち悪いと思っていました。
ただ、ウォーターフォールといいながらやっていることは「納期駆動開発」なんだなと思うと、
なんとなく腑に落ちました。
ちなみにアンサイクロペディアには、締め切り駆動開発というものがあるようです。