2009-10-08 3 views
8

TDDを評価して、それが不可欠だと思うが、私のソースコードを書いた後で常にテストを書く。私は決して最初にテストを書いてから、テストに合格するためにソースを得ることはできません。だから私はいつもプロセスを逆転させます。これは私の面で悪い習慣ですか?私のように逆にそれをすることの短所は何ですか?テストドリブン開発について逆に

+0

@jrob - あなたが低い評価で落胆した場合は、すべてを考慮する必要はありません。たぶん彼は厳しい質問をします。 –

+0

@ jrob - 私は、一つの答え、ありがとうと認めて、もっと警戒を深めようとします。 –

+1

これを実行すると、TDDに移行するのに適していることがわかりました。最初はテストを重視しているとは思えませんが、このようにしてテストを書くことで成熟するにつれ、すぐにテストを書いて利益を得るようになります。 –

答えて

14

あなたが最初にテストを書くのでなければ、おそらくTDDではありません。 TDDの場合、通常はテストを書いて失敗するのを見てから、テストをパスするように実装します。

ワークフローを上回る利点があります:あなたのテストが失敗することができます

  • !単純に失敗しないテストを作成するのは簡単です。 Ericが指摘しているように、テストを最初に書いておらず、それが失敗するのを見た場合、実際に実装した機能を実際にテストしていることをどのように知っていますか?
  • あなたのコードは確かにテスト可能です。テスト可能なテクニックに従うことを確信していますが、最初の開発をテストすることで、コードが完全にテスト可能であることが保証されます。
  • 解決策を逆さまにします。これは議論の余地があるものですが、TDDでは「実装の詳細」ではなく「必要なもの」について考えるようになります。最初にテストを作成することで、テストで一般的なアーキテクチャ/クラス構造を作成し、実装の詳細を取得します。

あなたはこれらのポイントのすべてのリスクを軽減することができます。そのため、あなたは自分のやり方を変えずにテストに切り替えることができます。

+0

+1 http://misko.hevery.com/2009/09/02/it-is-not-about-writing-tests-its-about-writing-stories/は、このトピックについての優れた詳細なエッセイです。 –

1

デザインはテスト上の考慮事項ですか?そうであれば、テストによって開発が促進されました。それは起こるはずのものです。

テストを書くことは、テストが開発を促進することを絶対に保証します。そして、リファクタリングを制限する傾向があります。

最初にすべてのコードを書き、次にリファクタリングする場合は、テストを使用して開発を進めています(これは良い)。しかし、すべてのコードをまず最初にリファクタリングするだけで時間を無駄にする可能性があります(これはあまり良くありません)。TDDを使用すると、これが容易になります。コードの前にテストを書くことで、リファクタリングをいくつか節約することで開発時間も短縮されます。

+2

TDDはリファクタリングを制限していますか? TDDは私の経験でリファクタリングを可能にします。 – EricSchaefer

+0

あなたはTD * Design *とTD * Development *をかなり緩やかに混合していますが、TDDの群衆と一緒にいるようです。 – peterchen

+0

TD開発/ is/TD設計が正しく行われている場合。 – EricSchaefer

5

後でテストを書く場合、実際に開発/設計を推進していますか?私はそうは思わないだろう。

スティーブン・ロビ​​ンズの答えを展開する:あなたが合格する前にテストが失敗しない場合は、あなたはそれが正しいことをテストしていることをどのように知っていますか

+0

しかし、ソースはしばしばシンプルではないので、テストは実際には失敗するので、私の計算では自分の計算が私のアルゴリズム内にあると思っていたことが私のテストが実際に期待したものではないことを示しています。満足しています –

+1

なぜ機能を書く前にあなたの期待を指定しないのですか? – EricSchaefer

+0

それは、私があなたと仲間と話し合って、ここで自分を説得しようとしていることです –

1

あなたのソフトウェアの設計とコーディングについて考えてみると、私の本を進める良い方法は何かを忘れていないことを確認するためのテストを追加することです。

あなたのコードは、ソフトウェア設計とテストの両方の観点から考えるとよいでしょう。私はコードを開発してparrallelでテストする傾向があります。あなたのテストではなく、テストを実行するコードになる傾向があるため、 'テストを書く'というパラダイムには決して従いません。

TDDのリスクは設計段階が省かれていることです。可能な限りあらゆる方法でコードを壊そうとするテストを構築する場合は、テストで発生する問題を修正して安定したコードを取得します。私は、プロトタイプの品質であったTDD経由で書かれたコードをリファクタリングしなければなりませんでした。良いコードを提供する方法ではありません。他の人が言及している多くの良い点がありますが、私は2000年以来、(適切に)TDDを行ってきた

0

が、非常に重要であり、他の記述から欠落している一点:

TDDはあなたを作りますシンプルなコードを書く!

TDDを実行すると、テストを作成し、テストに合格するための最も簡単なコードを書くことができます。それを逆にすると、必要以上に複雑で意図しない副作用があるコードを書くことがよくあります。

TDDは非常に難しい分野ですが、外科医が手術前に滅菌する外科医に匹敵するため、重要です。滅菌しないと、患者に感染する危険性があります。テストを最初に書かなければ、技術的な負債でコードに感染する危険性があります。

関連する問題