2008-08-07 25 views
48

多くの人がコードを書く前にコードのテストを書くことについて話します。このプラクティスは、Test Driven DevelopmentまたはTDDと一般に知られています。このようにソフトウェアを書くことで得られるメリットは何ですか?この練習はどのように始めるのですか?テスト駆動開発を練習する必要があります。どうすればいいですか?

+0

すでに質問されているのと同じ質問に対する私の回答をご覧ください。 [この質問の詳細な回答](http://stackoverflow.com/questions/62625/how-do-you-know-what-to-test-when-writing-unit-tests#69259) – eroijen

+0

私は遅刻していますここでは、私は私のバイトを入れたいです。 TDDの練習に最適なアプローチは、Katasを使用しています。テストで良いkatasがあります:https://github.com/garora/TDD-Katas –

答えて

30

多くの利点があります。

  • あなたは上の即時のフィードバックを得ますあなたのコードが動作していれば、より速くバグを見つけることができます。
  • テストが赤から緑に変わるのを見ると、回帰テストと作業コードの両方があることがわかります
  • リファクタリングの既存コード、つまり、何が壊れているか心配することなくコードをクリーンアップすることができます。
  • 終わりには、自動化されたが、あなたのコードベースを開始するための最良の方法は、ちょうど開始する

固体であるという大きな自信を与えるために構築する時に実行することができ回帰テストスイートを持っています。テスト駆動開発については、すべてbook by Kent Beckがあります。新しいコードから始めるだけで、古いコードについて心配する必要はありません。コードをリファクタリングする必要があると感じたら、既存の機能のテストを作成し、それをリファクタリングし、テストが緑色であることを確認してください。また、this great articleと読んでください。

+2

最後の記事へのリンク(ユニットテストのヒント)の有効期限が切れました。ここに新しい記事へのリンクがあります:http://devver.wordpress.com/2008/07/07/tips-for-unit-testing/ –

3

利益の一部はrecently been coveredとなりますが、あまりにも多くの未知数がなくリスクが低い小さなエンタープライズシステムではどこから始めるのですか?テストフレームワーク(NUnitなど)がわからない場合は、そのことを覚えて始めてください。そうでなければ私の意見では、あなたの最初のテスト:)

+0

リンクが壊れています! –

0

を書き込むことによって開始し、単一最大のものは、それは明らかにあなたのコードは、それがすることになっているものをしなければあなたが見ることを可能にするということです。これは明白なように見えるかもしれないが、私が過去に判明しているとして、道に迷って、あなたのオリジナルの目標の実行に超簡単です:P

2

  1. はあなたがあなたのコードが何をしたい正確に何を把握
  2. あなたのコードを区分する方法を見つけ出すメリット
  3. あなたが道を、それが行動することになって方法を知っていると、リファクタリングで何かが壊れた場合
  4. あなたのコードが何をする予定であるかを常に確認する習慣を身につけます

入門

ちょうどいいです。あなたがやりたいことのためのテストケースを作成し、テストに合格するコードを記述します。テストに合格した場合は、コードが常に失敗するようなケースに移行することができます(2 + 2は5にはならないなど)。

したら、すべてのテストの合格は、あなたがやりたいものは何でもするためにあなたの実際のビジネス・ロジックを記述します。

あなたがゼロからスタートしている場合は、あなたが使いやすい良いテストスイートを見つけることを確認してください。 PHPが好きなので、PHPUnitやSimpleTestがうまく動作します。ほとんどの一般的な言語には、テストの構築と自動化に役立つxUnitテストスイートがいくつかあります。

+0

ところで、 "あなたのコードをコンパイルする"ことは、あなたを非常に良いアーキテクチャに導きます "無料で"。コードを分割してテストすると、より良いアーキテクチャーになります。あなたがソフトウェアアーキテクトとしての経験が少しあれば、かなり無料です。 – daitangio

0

アジャイルまたは滝の環境で作業している可能性があります。たぶんあなたは何年もの努力によって戦闘テストされた、またはあなた自身のスタートアップを始めたばかりの、明確に定義された手続きを持っているかもしれません。あなたのチームの一部は作成中にループの外に保たれている

  • :失敗した配信のための以下の苦痛、問題、または原因の、より多くのではない場合どんなに状況が何であったか、あなたはおそらく、少なくとも一方直面していません要件、仕様書、またはユーザーストーリー
  • のほとんどは、すべて、あなたのテストのマニュアルはない、またはあなたがテストを自動化しているにもかかわらず、すべての
  • でのテストを持っていない場合、彼らは本当の問題
  • が検出されません。
  • 自動テストは、プロジェクトに実際の価値を提供するには遅すぎるときに書かれて実行されます。
  • チームは、テスト、開発、および機能解析部門間で分割し、彼らはそのせいで恐怖の
  • 同期していしばしばコードをリファクタリングすることができないされているテストに時間を捧げより緊急の何かが常にあります何かがメンテナンスコストが
  • 高すぎる
  • 市場投入までの時間が大きすぎる
  • クライアントがどの配信されたことは、彼らはドキュメントが最新のものになることはありません
  • を求めたものであることを感じていないです分割されます
  • 01結果が不明であるため、あなたが生産に展開することを恐れている
  • あなたは頻繁に把握しようと、あまりにも多くの時間を費やしている回帰テストが
  • チームを実行するには時間がかかりすぎるため、生産に展開することはできませんどのようないくつかのメソッドやクラスがあります

テスト駆動型開発では、これらの問題のすべてが魔法のように解決されるわけではありません。代わりに、私たちは解決策に向かって道を踏み出します。銀色の弾丸はありませんが、非常に多くのレベルで違いを生むことができる開発練習が1つあれば、それはTDDです。テスト駆動型開発は市場投入までの時間を短縮し、リファクタリングを容易にし、直接的なメリットの上で、TDDは他の多くのプラクティス(継続的な配信の1つである)の前提条件です。 TDDを適用することで、より良いデザイン、丁寧なコード、市場投入までの時間の短縮、最新のドキュメンテーション、堅牢なテストカバレッジなどの成果が得られます。

関連する問題