原因結果グラフ技法とは
原因結果グラフ技法とは、入力やイベント(=原因)の組合せと、出力(=結果)との関係をブールグラフ化し、そこからデシジョンテーブルを作成するテスト設計技法である。複雑な論理関係を網羅的にテストするための道具であると同時に、仕様の漏れや矛盾を見つけたり、設計を単純化するためにも利用される。
原因結果グラフ技法の特徴
ソフトウェアテストにおいて、有則・無則という概念[1]がある。一般的に、有則とは動作が定義された入力条件の組を指し、無則とは組み合わせても何の影響も及ぼさない入力条件の組を指す。原因結果グラフ技法は、組合せテスト技法とみた場合に有則系のテスト(設計)技法に分類される。
表1. 組合せテスト技法の分類
原因結果グラフ技法の手順は一般的に以下の通りです。
- テスト対象を分析して原因結果グラフを作成する
- 原因結果グラフから論理関係を網羅するデシジョンテーブルを作成する
- デシジョンテーブルをもとにしてテストケースを実装する
テスト対象を分析してグラフ化することは、単なるテスト設計という作業だけではなく、設計書や仕様書の整理という作業とも言い換えられます。この作業によって、テスト対象となるプログラム・システムに潜む矛盾を見つけだしたり、設計の単純化を促進することもできます(セルフレビューやリファクタリングの効用)。
実際に原因結果グラフを作成する場合は、分析作業とグラフ作成の作業を繰り返します。そのたびにグラフの修正が必要となるため、一般的にはホワイトボードや付箋紙、その他支援ツールが必須となります。さらに、テスト条件の組合せを表すデシジョンテーブルに変換する際、一定のスキルが必要であり、テスト条件の因子数が多くなればなるほど、手作業で実施することが困難となります(技法の理解、時間的制約、正確性の問題)。
原因結果グラフの構成
原因結果グラフは「ノード」「論理関係」「制約」の3つの要素で構成される。
ノード
ノードとは、真偽値(True or False)を持つなんらかの条件を表した要素で、ソフトウェアテストでは「入力条件」や「イベント」あるいは「期待結果」「事後条件」にあたり、数学的には「命題」にあたる。
論理関係
一般的に原因結果グラフにおける論理関係は、AND と OR をさす。1つ以上の原因(A、B、C)がすべて成立する場合にある結果(X)が成立することを図1のように表現し、∧で関係を表現する。
図1. 論理関係 AND の例(X = A AND B AND C)
同様に1つ以上の原因(A、B、C)のいずれか一つが成立する場合にある結果(X)が成立することを図2のように表現し、∨で関係を表現する。
図2. 論理関係 OR の例(X = A OR B OR C)
原因結果グラフでは、論理演算子を挟んで左側に原因(入力条件やイベント)を配置し、右側に結果(出力結果)を配置し、特に原因側のノードを「原因ノード」、結果側のノードを「結果ノード」と呼ぶ。
単純な論理関係は AND、OR のみで表現できるが、通常はノードを論理関係で結合するバリエーションとして「否定(NOT)」と「階層構造」が必要である。これらについて解説する。
原因ノードの条件を逆(数学的には補集合)にして論理関係を表現する場合は、否定(NOT)を用いる。原因結果グラフでは、図3のようにアルファベットの N を模した記号を記載して表現する。
図3. 否定表現の例(X = ¬A OR B OR C)
結果ノードはさらに別のノードの原因になるものがある。原因結果グラフでは論理関係を階層的に表現することが可能である(図4)。
図4. 階層構造の例(X = (a1 AND a2) OR B OR C)
論理関係の観点で最も原因側に配置されたノードを原因ノード、最も結果側に配置されたノードを結果ノードと呼ぶ。原因ノードでも結果ノードでもないノードは中間ノードと呼び、あるノードの原因でもあり、あるノードの結果でもある。図4では、ノードAが中間ノードである。
上記のようにノードを論理関係で連結したものを総じて原因結果グラフと呼び、グラフ自身が真偽値を持つ「命題」と見ることができる。
※なお、論理関係・論理演算子には XOR、NAND、NOR、XNOR などがありますが、CEGTest で利用できる論理関係は AND、OR のみです。
制約
ある条件の取りうる値に制限をかけたり、必然的にありえない(複合)条件を出現させないために原因結果グラフでは「制約」という概念を用いる。制約には表2、表3のように ONE、EXCL、INCL、REQ、MASK がある。
表2. 原因結果グラフで用いる制約(ONE、EXCL、INCL)
表3. 原因結果グラフで用いる制約(REQ、MASK)
参考文献・引用文献
[1] ソフトウェアテストの展望: SW機能テストから、システム挙動の評価へ, 松尾谷徹(デバッグ工学研究所), JaSST’07 Tokyo 招待講演