[Test]テストケースデータセット

3471 ワード

ユニットテストシステムテスト


ユニットテストunit testing


「ユニット」とは、関数やクラスなどのプログラムの構成部分を指し、ユニットを独立してテストすると、エラーが発生すると、どこでエラーを探しているのかを判断することができます.エラーは、私たちがテストしたユニットにあるに違いありません.

システムテストシステムtesting


システムテストは、ユニットテストが完了すると、システムテストでエラーが発見されると、ユニット間のインタラクションに問題が発生する可能性があることを示すだけです.
一般的なポリシー:自分で作成したユニットのテストを行う

ブラックボックステストホワイトボックステスト


ホワイトボックステスト


(被験ユニットの実装の詳細がわかります)

ブラックボックステスト


(測定ユニットのインタフェースしか見えません)

回帰テストregression testing


被験ユニットのコードが変更される可能性があります(あなたや他の人)、回帰テストが必要です.エラーが消えるまで無関係コードを除去し、最後に除去したコードを再追加します.候補コードが削除されるまで、このプロセスを継続します.
The way we find that minimal program is to keep removing code until the error disappears — and then reinsert the last bit of code we removed. This we do until we run out of candidates for removal.

使用例選択基準

  • エラーの原因となるテスト(ほとんどのエラーを検出)
  • 重大なエラーを引き起こす可能性のあるテスト(最悪の結果をもたらす可能性のあるエラーを見つける)
  • 他の仕事に比べて、テストは私たちの創造的な思考を発揮して、「このプログラムを正常に動作させる方法」の目的を達成する活動です.そのため、最高のテスト担当者は系統的な思考だけでなく、非常に「ずるい」(もちろん、正当な理由がある)必要があります.

    データセット

  • 空集
  • ミニデータセット
  • ビッグデータセット
  • 限界分布データセット
  • シーケンスの最後に問題が発生する可能性のあるデータセット(境界)
  • 重複要素を含むデータセット
  • 奇数と偶数の要素を含むデータセット
  • 乱数からなるデータセット
  • テストコード


    テストコードを書くのは「カットと貼り付け」式のプログラミングではなく、他のコードを書くようにテストプログラムを書くべきです.たとえば、シーケンスの2つのセグメントと中央からそれぞれ1つの値(シーケンスにない値)を選択し、テスト例を構築することは、数値シーケンスまたは数値範囲プログラムをテストする際に非常に役立ちます.

    エラーコード

  • と「その他のコード」との微妙な相関:グローバル変数(例えばcin,cout)、非常量参照パラメータ、ポインタなどの使用
  • をチェックする.
  • リソース管理:メモリ検索管理new delete操作、ファイル使用、ロックなど
  • ルックアップループ:チェック終了条件
  • ifおよびswitch文(「分岐文」とも呼ばれる):これらのプログラムの論理エラーを検索する
  • どのようにしてより簡潔(より明確)な関数を書くことができるかを考えることは、テスト方法を考える良い方法である場合があります.

    早期テスト


    プログラムユニットを作成する前にユニットテストを作成しました
  • 定義の良いインタフェースを使用すると、
  • の使用をテストできます.
  • は、出力
  • を含む様々な動作を文字で記述するように設計されている.
  • は、システムテストの前にエラーパラメータ
  • をキャプチャするために、未検査仮定(要求、前置条件など)の検出を呼び出しコードに埋め込む.
  • は依存性を最小化し、それぞれの依存関係を明確に示す
  • である.
  • 明確なリソース管理ポリシー
  • ほとんどのシステムでは、最終的なバージョンでかなりのコストの低いチェックコードを残すのは良いアイデアです.いくつかの「不可能」な状況が発生した場合、明確なエラー情報を通じて状況を理解したいからです.
    単純なシステム崩壊ではありません

    「設計が悪い」(アルゴリズム以外のパフォーマンスの問題)

  • 情報の繰返し計算
  • チェックを繰り返す(例えば、ループのたびにデータのインデックスをチェックする)
  • .
  • ハードディスク(またはネットワーク)
  • への繰り返しアクセス

    実行時間の表示

    // Unix
    
    g++ x.cpp
    time g++ x.cpp
    

    タイムレコード


    コード#コード#

    #include 
    #include 
    using namespace std;
    
    void do_something() {}
    
    int main()
    {
        int n = 10000000; // repeat do_something() n times
        auto t1 = chrono::system_clock::now(); // begin time
        
        for (int i = 0; i(t2-t1).count() << " milliseconds
    "; }

    しゅつりょく

    do_something() 10000000 times took 32 milliseconds
    
    

    オプションのパラメータ

    chrono::duration_cast<:milliseconds>(t2-t1).count() 
    
  • 秒級seconds
  • ミリ秒レベルmilliseconds
  • ナノ秒級nanoseconds
  • REFリファレンス


    Programming -- Principles and Practice Using C++ (Second Edition) http://www.stroustrup.com/Programming/
    std::chrono::system_clock - cppreference.com http://en.cppreference.com/w/cpp/chrono/system_clock