私はそれをやっていますか?そうでない場合は、正確に変更する必要があります
それはちょうどその簡単な説明から言うのは難しいのですが、私はありません、あなたがしている、と思われるではない右のそれをやって。注:あなたがしていることは機能しない、または何らかの形で悪いと言っているわけではありませんが、TDDをしているわけではありません。中央の「D」は「駆動」を意味し、テストはすべて、開発プロセス、コード、設計、アーキテクチャ、すべてを駆動します。
テストは、何を書くべきか、いつ書くべきか、次に書くべきもの、いつ書くのをやめるかを教えてくれます。彼らはデザインとアーキテクチャを教えてくれます。(設計とアーキテクチャは、リファクタリングを通じてコードから生まれます。)TDDはテストに関するものではありません。最初にテストを書くことすら必要ではありません。TDDはテストにあなたを駆り立てさせることです。
実際にコードを書き留めるのか、完全に肉付けするのかは問題ではありません。頭の中にコードのスケルトンを書き、そのコードのテストを書きます。それはTDDではありません。
その習慣を手放すのは難しいです。本当に、本当に難しい。経験豊富なプログラマーにとっては特に難しいようです。
Keith Braithwaiteは、TDD As As You Meant Itと呼ぶエクササイズを作成しました。これは一連のルールで構成されており(ボブ・マーティンおじさんのTDDの3つのルールに基づいていますが、より厳密です)、厳密に従う必要があり、TDDをより厳密に適用するように設計されています。ペアプログラミング(ペアがルールを破っていないことを確認できるようにする)とインストラクターが最適です。
ルールは次のとおりです。
- 解決策の方向を指していると思われる、できる限り小さいテストを1つだけ正確に記述します
- 失敗するのを見てください。コンパイルの失敗は失敗としてカウントされます
- testメソッドでできる限り少ない実装コードを記述して、(1)からテストをパスします。
- 重複を除去するためにリファクタリングし、そうでなければ設計を改善するために必要に応じて。これらの動きの使用については厳しくしてください:
- 新しいメソッドが必要です。リファクタリングの時間まで待機してから、次のいずれかを実行して、新しい(テスト以外の)メソッドを作成します。
- 推奨:テストクラスで新しいメソッドを作成するために、(3)に従って作成された実装コードでメソッドを抽出する、または
- 必要な場合:(3)に従って実装コードを既存の実装メソッドに移動する
- 新しいクラスが必要です。リファクタリング時間まで待機してから、テスト以外のクラスを作成して、Moveメソッドの宛先を提供し、他の理由はありません
- Moveメソッドを実行することにより、実装クラスにメソッドを設定します。他の方法は使用しません。
通常、これは、「デザインがどうあるべきかを頭の中で想像し、そのデザインを強制するためのテストを書いて、書く前に既に構想したデザインを実装する」というよくある「擬似TDD法」とは非常に異なるデザインにつながりますテスト」。
疑似TDDを使用Board
した三目並べゲームのようなものを実装する場合、通常、3 x 3のInteger
sの配列を持つクラスを含む非常によく似たデザインになります。そして、プログラマの少なくとも一部は、「必要になることを知っている」または「テストを書くために何かを必要とする」ため、テストなしでこのクラスを実際に作成します。ただし、その同じグループにTDDを適用するように強制すると、多くの場合、非常にさまざまな非常に異なるデザインになり、多くの場合、リモートに類似したものも使用しませんBoard
。
書いたテストで十分かどうかを確認する方法はありますか?
すべてのビジネス要件をカバーする場合。テストは、システム要件のエンコードです。
1 + 1 = 2に相当する可能性のある非常に単純な機能のテストを記述するのは良い習慣ですか、それとも単なるやりすぎですか?
繰り返しになりますが、機能をテストすることはありません。テスト用の機能を作成します。テストに合格するための機能が簡単であることが判明した場合、それは素晴らしいことです!システム要件を満たしただけで、そのために一生懸命働く必要さえありませんでした!
機能を変更し、それに応じて要件が変更されたかどうかをテストするのは良いですか?
いいえ。その逆です。要件が変更された場合、その要件に対応するテストを変更し、失敗するのを確認してから、コードを変更して合格させます。テストは常に最初に行われます。
これをするのは難しいです。ある種の「筋肉の記憶」を築き、締め切りが迫り、プレッシャーにさらされている場合、それについて考える必要さえないためには、数十、おそらく数百時間の慎重な練習が必要です。 、そしてこれを行うことは、最も速くて最も自然な作業方法になります。