TDD方法論(テストによる開発)は、実際にその利点を実際に見てきたように、私は深く信じています。 ソフトウェア開発を新しいレベルの品質と成熟度に引き上げますが、まだ普及していません。 機能、時間、品質のいずれかを選択するときが来ると、常に品質が低下します。 通常、テストに時間を費やしたり、リリースされた機能の量を譲歩したりすることは望ましくありません。 プロジェクトの最初からTDDテクニックを使用する予定がなかった場合、それに切り替えることは非常に困難です。
みんな聞いた
誰かがTDDを使用しない理由はたくさんありますが、「
Pragmatic Bookshelf 」シリーズの「
JUnitを使用したJavaでのプラグマティックユニットテスト 」よりも優れた選択肢が1箇所に集められています。 私は数年前にこの本を読みましたが、この本を読んだ後に責任のある開発者が一人もいないことは、単体テストが開発者の仕事の最も重要な側面の1つであると感じずにはいられないと思いました。
私が聞いた最も心配な言い訳は、「
私のコードはテストするのが難しすぎる 」という
ことです 。 これには2つの説明があります。 1つのことは、ほとんどのコードがUI(ユーザーインターフェイス)を描画し、UIテストの自動化が複雑すぎることです。 UIテストの自動化は難しい(可能ですが)ことに同意しますが、可能な限りすべてを自動化する必要があります。回帰テストについて考えてください。 UIを含む完全に自動化されたテストスイートがある場合、コードに新しい変更を加えることができ、何も破損していないことを完全に確信できます。
コードをテストするのが非常に難しい理由の2番目の説明は、設計が複雑すぎるということです。 おそらく、ロジックとUIコードは非常に密接に関連しているため、自動UIテストがない場合、この依存関係はあなたの人生を複雑にします。 これは、ユニットテストが優れたデザインの作成に役立つ場所です。 JUnitの使用は非常に簡単なので、ロジックを持つ別のレイヤーのみを選択してテストを作成できる場合は、UIが使用するすべてのロジックを自動的にテストできます。 なに? ドメインモデルがありませんか? 次に、モックオブジェクトを使用します。これには
多くのライブラリがあります。
この本をまだ読んでいない人のために、人々がユニットテストを使用しない理由の簡単な概要を説明します。
- 単体テストの作成には時間がかかりすぎます。
これが一番の言い訳です。 これは、コンピューターサイエンスがどのように教えられているかの結果のようです。 ほとんどの場合、テストはプロセス全体ではなく、最後に行われるものだと考えるように教えられています。
書籍「 Pragmatic Unit Testing 」は、「pay as you go」モデルを促進します。これにより、最初からユニットテストを記述し、コードの記述方法を記述する必要があります。急いで、すべてのユニットテストを詰め込もうとします。
何らかの方法で、最初からテストを作成しない場合、コードが意図したとおりに機能することをどのように確認しますか? 手動で実行しますか? 手動テストから少し時間をかけてJUnitテストを作成するのは賢明ではないでしょうか。 結局のところ、プロジェクトの開発中にこのコードを複数回実行する必要があります。
実際、単体テストを作成しないと、より多くの時間損失が予想されます。 デバッグに時間を費やし、何かが機能しない理由を理解しようとします。 または、遅かれ早かれコードをリファクタリングする必要があります。その後、リファクタリング後に何も機能しないことがわかります。 単体テストを作成している場合、自信の基礎があります。
- 単体テストに時間がかかりすぎる
外部の依存関係を使用するテストやユーザーインターフェイスを使用するテストは、実際に長時間機能する可能性があります。 ただし、一般的には、いくつかのレベルのテストが必要であると想定されています。 単体テストレベルはすぐに開始する必要があります。 また、顕著なレベルの時間損失なしで実行する必要のあるレベルの統合テストがある場合があります。たとえば、毎晩実行する頻度を減らしてください。 ただし、単体テストについては忘れないでください。開発プロセスの自然な部分になるほど高速でなければなりません。
- コードをテストするのは私の仕事ではありません。
開発者が完成したコードを壁に投げ込むだけでよいと判断するために、開発者がどのような状態にあるべきか想像できません。 あなたの専門の名前が「愚かなコーダー」であれば、おそらくこの言い訳はまだ機能するでしょう。 しかし、あなたの仕事は、 動作するソフトウェアを開発することです。つまり、コードが動作していると言う何らかの理由が必要です。 テスト部門がコード内のエラーを見つけるのが難しいと判断した場合、これはあなたの評判に驚くほど働きます。
- コードの動作を正確に知らないため、コードをテストできません
不信なく反応することは困難です。 コードがどのように機能するか正確にわからない場合、どのようにコードを書き始めることができますか? まず、要件を理解する必要があります。
他の言い訳はこの本にリストされています。 しかし、これらは基本的なものです。 どんな言い訳を聞きましたか?