テストは時間の無駄です.私のプログラムはきっと大丈夫です.

2380 ワード

テスト駆動開発(TDD)に関する本や文章は何百もあるが、テストの強さを感じたことがない人が多い.
テストプログラムを書きたくないのは、以下の理由にほかならない.
  • は時間がかかりすぎます.
  • は価値がありません.
  • 私は怠け者です.
  • どうすればいいか分かりません.
  • 私のプログラムが使いやすいことを知っています.一度実行したことがありますが、問題はありません.
  • 私はスーパーマンで、私は間違いを犯したことがありません.

  • あなたの答えが6でない限り.(もしそうなら、うらやましいです)、そうでなければ、読み続けるべきです.

    簡単な例から始めましょう。Emailアドレスチェックプログラムを書くと言ってください。


    正規表現を使用したり、各文字の比較を手作業で実現したりして、このタスクを完了することができます.
    コードが有効かどうかを検証したいです.どうするの?異なる値を手動で入力して、要求に合っているかどうかを検証することができます.その結果、次のようなものをテストしました.
    foo
    foo@bar
    [email protected]
    ...

    チェックアルゴリズムを変更/調整するとどうなりますか?前のすべてのプロセスを繰り返し、各値をもう一度入力して、検査の結果を見る必要があります.コンピューターに自動的にチェックしてもらえばもっといいのではないでしょうか.
    テストプロセスを自動化することで、プログラムをいつでも何度もテストすることができます.これは後で多くの時間を節約するだけでなく、プログラムが間違っている可能性があると感じるたびに、テストプログラムを実行して、テスト結果を見ればいいので、自信を高めることができます.

    XML解析器のようなより複雑なプログラムを作成していることを考えてみましょう。


    解析器を作成してテストしないわけにはいきません問題は、どのようにテストしますか?通常、XMLテンプレートファイルを作成し、解析器に入力し、解析の結果を手動でチェックします.解析器が要求通りに所望の結果を出力しているのを見たら、タスクを完了したと確信し、解析器は大丈夫です.
    問題はバグを見つけたらコードを修正して、使いやすいかどうかを確認する必要があります.しかし、私たちのプログラマーは怠け者で、私たちが出会ったこのBugだけをテストし、解析器の他の部分をテストしたことはほとんどありません.これはどんな問題が発生しますか?何かを壊さなかったことを確認できますか?

    ユニットテストプログラムを書いたら、このワークフローはどうなりますか?


    まず、プログラムをテストしたことがあります.前に、関数ごとに手動でテストし、出力結果を手動でチェックしなければなりません.もしこのようなことを一度しかしなければならないならば、それは何もありませんが、何か間違いがあったら、あなたは何度もこのことを繰り返したくありません.同じことを繰り返して、特につまらないことをするのが好きな人はいません.
    もう1つの場合、あなたの解析器の各機能に自動テストプログラムを書いています.この例では、プログラムをテストしたことがあります.このプロセスにはよく知られていません.手作業の検査をassertionsに変更する必要があります.プログラムを自動的にテストします.

    Bugが現れると、大きな変化が起こります。


    自動化テストがない場合は、Bugを修正するときに他のエラーが導入されないように、すべてのものを手動でチェックする必要があります.いくつかのバグが現れると、あなたはとてもいらいらして、他の部分のコードをチェックしないで、あなたのこのバグだけに注目し始めます.しかし、プログラムのために自動化テストを書いた場合、ボタンをクリックしてすべてのテストプログラムを実行するだけで、すぐにテスト結果を見ることができ、他のことはほとんど必要ありません.

    テストプログラムができたら、バグの修正はどのように行いますか?


    まず、このBugを再現する必要があります.いずれにしても、修正する前に、このBugが真実かどうかを認定しなければなりません.どうやって?このバグを再現するためにテスト例を書くには、このバグを修正する前に完了する必要があります.
    このバグが再現できない場合は、問題は他の場所から発生する可能性があります.自動化テストでこのバグを再現できない場合は、間違った場所でこのバグを修正し、プログラムを変更する可能性があります.テストプログラムを書くときは、まずそれを実行して失敗することを確認する必要があります.テストに失敗しなければ、どこか問題が発生した可能性があります.正しく再現できませんでした.
    このバグを修正すると、そのテストプログラムもあり、すぐにこのバグが現れるかどうかを発見することができます.

    また別のバグを見つけたらどうすればいいですか?


    同じやり方.テストプログラムを書いて、このバグを再現します.すぐにこのバグを修正する時間がなくても、致命的なバグではない場合でも、再現できるテストプログラムを持っていなければなりません.当日に戻ってこの問題を解決したとき、何をすべきかを知ることができます.