ドメイン駆動開発とか、テスト駆動開発とか良く聞く機会があるけれども、正直あまり理解できていないので『○○駆動開発』について浅くまとめておこうと思う
そもそも『○○駆動開発』ってどんな考え方?
駆動は動力を伝えて動かすこと。つまり、〇〇の中には「動力となるもの」が入る
例えばテスト駆動開発なら、テストを動力、つまり軸にして開発を進めていくこと。
チケット駆動開発なら、チケットを軸にして開発を進めていくこと。
色々な『〇〇駆動開発』についてみていこう
ドメイン駆動開発(DDD)
そもそもドメイン(ドメイン知識)は業務知識の事。
例えば医療ソフトのドメイン知識は医療の知識の事だし、ヤフオクなら商品カテゴリの知識とか古物の売買に関する知識とか
『ドメイン駆動』なので、ドメイン知識(業務知識)を軸にしっかり理解したうえで開発を進めていこうぜってスタンスの開発。
テスト駆動開発
コードを書く前にテストケースを書いてから始める開発手法の事
手順としては
- テストを書く
- テストを通すためのコードを最短で書く
- コードを整理して改善する(リファクタリング)
最初にテストを書いてしまうから、簡単にバグ発見できるし、コードの品質が安定する
ビヘイビア駆動開発
テスト駆動開発にとても似ているが、より行動に焦点を当てた開発手法。
テスト駆動開発は『テストを作る事』自体に焦点を当てているが、ビヘイビア駆動開発は『システムがどのように動くべきか』に焦点てテストを書いている。
これによってただ動くだけではなくて、ユーザーが求めているような振る舞いができるような開発。
チケット駆動開発
作業をタスクに分割して、そのチケットに担当者を割り当てて開発するようなスタイル
アジャイル開発との親和性が高く、色々な会社で当たり前のように使われているイメージがある。
コンポーネント駆動開発
Reactみたいな感じでコンポーネントを組み合わせて作っていくような開発スタイル。
メンテナンスも簡単になるし、再利用性が上がる事から大規模開発に向いている
ユースケース駆動開発
システムの機能の要件を明確にするためにユースケース(使われ方)を考えた上で動作を定義して開発していくような開発手法。
ユーザー視点でのコード開発ができる
データ駆動開発
経験だったり、勘だけではなく、データを基に意思決定をして、製品の品質だったり改善をする開発手法。
ユーザーの行動をデータによって客観的に把握するところで製品の改善点を見つけたりできる
機能駆動開発
小さな機能ごとに設計から開発までを短期間で繰り返すことで開発を進めていく手法
アジャイル開発的な感じ