コーディングを開始する前にテストケースを作成する必要があるとよく言われるのはなぜですか?
このアドバイスに耳を傾けない場合、その長所と短所は何ですか?
さらに、そのアドバイスはブラックボックステストまたはホワイトボックステスト、あるいはその両方に関するものですか?
実装前にテストを書くことは、テスト駆動開発(TDD)の背後にある中心的なアイデアの1つです。手順は次のとおりです。
この手順は、機能を実装する場合でも、バグを修正する場合でも同じです。多くの場合、「Red-Green-Refactor」と呼ばれます(赤=テスト失敗、緑=テスト合格)。この方法の利点は数多くあります。
今、不利な点について:
コーディングを開始する前にテストケースを作成する必要があるとよく言われるのはなぜですか?
これは テスト駆動開発 の基本原則ですが、一般的な「ベストプラクティス」ではありません。誰もがTDDを望んでいるわけではなく、TDDを行う必要があるわけではありません。
このアドバイスに耳を傾けない場合、その長所と短所は何ですか?
利点は、コードを記述する前にテストの観点からコードについて考えることを強いられることです。これには2つの主な利点があります。特別なケースや境界条件を忘れる可能性が低く、コードをテスト可能にする必要があります。したがって、モジュール式です。もう1つの重要な利点:コードが思ったとおりに機能していることがいつでもわかります。
不利な点は、低レベルの詳細について考えることを奨励し、重要な設計の問題を見落とす可能性があることです(ただし、コーディングを開始しただけでも同じことが起こります)。また、最も簡単にテストできる設計は必ずしも最良ではありません(ただし、アドホックコーディングから成長したものよりもはるかに優れています)。
もちろん、TDDがこれらすべての単体テストのコストを書くよりも時間を節約できるかどうかという問題があります。その支持者たちは確かにそう主張している。
さらに、そのアドバイスはブラックボックステストまたはホワイトボックステスト、あるいはその両方に関するものですか?
通常、TDDはホワイトボックステストである nit tests のみを扱います。 統合テスト は追加で実行する必要があります。
私が test first を書いているとき、それは私のコードが正しく機能していることを確認することではなく、実際には ブラックボックス や ホワイトボックス)の問題ではありません。 または 品質保証 に関連するもの、そしてここに理由があります...
長年にわたり、優れたテスターが必要であることを経営陣に説得するためのスキルを実践および磨いてきました 1 、 2 、 そして、これは私のコードが私がそれについて多くを考える必要なしに意図したように機能することを保証するのに十分です。
私が最初にテストを好む主な理由は、コードを設計して使いやすくする方法を理解するのに役立ちます。自分のモジュールが他のモジュールでどのように使用されるかを頭の中で想像するのは得意ではないので、それを過度に複雑にすることができます。
これは、自分でモジュールをコーディングする場合でも、他の誰かのためにモジュールをコーディングする場合でも、問題です。不便なインターフェイスを自分で使用するのと同様に、他のプログラマにその使用法を説明する必要があります。
「テストファースト」のアプローチは、その苦痛から私を救います。この方法またはその方法で設計された場合に私のモジュールがどのように使用されるかを即座に確認するために想像力を必要とせず、より便利なものを簡単に選択できるようにします。
誰かのためにモジュールをコーディングするとき、それはまた、それを使用する方法を痛々しく説明する必要から私を救います。
ご覧のとおり、
this test
のコードは、そのモジュールの使用方法を示しています。実行すると、期待される結果もわかります。this test
に示されている以外の方法を使用するのは誤りです。さあ、離れて面白いことをさせてください。
[〜#〜] tdd [〜#〜] / [〜#〜] bdd [〜#〜] であり、design方法論、テスト方法論ではありません。
TDD/BDDの場合、アイデアは、APIを作成する前にAPIの使用を排除し、テストで進化させることです。
この観点から見ると、ポイントは、存在しないAPI呼び出しのテスト、または存在しないAPI動作のテストを記述して実装することです。
ブラックボックス/ホワイトボックスのテストと同様に、これもtestingではなく、design。
コーディングを開始する前にテストケースを作成する必要があるとよく言われるのはなぜですか?
これが言われる理由はいくつかあります。
このアドバイスに耳を傾けない場合、その長所と短所は何ですか?
長所
短所
さらに、そのアドバイスはブラックボックステストまたはホワイトボックステスト、あるいはその両方に関するものですか?
場合によります。ほとんどの単体テストは、メソッドまたは関数の入力と出力を検査するという点で、よりブラックボックスになる傾向があります。ただし、実装に関する情報が必要になるため、モックまたはスタブがホワイトボックステストのようにする必要がある場合があります。開発者は通常、テストを記述しているため、TDDの目的にとっては問題になる可能性があります。