質問

両方のアイデアは私に非常に似ていますが、微妙な違いやまったく同じことがあり、異なる方法で説明されています。 TDDとTest First Development / Programmingの関係は何ですか?

役に立ちましたか?

解決

駆動要因とは何かという点で違いがあります。

クラス(またはシステム-これはもちろん異なるスケールで発生する可能性があります)がどのように見えるかについて漠然とした考えを持っていますか?それがTDDです。

クラスのパブリックAPIがどうあるべきかを正確に知っていて、実装前にテストを書くだけですか?それはテストファースト開発です。

私のスタイルは、この2つが混在する傾向があります。時には、テストを記述する前にAPIがどうあるべきかが明らかです-他の場合では、テスト容易性が本当に設計を推進します。

別の言い方をすれば、TDDは「どの質問をしたいですか?」で始まります。一方、TDD以外(最初にテストするかどうか)は、「どの答えを出しますか?」で始まります

他のヒント

これらは基本的に同じものを表す異なる名前です-実際、5つの名前は、最後のDがデザインと開発の両方を表すことができるためです。

テストファーストは、特にエクストリームプログラミングのコンテキストで、テストコードリファクタリングサイクルで元々使用されていた用語です。テスト駆動開発という名前が提案され、すぐに採用されました。TFDはテスト戦略というよりも設計戦略であるという事実を強調するために、後に採用されました。

明らかに、今日、これらの2つの用語に異なる意味を持っている人もいますが、それは彼らの存在の背後にある意図ではありません。実際、私はむしろTFDという用語を廃止すべきだと思っています。

テストファーストプログラミング、テストファースト開発、テスト駆動開発、さらにはテスト駆動設計のような多くの類似した用語があります。いくつかのポイントを明確にすることが重要です:

1。テストファーストプログラミング(TFP)

テストファーストプログラミングという用語は、プログラミングのベストプラクティスです。 Kent Beckの著書「Extreme Programming Explained」:「プログラミングの前にユニットテストを作成し、すべてのテストを常に実行する」で、(造語ではないにしても)再紹介されました。そのため、テストファーストプログラミングについて話すときは、自動化された単体テストの作成について話します。開発者は、それらのテストを満たすためにコードを作成します。単体テストは積み上げられ、定期的に実行できる自動回帰テストスイートを構築します。

2。テスト駆動開発(TDD)

テスト駆動開発(TDD)は、Kent Beckの著書「Test Driven Development by Example」で紹介された方法論の名前です。これはソフトウェア開発プロセスであり、コードの前にテストを書くだけではありません。本全体が、パターン、ワークフロー、文化などによってそれを説明しようとしています。それの1つの重要な側面は、リファクタリングの強調です。

一部の人々は、テストファースト開発、テスト駆動設計、またはテスト駆動プログラミングという用語を使用しています。プログラミング。残りは一般に、コードの前にテストを書くというアイデアを指すか、誤ってテスト駆動開発またはテストファーストプログラミングを指すかのいずれかです。

TDD = TFD +リファクタリング。

TFDを実行する場合、リファクタリングを適用して、コードをより一般的かつ堅牢にします。

歴史的に正しい:テストファーストプログラミングとテスト駆動開発は、改善された名前で同じことを意味します

XP(Extreme Programming)のコンテキストでは、テストファーストプログラミングとテストドリブン開発が普及したソフトウェア開発プロセスであり、テストファーストプログラミングは、テストドリブン開発、テストドリブンデザインに名前が変更されました。テストの記述が最初にソフトウェアアーキテクチャとソフトウェアシステムの設計に非常に良い影響を与えるという認識。

このアーキテクチャとデザインへの影響は、多かれ少なかれ驚くほどの同義語の結果です:

  • テスト可能
  • 分離
  • 再利用可能
  • 独立してデプロイ可能
  • 独立して開発可能
  • 独立して合理的

ソフトウェアエンティティは、簡単に再利用、テスト、独立して展開、独立して開発、または分離されている場合は簡単に個別に推論できます。実際の実装の前にテストを記述することは、継続的な分離を保証するためのほぼ防弾の方法です。

ソフトウェアの設計とアーキテクチャに対するこの影響は、他の肯定的な効果に加えて非常に重要になったため、作成者はテストファーストプログラミングからテスト駆動開発に名前を変更する価値があると判断しました。

Test-Driven Developmentという名前は、Test-First Programmingよりもメソッドの全体的な側面に重点を置いているため、受け入れと適切な理解の観点からメソッドのマーケティングに役立ちます。

歴史的に正しいわけではありませんが便利です

歴史的には正しくありませんが、次の区別が非常に便利であることがわかりました。

テストファーストプログラミング…

…は、テスト対象コードのテストがテスト対象コードの前に記述される方法です。

テスト駆動開発…

…は、Robert C. Martinが説明したテスト駆動開発の3つの法則に従うTest-First Programmingの特定のサブセットです。

  
      
  1. 最初に失敗した単体テストを作成するまで、運用コードを作成することはできません。
  2.   
  3. 失敗するのに十分な数以上の単体テストを書くことはできず、コンパイルも失敗します。
  4.   
  5. 現在失敗している単体テストに合格するのに十分な量を超える本番コードを記述することはできません。   — Robert C. Martin、テスト駆動開発の3つの法則
  6.   

これらの3つのルールに従うと、いわゆる「レッド-グリーン-リファクタリング」サイクルに入ります。 1.失敗したテストを作成します。 2.パスします。 3.合格したら、次の失敗したテストを作成する前に容赦なくリファクタリングできます。

リファクタリングにはテストが安全に必要であることに注意してください。リファクタリングとは、重要な動作を変更せずにソースコードの構造を変更することです。しかし、誤って重要な動作を変更していないことをどのようにして知ることができますか?重要な動作を定義するものは何ですか?これは、テストが役立つ多くのことの1つです。

ところで、テストがリファクタリングの邪魔になった場合、テストは低レベルで密結合しすぎており、多すぎるモックを使用している可能性があります。

エクストリームプログラミングのその他の興味深い名前変更

  • 継続的な統合->継続的デリバリー->継続的な展開。厳密に言えば、それらは異なることを意味しますが、XPの精神では、最初から継続的な展開を意味し、人々が時流に飛び乗ったとき、統合が文字通りに行われすぎて、人々が完了する前に停止したことに気付きました。
  • 連続リファクタリング->継続的な設計改善。リファクタリングはそれ自体が目的を達成するための手段ではありませんが、より高い目的に従います。

これらはまったく同じものです。両方とも最初にテストを記述し、次にテストに合格するコードを記述します

TDD(Test Driven Development)はTest First Development / Programmingですが、TDDは永続的で反復可能な単体テスト(コードの後でも)を作成することを意味していましたが、実際にはコードの前にテストが記述されていることを意味しますテスト中です。

テスト駆動開発:例によるでは、著者の Kent Beck は、「最初にテストする」と明確に述べています。 (TF)がルールです。 TFはTDDを支配する原則です。後者はプロセスです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top