2009-02-26 15 views
8

私はTDDのメリットを見ています。私は頭の中で頭を包む方法を学びたいと思っています。私はDDDについてもっと読んでいて、両方を自分のソフトウェアプロジェクトに適用したいと思っています。TDDはどのくらい適用する必要がありますか?

私はいくつかの "手書き"プログラミングブックを購入しています(実際のアプリケーションと実際の解決策を小さなスニペットで議論するものです)。 TDDを使用するのではなく、伝統的なコードファーストの方法でアプリケーションの「インフラストラクチャー」レイヤー、どちらの本も、TDDがどれほど優れているのか、ケーススタディがどのようにそれを利用するのかを話し合うために出て行く。

たとえば、ASP.NET 3.5ソーシャルネットワーキングのいずれかの書籍では、2番目の章全体で、ロッキングラッパークラス、電子メールラッパークラス、キャッシュおよびセッションラッパークラス(および関連するインターフェイス)単一の単体テスト時に別の本.NET Domain Driven Design with C#:Problem、Design、Solutionも同様です。「実」コードに触れる前に、コードベースの基本クラスとリポジトリフレームワークを作成します。

ドメインクラスの実際のロジックと機能をテストする必要があることをご理解ください。私は、あなたが書いていないコード(例えば、組み込みの.NETクラス)にのみ適用される "plumbingをテストしない"コードを考えていましたが、私が読んでいるものは、これは実際にあなたのアプリケーションと関連していて、基礎を提供するために書いた配管ではありません。

これはTDDを適用するための許容可能な方法ですか?

答えて

2

おそらく、プロジェクトをどのように構築するかについての他の要素によって決まります。

小規模な繰り返しや配信など、他のアジャイル手法に従っている場合は、開始時に多くのアーキテクチャやインフラストラクチャを使用する必要はありません。最初のいくつかの機能を実装して提供します。とにかく、コードが必要とするものが本当に分からないときに、なぜBig Design Up Frontに時間を費やすのですか?

これで、テストコードを最初にテストし、繰り返しテストを繰り返します。テストカバレッジとは、デザインを改善するためにリファクタリングすることができることを意味します。理論的には、インフラストラクチャがいつでも存在するアプリケーションのために正しく表示されます。 Ron Jeffries explains it well here。テストがなければ、おそらく停止する必要があるポイントを突き止めて、構造がどんなものであるべきかを把握することになるでしょう。それは役に立つフィーチャを構築するために費やす時間がかかります。とにかく最後のテスト。

100%確実なら、コードを書く前にデザインを正しくマップすることができます。そうすることはあなたの選択です。しかし、テストのためにプロジェクトに多くの時間を残してください。私は、誰もが "伝統的な"ウォーターフォールのプロセスと、ただちにダイビングしてコーディングすることによって、Agileの実践を文脈に入れる経験を持つために、重要な作品を少なくとも1つ作っておくべきだと思います。さもなければ、あなたは "なぜ"を知らずに "何"を知る危険があり、それはレッスンを学ぶのをより困難にする。

1

私はここで専門家ではありません。

しかし、配管部品を開発する場合は、それをテストする必要があります。
配管部品がない場合、私はTDDで、インタフェース&に対して書かれたコードを正しく理解すると、人々はMockオブジェクトを使用します。

0

私はanother questionでこれをいくつかの長さに入れました。基本的には、TDDとモックを使用する点とそのすべてのことが、より自信を深めることです。

+0

これは単体テストのポイントになると思います。 TDDのポイントは、あなたのテストでデザインを動かすことです。最初にテストを書くと、テストが可能なコードを開発できるようになり、作成を開始する前にシステマティックな方法でデザインを考える必要があるため、デザインは実際に向上します。 – tvanfosson

+0

あなたがリンクをたどっていたら、まさにそのことを言っていたと思うでしょう。 –

+0

私はTDDを厳密な仕様方法の多くとして実際見ていますが。 –

6

TDDを学ぶときは、すべてを適用してください。その後、必要なものを適用してください。

5

配管工を一から書いている場合は、その周りにテストが必要です。 linq2sqlの呼び出しを抽象化するためにいくつかのインタフェースとクラスを使用しているだけの場合は、必ずしもユニットテストを行う必要はありません。

は私よりも賢く、誰かの言葉を引用するには:

私はTDDについての宗教ではありませんよ。私は それは次の の価値があると考えています。私は最初にすべてのテストを書いていません 。それらのいくつかの少数は より簡単に書けるのが のコードです。 のコードもあります。 は価値がないからです。しかし、それらは規則に対する例外である です。私が書いたコードの大部分は 、私は最初に テストを書いています。経由

-uncleのボブ・マーティン:http://www.infoq.com/news/2009/02/spolsky-vs-uncle-bob

0

TDDは、あなたが開発任意のコードに適用されるべきです。 TDDを使用する場合は、すべてをテストする必要はありません。つまり、目標は100%カバレッジではありませんが、開発するコードに対してカバレッジがかなり高くなければなりません。たとえば、C#で自動gettor/settorsをテストする必要はありません。あなたは、言語がその言語で仕事をすることを信じることができます。しかし疑わしいときは、まずテストを書く。

0

プラットフォームを使って経験を積むには、まずコードを書くだけです。勇気があれば、プラットフォーム上のほとんどのタスクに確実に取り組むことができたら捨ててください。私はちょうど私が始めた小さなJavaプログラムでそれをやってきました。
私はいくつかの経験を積んだので、私はそれを最初に書くようになっているので、非常に高いラインカバレッジを得るために何をしなければならないかを見ることができます。

2

コードをテストして他のコードをテストしないと、どのコードにバグがありますか?

ヒント:テストされていないコードです。