bryutus blog

お前もか

「ソフトウェアテスト技法練習帳(Part 3・4)」の中で出てきたテスト手法を整理してみた

前回のPart 1・2に続いて、Part 3・4に出てきたテスト手法についてを整理してみます。

bryutus.hatenablog.com

Part3 状態遷移テスト

ISTQBテスト技術者資格制度 Foundation Level シラバス 日本語版 Version 2018V3.1.J03には、このように記載されています。

コンポーネントやシステムは、現在の条件や過去の履歴(システムの初期化後から起きるイベントなど)によって、イベントに対して異なる振る舞いをする。過去の履歴は、状態の概念を使用してまとめることができる。状態遷移図は、ソフトウェアの取り得る状態、ソフトウェアが開始および終了する方法、ソフトウェアが状態間で遷移する方法を示す。
・・・
状態遷移表は、状態間の有効な遷移と無効だと思われる遷移のすべてと、イベント、有効な遷移の際のアクションを示す。状態遷移図は有効な遷移のみを示し、無効な遷移は除くのが一般的である。

状態遷移図

どのような状態があるのか、その状態が変化するイベントはなにか、これらの状態をイベントでつなげることで状態遷移図を作成します。

f:id:bryutus:20220219220045p:plain
状態遷移図

状態遷移表

作成した状態遷移図をもとに状態遷移表を作成すると、状態とイベントの組合せの漏れや仕様にない遷移を見つけやすくなります。

状態X 状態Y 状態Z
イベントA 状態Y 状態X N/A
イベントB N/A 状態Z 状態Z
イベントC N/A N/A 状態Y

関係行列

縦軸に遷移前の状態を、横軸に遷移後の状態を、各セルに状態が遷移するときのイベントを記載した関係行列を作成します。

状態X 状態Y 状態Z
状態X a
状態Y a b
状態Z c b
  • a: イベントA
  • b: イベントB
  • c: イベントC

1スイッチカバレッジ

2回のイベントで遷移するパスを全て網羅するカバレッジです。
1スイッチカバレッジは、関係行列の積を取ることで求めることができます。

状態X 状態Y 状態Z
状態X aa ab
状態Y aa + bc bb
状態Z ca bc bb + cb

テストケース

1スイッチカバレッジの状態遷移のパスをテストケースとして起こしていきます。

No 遷移前の状態 イベント 期待値
1 状態X イベントA → イベントA 状態Xに遷移すること
2 状態X イベントA → イベントB 状態Zに遷移すること
3 状態Y イベントA → イベントA 状態Yに遷移すること
4 状態Y イベントB → イベントC 状態Yに遷移すること
5 状態Y イベントB → イベントB 状態Zに遷移すること
6 状態Z イベントC → イベントA 状態Xに遷移すること
7 状態Z イベントB → イベントC 状態Yに遷移すること
8 状態Z イベントB → イベントB 状態Zに遷移すること
9 状態Z イベントC → イベントB 状態Zに遷移すること

その他にも、C1カバレッジ(遷移網羅)や有限オートマトン、プッシュダウンオートマトンといったキーワードがありましたが、正直に言うとこれらについては理解が追いついていません。
今は理解はできていないですが、そういった考え方や手法があったなと頭の片隅に置いておき、実践を交えつつ理解を深めようと思います。

Part4 組合せテスト

ISTBQの用語集には、このように記載されています。

ブラックボックステスト技法のひとつ。複数のパラメータの値を特定の組み合わせで実行するためのテストケースを設計する。

すべての組合せをテストするには非現実的なこともあります。そういった場合に、効率的な組合せテストを行うためにペアワイズ法を使います。
ペアワイズ法は、バグは1~2因子の組合せに多く存在することが経験的に知られていることに基づいてテストケースを作成する方法です。

  • 因子: 入力のパラメータや条件
  • 水準: 因子の取り得る値や範囲
    • 同値分割法や境界値分析を使って最適化する

次のような因子と水準があった場合に、全てのケースをテストしようとすると27通りのテストパターンが存在しますが、ペアワイズ法を用いると9通りまで数を削減することができます。

  • 因子: 水準
  • Type: Single, Span, Stripe
  • Size: 10, 100, 500
  • File: FAT, FAT32, NTFS
$ pict model.txt 
Type    Size  File
Stripe  100   FAT32
Span    100   FAT
Stripe  500   NTFS
Span    10    NTFS
Span    500   FAT32
Single  100   NTFS
Stripe  10    FAT
Single  10    FAT32
Single  500   FAT

このように2因子間の組合わせの網羅は行いますが、3因子間の100%の網羅性は保証していません。3因子間以上の網羅性を犠牲にして組合せ数を削減しています。


ペアワイズ法を使ってテストケースを作成するために、Microsoft社が公開しているPICTを利用しました。

github.com