最速のテスト

3426 ワード

私は高速プログラミングフィードバックループとしてテストが大好き!過去20年間で、私は彼らが時折批判的な検証から現代的なシステム設計の基礎的なコンポーネントに行くのを見ました.

なぜ高速テストを気に?
私がコードを書いているとき、特にテスト駆動開発を行うとき、私は最速のフィードバックを可能にしたい.それは速いテストを意味します.
私は、100 msは十分に速く個々のテストを考慮するための私の上限です.それはまだ痛々しいほど遅いだけです.
100 msより遅いと私はテストのための呼び出しの間の遅延を見つけ、その結果を指摘するだけで私は-無意識にも-テストを実行するから離れて恥ずかしがり屋を開始するのは吃音の摩擦の十分です.私は、私が考えるコードを書くより多くの時間を費やすつもりです.私は新しいテストを書いて、どんなガードレールまたはガイダンスなしででもコードをスパイクから始めるためにより長く行きます.
私がユニットテストスイートが秒または(gasp)分を取るコードベースにいるならば、私はすぐにそのような痛烈に役に立たないテストを削除することを提唱します.
明確に言えば、ユニットテストについて話しています.統合テストは実際に実際のデータベースを必要とすることができます実際にデータを実際にそれを格納し、実際にいくつかの構造をメモリ上で、ディスク上の、または(すべての悪い)リモートマシン上で書き込みます.テストの種類は、それらを分離し、まだそれらを便利に考えてどれだけに応じて、その速度に本当の制限があります.
しかし、ユニットテスト:ネットワークなし、サービス.生産コードを呼び出し、結果についての主張を行う潜在的なコードとテストコードの純度だけ.
どのくらいの速彼らは行くことができますか?

どれくらい速く彼らは行かなければなりませんか?
理想的な単体テストは10 ms以下で実行する必要があります.
あなたの言語またはテストフレームワークが個々の単位テストを実行するのを許さないならば、全体の単位テストスイートは1000 ms(1秒)で実行しなければなりません.
任意の普及一般的なプログラミング言語を使用している場合、これは完全にテストの何千ものテストスイートでも可能です.コンピュータは速い!

それはどうしてですか.
それは将来のブログ記事のトピックです!しかし、マイケルFethersによってA Set of Unit Testing Rulesから始めます.

A test is not a unit test if:

  • It talks to the database
  • It communicates across the network
  • It touches the file system
  • It can’t run at the same time as any of your other unit tests
  • You have to do special things to your environment (such as editing config files) to run it.


どのように高速な最速の可能なテストですか?理論的に?
絶対に最速の可能なテスト速度です.我々がハードウェアとソフトウェアのすべての境界から我々自身を解放するならば、我々の最速のテストがどれくらい速くありえたかについて、基本的な制限速度があります.
その制限速度-もちろん-光の速度です.
いいえ情報は光の速度よりも速く移動することができます.どんなに私たちが最適化、改善、微調整し、合理化しても、我々は人間からマシンへの情報の往復を持っていると制限の自由を破ることはできません.基本的に速度制限がある.
  • 私たちのシステムにテスト
  • を実行するように指示する必要があります
  • 我々のシステムは、その試験
  • の結果を送信する必要がある
    どのくらいの速さは、光の速度によって許可されるか?我々のコンピュータが非常に遠く離れていない限り、明らかに非常に速い.
    我々のコンピュータがおよそ2フィート離れていると仮定しましょう.どれくらい速く、我々のテストフィードバックはありえましたか?
    距離の2フィートは、我々の信号と応答が4フィートを旅行する必要があることを意味します.(もちろん、光は機械と我々自身の頭の中を旅しなければならないが、その距離を脇に設定しよう.)
    Wolframalphaに!Lightspeed over four feet
    lightspeed / 4 feet = 4.067ns (nanoseconds)
    
    これは楽しい数学的なクノリは、1つのナノ秒だけでは、光の速度を測定するために1つの足を移動するために光がかかります.
    4 nsはどれくらい速いのか?時間の単位を下りましょう!
    1 second = 1 second (1 s)
    1 second / 1000 = 1 millisecond (1 ms)
    1 millisecond / 1000 = 1 microsecond (1 µs)
    1 microsecond / 1000 = 1 nanosecond (1 ns)
    
    ほんの数桁の大きさ、問題はない!
    つの単位テストのための10 msの我々の合理的なケースと比較して?我々の10 msの単位テストの1000を連続的に走らせる時に、我々は我々の最速の可能な4 nsテストの250万を走らせることができます!
    我々はその速度に到達することはありませんし、個々のテストのための任意の有意義な計算があると言うのは公正です.しかし、ゴールを持つことはよいです.