2012-03-30 10 views
3

私は新しいPHPプロジェクトに取り組んでいます。私はTTDが好きですが、プロジェクトのこの段階では役に立たないように思えます。新しいプロジェクトの開始時にTDDを使用する必要がありますか?

私は単体テストの作成を始めましたが、今ではアプリケーション機能のプロトタイピングがより深くなっているため、テストを書く上でコアフレームワークの一部を書き直しています。それは私がプロジェクトのアルファ/ベータ段階の段階に入るまで待たなければならないかもしれないテストを書き直すのに、もっと多くの時間を費やしているようです。

私はユニットテストを最初から書いておかなければなりませんが、私はそれらを書き直す必要があります。

答えて

3

はい、システムを理解し、固いAPIを作成する最もよい方法です。

テストをより高いレベルに移動する必要があるようです。個々のメソッドをテストしたり、機能のテストユニットをテストしたりしないでください。 The more recent buzzword is BDD or Context/Specificationしかし、私はまだ少なくともその方向に移動しようとしていないtddの開業医に会ったので、それは本当に別のものではありません。

+2

私はあなたの声明に問題を抱えています。 TDDは確かにシステムを設計する一つの方法ですが、実際には設計を釘付けにするために、適切な要件分析を行う代わりに、コード、テストケースなどを記述する前に問題のドメインを完全に理解する必要はありません。 - それでも、私は、「捨てるものを築く」こともまた啓発される可能性が高いと主張するだろう。 –

+0

@TylerEavesそれは本当です。私の経験では、TDDは、開発者が自由に使用できるドメインを適切に分析して理解するための最良の方法です。そう、はい、それはツールです、それは私の意見では非常に強力なツールですが、それはあなたが使用すべき唯一のツールではありません。 –

+1

実行された唯一の適切な要件分析は、納入されたソフトウェアから回帰的に行われました。 :( –

3

TDDを使用する場合は、TDDを使用する方がよいでしょう。

正しい選択だと思ったら、それを使用するか、将来使用するときに頭痛がでるかもしれません。

+0

TDDはすばらしいですし、物事を難しくするかもしれませんが、TDDを使うためにミッドシップを決定するとさらに悪化します。 – eandersson

1

もちろん、あなたがそれらをrewiteしようとしている、物事が変更されます。

完全かつ完全な要件分析を行うと、状況が変わります(そのキメラを追求している間に変更される可能性が高い)ので、再分析する必要があります。

しかし、あなたがダイブして書かれたコードといくつかの成果物がソートされていれば、有益な分析、テスト、そして営業部門全体が手を擦れません。

テストを実行し、実行して、次に実行する場所を確認してください。 TDDや古典的な水の落下、あなたはソフトウェアのビットを持つ前に、多くの作業を前面に、theres。

多くの使用や決してとにかく起こることはありません。

コンセプトやストーリー搭乗、神格禁止の分析が必要かもしれませんが、すべてのダイビングはダッシュボードに横たわっています。唯一のクレジットはキックです車輪が外れた時の鼻の中で、そしてサブプライムスタイルの技術的な借金危機。

1

私は、プロジェクトのこの段階で に役立つよりも妨げになるようです。

なぜですか?あなたはあなたの懸念をより客観的に把握できますか?

今、私はいくつかのアプリケーション 機能のプロトタイピングに深くだと、私は自分自身がテストを書くと一緒にコア 枠組みのこまごまとを書き換える見つけます。それは私が のように思えるかもしれませんが、多分私が待つべきテストを書き直すのにもっと多くの時間を費やしています。私がプロジェクトのアルファ/ベータ段階の多くに居るまで、 。

  • プロトタイプ作成中にTDDを使用しないでください。プロトタイプは知識を得ることです。不確実性を取り除くと、プロトタイプを捨てます。この時間をTDDでもう一度開始してください。
  • あなたの洞察力が今より向上したため、テストが変更されていますか?あるいは、テストが実装と結びついている場合(テスト対象が実装されているサービスと提供されているサービスとの関係を知っていますか?)あなたが模範的な先見性を持っていなければ、前者は避けられません。要件の変更、テストの変更。後者は匂いです..そして、どのようにして、どのようにするのかに焦点を当てることによって避けることができますか?
  • あなたの製品/アプリケーションが安定するまで待つことに伴う問題は、あなたが永遠に遅れそうになったり、テストするのが難しい設計に終わることがあります。これにより、テストが(後で)難しくなってしまいます。 テスト可能なコードベースで小さなインクリメントで作業している場合は、TDDがより簡単になります。このテストは安全ネットワークでもあり、自信を持って変更を加え、即時のフィードバックを提供するのに役立ちます。
+0

セーフティネットにプラスをプラスしているのは、人々がよく耳にすることのないテストを受けることの一部です。最初のテストか最後のテストかを問わず、テストの多くをプロセスの一部ではなく、実装の最終的な検証として考える傾向があります。 –

0
  • はい、私はそれが非常に初めからテストを書き始めることが非常に重要だと思います。 TDD(Test Driven Development)は単なる個別のクラスのテストではありません。設計段階での決定を導くはずです。

  • 最初にテストを書くと、問題をよりよく理解できます。後でそれらを書き直す可能性が高いと言っています。そうであれば、あなたのシステムをより良く理解することができます。これは良いことです。さらにテストを実装したり、既存のものを再組み立てしたりすることで、システムを再設計することができます。

  • これは時間の無駄だと感じるかもしれませんが、作業しているシステムの理解を深めるほどではありません。

  • 私が現在読んでいる書籍の中には、 "Walking Skeleton"という概念があります。非常に基本的なものであっても、TDDを使用して最小限の作業ソリューションを開発する必要があることが示唆されています。

  • もう1つ重要な点は、導入を非常に始めてから自動化することです。これは単なる単体テストではありませんが、単体テストよりも重要ではないにしても同様に展開テストです。この種のテストをプロジェクトの開始時に行うと、リリース日の近くに予期しない問題が発生することはありません。また、システムのさまざまなコンポーネントがどのように組み合わされているかをよりよく理解することができます。

関連する問題