コードを削除するとバグが修正されることを証明するテストを作成する必要がありますか?


14

バグを修正するには、コードのセクションを削除する必要がある場合があります。TDDの純粋主義者は、失敗したテストを記述し、コードを削除して、テストの合格を監視することを推奨します(と思います)。

さて、いくつかのコードが削除されたと断言するテストがあるのは本当に奇妙に思えます。確かに、誰もソース管理を掘り下げてそのコードを元に戻すことはないでしょうが、それだけの価値はありますか?それが価値がある場合、追加れたコードのテストを書くよりも価値が低いように見えますよね?


8
私は、任意の回帰テストは関係なく、バグが修正されたかの、便利だと思う
イスマイル・バダウィ

1
テストは、コードが削除されたことをアサートしません-テストは、バグが修正されたことをアサートします
...-user253751

回答:


50

あなたはそれを間違った方法で見ています。このテストでは、コードが削除されたことをアサートしませ。テスト特定の機能をアサートします。

このテストでは、パスするために必要なコードの量は考慮されず、一部のコードが削除されたことも認識されません。このようなテストを行うことの価値は、バグのために作成する他のテストとまったく同じです。テストに合格すると、バグがないことを確信でき、ビルドプロセスへのテストの統合により、バグが確実に発生しますほとんどの場合、再導入されません。

TDDの観点からそれを見るもう1つの方法は次のとおりです。コードを削除するとバグが修正され、テストを書くかどうか疑問に思うとき TDDは間違っています。バグの作業を開始したら、まず失敗してバグの存在を確認するテストを作成する必要があります。その後のみ、実際のバグ(コードの削除が必要かどうか)を修正し、テストに合格します。あなたが尋ねている質問は、そのようには生じません。


3
+1ですが、次の状況を想像できます:削除されたコードには、問題ドメインを正しく理解していない誰かが追加した不合理な機能が含まれていました。現在、別の開発者はコードレビュー中に、全体が本当にナンセンスであり、コードが削除されることを確認しています。そのようなナンセンスな動作について多くのテストを行うと、テストスイートが肥大化する可能性があります。
Doc Brown

2
明らかに、削除された機能は何らかの入力/出力の誤りを処理しました。明らかに、さらに誰かが同じように問題を誤解しているかもしれません。テストスイートが肥大化するのを恐れるなら、TDDはあなたには向かないと思います。とにかくテストスーツの膨張とは何ですか?
ドルス

3
@DocBrown:TDDを実行している場合、その不条理な機能を必要とするテストが必要です。そうでなければ、そもそもそのコードを書くことさえ許可されていません。テストに合格するためには、絶対的な最小限のコードを書くことしか許可されていません。そのようなテストなければ、コードは最初から書かれていてはならず、削除するだけで済みます。その不条理な振る舞いを強制するテストある場合、そのテストを削除する必要があります。これで、前に説明したのと同じケースになります。テストがなくなって、コードを削除します。
ヨルグWミットタグ

どちらの場合も、テストスイートにテストを追加することはありません。2番目の場合、削除することもあります。ただし、テストが実際に理にかなっていることが判明した場合、結局のところ、機能はそれほど馬鹿げたものではありませんでした。
ヨルグWミットタグ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.