はじめに
ここ最近案件でテストを書くことが非常に増えたため、テスト駆動開発というワードを知った。
テストを書くメリットが想像以上に多いことを知り、個人開発や小さいサービスにおいてもテストの必要性を今まで以上に感じたので、
今回テスト駆動開発についての説明とメリットについてまとめていく。
テスト駆動開発とは
テスト駆動開発(TDD)とは、ソフトウェア開発の手法の一つであり、テストを中心に開発を進めることによって品質の高いコードを生み出すことを目的とする。
TDDの項目ごとに説明していく。
1. TDDの流れ
TDDは、以下のような流れで開発を進めていく。
①テストを書く
②テストを実行し、失敗することを確認する
③コードを書き、テストを通過することを確認する
④リファクタリングを行う
この流れを「赤→緑→リファクタリング」と呼ばれ、繰り返し行うことで、コードの品質を高めていく。
2. TDDのメリット
TDDを行うことによって、以下のようなメリットがある。
バグを早期に発見しやすくなる
TDDでは、最初にテストを書き、そのテストを通過するようなコードを作成することが求められる。
このため、テストを書くことでコードの欠陥やエラーが早期に発見され、修正することができる。
コードの品質が向上する
TDDでは、コードを書く前にテストを書くため、テストケースに基づいたコードを作成することになる。
このため、要件を満たし、かつテストの結果が正しいことを保証するコードを作成することができる。
また、テストを通過するために、冗長なコードや重複したコードを排除することができ、コードの可読性や保守性を高めることが可能。
テストがあることでリファクタリングがしやすくなる
TDDでは、テストを中心にコードを書くことが求められるため、コードの変更によってテストが通らなくなることがある。
しかし、テストがあることで、リファクタリングを行った後にテストを再度実行し、コードが正常に動作していることを確認することができる。
このため、テストがあることでリファクタリングを行いやすくなる。
コードが読みやすくなる
TDDでは、コードの品質を高めることが求められるため、コードの可読性が向上する。
また、小さな単位でテストを行うため、コードが分割され、モジュール化されるため、コードの理解や保守がしやすくなる。
3. テストの書き方
TDDでテストを書くときは、以下のような点に注意が必要。
テストは小さく単純に
TDDでは、小さな単位でテストを行うことが求められる。
これは、コードの機能を小さな単位に分割し、それぞれの単位に対してテストを行うことで、コードの品質を高める。
また、小さな単位でテストを行うことで、バグの発見や修正が容易になる。したがって、テストは小さく、単純に書くことが重要。
テストは自動化する
TDDでは、テストを自動化することが求められる。
テストを自動化することで、テストを繰り返し行うことができ、手作業によるミスを防ぐことができる。
また、テストを自動化することで、テストの実行時間を短縮し、開発者が迅速にフィードバックを受けることができる。
テストは正常系と異常系を網羅する
TDDでは、テストを正常系と異常系の両方を網羅するように作成することが求められる。
正常系のテストは、コードが期待どおりに動作することを確認するために必要。
異常系のテストは、エラーや例外が発生した場合に適切に処理されることを確認するために必要。
テストは意図的に失敗するように作成する
TDDでは、最初にテストを書く際に、テストが必ず失敗するように作成することが求められる。
このようにして、テストが正しく動作していることを確認することができる。
そして、その後、テストが通るようにコードを修正することで、要件に基づいた正しいコードを作成することができる。
テストは繰り返し実行する
TDDでは、テストを繰り返し実行することが求められる。
これにより、コードの変更によってテストが通らなくなった場合に、すぐに気づくことができる。
また、テストを繰り返し実行することで、コードの品質を保つことができる。
テストは可読性が高く、意図が明確である必要がある
TDDでは、テストコードは可読性が高く、意図が明確であることが求められる。
テストコードが読みにくかったり、意図が分かりにくい場合、コードの品質が低下する恐れがある。
したがって、テストコードを書く際には、意図が明確で、テスト結果が分かりやすくなるような記述方法を選ぶことが重要。
テストはリファクタリングの際にも実行する
TDDでは、コードの品質を高めるために、リファクタリングを行うことが求められる。
リファクタリングを行う際には、テストを実行し、変更したコードが期待どおりに動作することを確認する必要がある。
また、リファクタリングの際に、テストコードも同時にリファクタリングすることが推奨されている。
4. リファクタリング
TDDでは、コードを書いた後に必ずリファクタリングを行う。
リファクタリングとは、既存のコードを改善することで、可読性や保守性を高めることを目的とする。
リファクタリングを行う際には、以下のような点に注意する必要がある。
①テストを通過することを確認する
②変更箇所が明確になるようにする
③コードが正しく動作するようにする
5. TDDの実践方法
TDDを実践する際には、以下のような方法がある。
①小さなテストから始める
②テストが失敗した場合は、テストケースを修正する
③コードを書く前にテストを書く
④テストを自動実行する仕組みを用意する
まとめ
以上が、TDDの項目ごととなる。
TDDは、テストを中心に開発を進めることによって品質の高いコードを生み出すことを目的としているため、開発者にとって非常に有益な手法。
TDDを実践することで、バグを早期に発見しやすくなるだけでなく、コードの品質や保守性が向上し、開発プロセス全体を改善することができる。
以上
参考
https://www.qbook.jp/column/20181009_713.html
https://service.shiftinc.jp/column/4654/
https://blog.aiqveone.co.jp/tdd/