製品グループでは、単体テストのコードカバレッジを50〜70%、単体テストとテスト自動化の組み合わせで90%以上をカバーしています。単体テストの作成に費やされる典型的な時間は、3〜4日間のヘッドダウンコーディングが必要なすべての機能に対して約1日です。しかし、それは多くの要因によって異なります。
99%のコードカバレッジは素晴らしいです。単体テストは素晴らしいです。しかし、単体テストだけで99%のコードカバレッジは得られますか?単体テストだけで多くのカバレッジを得ることができるとは信じ難いです。
クラスのテストの作成に3日間を費やした場合、それ以外の場合は実装に1日かかりました。なぜこれほど時間がかかったのか、コードを共有したのかについては詳しく説明しませんでした。推測から、私はあなたが実際にあなたのクラスのための本当のユニットテストを書いているのではなく、実際にテスト自動化を書いていたと推測しています。そして、実際には何の問題もありません-2つの異なるタイプのテストの違いを認識している限り。
しかし、あなたは3日間のテストライティングは単一のクラスのためだけだったと言いました。クラス自体が単体テスト用に設計されていない可能性があります。クラスはUIを実装していますか?ネットワーキング?ファイルI / O?その場合、Javaランタイムをテストするために、ランタイムと対話するビジネスロジックよりも多くのコードを書くことになっていた可能性があります。
TDDは、インターフェイスおよび依存関係へのインターフェイスの観点から考えさせます。単一の機能のUI、ネットワーク、およびファイル/ ioを実装する単一のクラスは、複数のクラスに分けて提供する方がよい場合があります-ネットワーク用、ファイル/ io用、UIをモデルビューアーコントローラーデザインに分割します。次に、依存関係の単純なモックオブジェクトを使用して、それぞれに適切なテストを実装できます。もちろん、これにはすべて時間がかかります。したがって、このタイプの設計では、コーディングに1日、テストの作成に3日ではなく、3日間のコーディングと1日間のテストの作成が必要になる場合があります。ただし、コードの保守性と再利用性ははるかに向上します。