ソニックの部屋

主にプログラミングに関する記事を投稿します

ソフトウェアテスト技法まとめ

ソフトウェアテスト技法

  • 目標は なるべく少ないテストケースでなるべく多くのバグを発見する
  • テストの種類
  • テスト設計アプローチ
    • 以下どちらでテストするかを明確にする
    • 契約によるテスト
      • 事前条件の範囲内だけでテストする
    • 防御的テスト
      • 事前条件の範囲外もテストする

同値クラステスト

  • テスト的には同じ意味になる値のこと
  • 同値クラスの分だけテストケースを用意すれば良い

境界値テスト

ドメイン分析テスト

  • 複数の条件がある時に有効
  • 2つの条件(変数)が相互作用を持つ場合に適している
  • ドメイン内は条件を満たす範囲のこと
  • onポイントは境界値のこと
  • offポイントは境界値に隣接する値のこと
  • onポイントがドメイン内ならoffポイントはドメイン外とする
  • onポイントがドメイン外ならoffポイントはドメイン内とする
  • ドメインテストマトリクスで網羅性を確保できる
  • in(ドメイン内の満たす値)を固定しonとoffを調整

※1,2列は算数の点数>=60の条件を検証している
列がテストケース(下記例は4ケース)

変数 条件 ポイント 1 2 3 4
算数 算数の点数>=60 on 60 - - -
off - 59 - -
in - - 70 80
合計点 (算数の点数+国語の点数)>=90 on - - 70/20 -
off - - - 80/9
in 60/40 59/41 - -
期待される結果 合格 不合格 合格 不合格

デシジョンテーブル

  • 複数の条件がある時に有効
  • 2つの条件(変数)が独立している場合に適している
  • それは論理式で表すことができるもの
  • テストケースの圧縮(ケースを減らす)を考える

※上からNoが出たら以降の判定は行わないのがコツ
列がテストケース(下記例は4ケース)

1 2 3 4
条件
書籍を購入している Yes Yes Yes No
4000円以上購入している Yes Yes No -
離島に住んでいない Yes No - -
アクション
送料無料 Yes No No No

ペア構成テスト

  • もっと複雑、多くのテストケースがある時に有効
  • 全ての組み合わせではなく条件の全てのペアをテストする
  • 70~85%程度のバグを発見可能
  • 直交表(列が条件、行がテストケース)を使う

※例:L4(23)・・・2値条件が3つ
行がテストケース(下記例は4ケース)

A B C
1 0 0 0
2 0 1 1
3 1 0 1
4 1 1 0

状態遷移テスト

  • もっと複雑、多くのテストケースがある時に有効
  • 状態と遷移がある時に有効
  • 1.まずは状態遷移図で全体感を把握
  • 2.次に状態遷移表を使って全ての遷移を確認
  • 3.その後Nスイッチカバレッジにより段階的な遷移をテスト
  • Nスイッチカバレッジ
    • Nは前状態から後状態までに経由する状態(スイッチ)のこと
    • 例えば停止中→初期状態(スイッチ)→動作中
    • 状態遷移表を前状態(行)、後状態(列)の行列にする
    • Nが増えるとテストケースが増える

※以下は状態遷移表
※列→行

イベント\状態 ①初期状態 ②動作中 ③停止中
スタートボタン
リセットボタン N/A N/A

※以下は1スイッチカバレッジ
※イベントRはリセット、Sはスタート
※+はorの意味
※行→イベント→列へ遷移
行列がテストケース(下記例は12ケース)

前状態\後状態 ①初期状態 ②動作中 ③停止中
①初期状態 RR+SR RS SS
②動作中 RR+SR RS+SS -
③停止中 RR+SR RS SS

テスト技法以外のテストケースを設計する観点としてカバレッジ

  • ホワイトボックステスト
    • データフローテスト
      • 変数毎に生成→使用→廃棄の順番が守られているか確認
    • 制御フローテスト
      • 100の内何%が実行されたかに注目してテストを行う(=カバレッジ
  • カバレッジレベルの求め方の種類(低い順に)
    • ステートメントカバレッジ(C0)
      • 実行可能な行のうち何行を実行したか
      • Webアプリで採用
    • ディシジョンカバレッジ(C1)
      • 判定の分岐をどれだけ網羅したか
      • 100%ディシジョンカバレッジ=100%C0
      • Webアプリで採用
    • コンディションカバレッジ(C2)
      • 判定の中の条件式の真偽をどれだけ網羅したか
    • マルチプルコンディションカバレッジ(MCC)
      • 条件式の真偽の組み合わせをどれだけ網羅したか
    • MC/DCカバレッジ
      • MCCを改良しテストケースを削減したもの
      • 100%MC/DCカバレッジ=100%C0, C1, C2
      • 銀行システムなど重要システムに採用
  • カバレッジ計算は自動計測ツールを用いる
  • ポイントは 効果の高いテスト技法を採用した結果、高いカバレッジが副次的に得られる ということであり、カバレッジの上昇が目的ではない
  • 85%程度のカバレッジが努力目標

参考文献
ひらまつ しょうたろう, 2023, 「はじめてのソフトウェアテスト技法【全てのエンジニアが知るべき最重要テスト技法を、丁寧な解説と演習問題で身につけよう】」, udemy, (2024/2/20取得,https://www.udemy.com/).