南京大学<ソフトウェアテスト>ノート


ソフトウェアテスト


目的


コードを記述する全過程にテストの検出プロセスを追加することで、設計ミス、誤記、プログラムに現れるミスを減らすことができます.

基本概念


PIEモデル


エラー分類
  • Fault:プログラム内のエラーコード
  • Error:エラーコードによるエラーステータス
  • Failure:エラー状態が現れた後に感知される
  • テストで検出できるエラーは、Failureレベル、すなわち表示されるエラーのみです.プログラム中のErrorとFaultレベルのエラーはテストだけでは検出できません.そのため、開発エンジニアが自分でホワイトボックスのテストをしてFaultの出現をできるだけ避ける必要があります.

    ホワイトボックスのテスト方法


    ホワイトボックステストを通じて、開発エンジニアがコードを設計してコードを書いた後、コードが間違っていないことを自分で証明することができることを望んでいます.数学の問題を計算した後の検査方法のようです.

    図オーバーライド


    どのコードも図で表すことができます.テストの時、図の各部分を走って、正しい結果が得られるかどうかを見る方法が図カバーです.

    せいぎょりゅうせいせい


    プログラムの制御フローは、作業文、if、while/for、switchから構成されます.コードロジックのフローチャートにも相当します.

    構造オーバーライド


    ノードオーバーライド/エッジオーバーライド、制御フローオーバーライドの一部

    プライマリパスオーバーライド


    単純パス:各ノードはパスに1回しか表示されません.
    ≪プライマリ・パス|Primary Path|emdw≫:最も長い単純なパスで、単純なパスのサブセットではありません.
    テスト・インスタンスを生成し、すべてのプライマリ・パスを上書きします.プライマリ・パスのオーバーライドにより、オーバーライドの作業量を削減

    基本パスオーバーライド


    ≪独立パス|Independent Path|oem_src≫:他のパスに含まれないノードまたはエッジを含むパス
    リニア独立パス個数:CC=E-V+2(ループ複雑度)
    基本パスのテスト手順:
  • は、制御フローチャート
  • を生成する.
  • 計算コイル複雑度
  • 基本パスセット
  • を選択する.
  • 基本経路試験用例
  • を生成する.

    データストリームオーバーライド


    プログラム制御フローでのポイント操作の正確性.変数アクションは次のとおりです.
  • 定義:メモリの割り当て、値の割り当て、
  • の初期化
  • 使用:操作、判断等
  • を行う.
  • 定義参照ペア:前に定義し、後に
  • を参照
  • 定義が明確である:前定義、後使用間、再定義されていない
  • データストリームは、iからj
  • までの明確なパスを定義することができる.
  • 定義参照パス(du-path):定義から使用までの単純なパスであり、パス定義が明確である
  • .
    データストリームオーバーライドガイドライン
  • ADC:全定義上書き、全定義箇所
  • 上書き
  • AUC:全参照オーバーライド、すべての参照箇所オーバーライド、すべての定義も含めて
  • オーバーライド
  • ADUPC:すべての定義の参照上書き、すべての定義と参照の間のパスが
  • を上書き

    ロジックテスト

  • 判定:各条件群が1判定となり、制御フロー
  • に影響する.
  • 条件:各ブールユニットは条件
  • である
  • 判定上書き:TrueとFalseが1回ずつ実行すると判定する上書き
  • 条件上書き:TrueとFalseがそれぞれ1回ずつ実行する上書き
  • 条件判定上書き:条件上書きと判定上書きを同時に満たす
  • .
  • 完全条件オーバーライド:全条件の組合せオーバーライド、複雑度2 n回
  • 改訂条件/判定上書き(MC/DC):各条件の独立した影響は
  • を1回実行する.

    へんいしけん


    通常のプログラムにFaultを注入した後、テスト例がFaultを検出したかどうかを観察します.テスト・インスタンス・セットの十分性を評価するために使用します.
    変異テストの仮定:
  • プログラマーは大面積でコードを書き間違えることはできません.小さな部分のコード
  • を書き間違えるだけです.
  • 単一のエラーがテストできる場合、組み合わせられたエラーは
  • にテストできる.
    重要な変異タイプ:
    を選択します.
    説明
    コレクションの説明
    数量
    ABS
    絶対値
    {(e,abs(e)),(e,−abs(e))}
    2
    AOR
    えんざんし
    {(x,y)∣x,y∈{+,−,∗,/,%}∧x≠y}
    20
    LCR
    ろんりコネクタ
    {(x,y)∣x,y∈{&&,∥}∧x≠y}
    2
    ROR
    関係演算子
    {(x,y)∣x,y∈{>,≥,<,≤,=,≠}∧x≠y}
    30
    UOI
    単項演算子
    {(v,−−v)(v,v−−),(v,++v),(v,v++)}
    4
    等価変異:2つの文法が異なるプログラムで、意味が完全に一致しています.コードは異なりますが、生成された出力マッピングは完全に一致します.
    // example 1
    for(int i = 0; i != 5; i++){
        nop();
    }
    
    // example 2
    for(int i = 0; i < 5; i++){
        nop();
    }

    障害仮定テスト


    テスト・インスタンス・セットの能力を評価します.変異テストは故障仮定テストの一部です
    故障タイプ:E=(a|b)&c
  • 演算子誤用
  • ORF:誤用オペランド,E’=(a&b)&c
  • ENF:式を誤用し、E’=!(a|b)&c
  • VNF:誤用否定,E’=(a|b)&!c
  • ASF:優先度誤用、E’=a|b&c
  • 操作数誤用
  • MVF:オペランドロス、E’=(a|b)
  • VRF:誤用変数,E’=(a|b)&a
  • CCF:E’=(a|b)&(c&a)
  • CDF:E’=(a|b)&(c|a)
  • SA 0:永久0,E’=(0|b)&c
  • SA 1:永久に1で、E’=(1|b)&c

  • 試験条件:異或

    ブラックボックスのテスト方法


    開発エンジニアがブラックボックスのテスト例を自分で作成することで、論理的な思考の厳格性を高めることを望んでいます.最初にテストを作成し、エンジニアがコードの論理をよりよく理解できるようにします.

    ランダムテスト


    試験例をランダムに選択する試験

    等価クラス区分


    入力ドメインを一定の基準に従っていくつかのサブセットに分割し、サブセットでテスト例をランダムに選択します.
    区分の原則:
  • 完全性:すべての分類が
  • で上書きされます.
  • 冗長性なし:2つの等価クラスに交差があるべきではない
  • 分割方法:
  • データの取値範囲
  • 異なるデータの制御フローおよびデータフロー
  • データ正当/不正
  • 合法:検出機能
  • 不正:検出エラー処理

  • 境界値解析


    異なる等価クラス間の境界を追加
    境界値関連コード
  • 判断
  • サイクル
  • データ最大値/最小値
  • 境界値解析方法
    min < min+ < norm < max- < max
  • 正常値norm
  • を選択
  • min,min+,max,max-
  • を選択
  • 不正入力を考慮:min-,max+
  • けっていひょう


    プログラム入力と出力の関係を反映するテーブル.入力と出力の関係を検出するために用いる.
    手順:
  • 計算規則数rules=2 conditions
  • 動作および条件
  • がリストする.
  • 動作行
  • を挿入する.
  • 挿入条件列
  • は簡略化され、同様の規則が同じ結果をもたらす条件は
  • を統合することができる.

    例:Stringから浮動小数点数を抽出する

    "Duration: 1000.0000
    "
    "Loation: 50.0000"

    −符号1000の整数.小数点0000
    マイナス記号
    せいすうぶ
    小数点
    しょうすうぶ
    合法性
    T
    F
    F
    F
    F
    T
    F
    F
    T
    T
    T
    F
    T
    F
    F
    T
    F
    T
    T
    T
    T
    T
    F
    F
    T
    T
    T
    F
    T
    T
    T
    T
    T
    F
    T
    F
    T
    T
    T
    T

    JAvaコード

    public static float peekFloat(String content) {
        if (content == null || content.length() == 0){
            return 0;
        }
    
        Pattern p = Pattern.compile("-?(\\d+\\.?\\d*|\\.\\d+)");
        Matcher m = p.matcher(content);
        if (m.find()) {
            return Float.valueOf(m.group(0));
        } else {
            return 0;
        }
    }

    コンビネーションテスト


    異なる変数の値の組合せを考慮する
    方法:
  • の2次元の組合せ:すべての変数等価クラスの2つの組合せが試験例に
  • で現れる
  • 3 D組合せ:任意の変数の3つの組合せが試験例に
  • で現れる.
  • 完全組合せ:任意の変数のすべての組合せが試験例における
  • である.
  • 可変粒度の組合せ:相関の組合せは
  • を覆う.

    デフォルト


    変数のデフォルト値を入力してテストし、ほとんどのユーザーの構成が正しく動作することを保証します.

    入力変数のマージ


    コンストレイントされた変数を一緒に考慮

    テストの進捗


    テストケースの概略


    テスト予言


    フェイルオーバ


    機能テスト


    たんさくしけん


    パフォーマンステスト


    テスト方法の自動化


    自動化されたテストツールを使用して、テストの人件費を削減したい.一方,ソフトウェアに存在する問題をテストツールの観点から観察した.

    GUITAR


    Android Instrumentation


    Android BDD-Calabash