はじめに
現在のPJでClaude Codeでの開発を検討しており、調査をしているとsuperpowersというプラグインを見つけました。superpowersの特徴の一つとしてテスト駆動開発を強制できるというものがあり、テスト駆動開発を理解できていなかったので簡単にまとめました。
テスト駆動開発について
概要
テスト駆動開発とは、テストを主軸に考えた開発手法のことです。
これまでの開発では
①実装→②動作確認→③テスト→④不具合があれば修正→⑤再テスト
のような流れで開発を行っていました。
しかし、テスト駆動開発では以下のような流れで実施します。
①テスト→②実装→③リファクタリング
①:テスト
ここではまず作成する機能のテストを作成し、実施します。もちろん作成していないので失敗します。
②:実装
ここでは、ぐちゃぐちゃになろうが、長いコードになろうが構わないので、とにかく①のテストが通るようなコードを実装します。
③:リファクタリング
②でテストが通ることを確認したので、ここでは実装したコードをリファクタリングしてぐちゃぐちゃなコードや長いコードをきれいなコードに修正します。
疑問点
なぜ失敗することがわかっているのに、先にテストを実施するのでしょうか。
回答
いくつか理由がありそうです。
・テストの正当性を保つため。
➡特に実装者がテストも実施すると、人によっては先入観が入り混じってしまう。
結果としてバグを見落としてしまう可能性があります。
・バグを早く見つけられる。
➡モジュールやユニットごとにテストを実施するため、早期にバグを発見することができます。
・仕様理解の促進
➡開発前にテストを作成するためには、仕様を細分化しなければなりません。
細分化する過程で使用について深い理解ができるというメリットがあります。
デメリット
・テスト作成時間が長くなる。
➡実装前に仕様理解が必要になるため、テストを作成するために時間が多く必要になります。
しかし、実装時に理解する必要があるものをテスト作成時に理解しておけると考えると、必要な時間が実装からテストに移行しただけとも捉えられます。
まとめ
テスト駆動開発について簡単にまとめました。今回はこれをClaude Codeのプラグインであるsuperpowersでできるため、デメリットの部分は感じずにできるのでは?と思いました。