原因結果グラフ法とは何か?テスト設計の手法を解説
原因結果グラフ法とは
原因結果グラフ法は、入力やイベントといった「原因」の組み合わせと、出力の「結果」の関係性をグラフ化し、ソフトウェアのテスト設計を行う技法のことです。同手法は不具合の摘出や有効性の高いテストケースを判断することに長けており、仕様の漏れや矛盾を発見するためにも利用されます。
原因結果グラフ法はIBMのテスト担当であったウィリアム・R・エルメンドルフ(William R. Elmendorf)が考案し、1970年に発表された論文『Automated Design of Program Test Libraries』にて、テスト設計を自動化するTELDAP(Test Library Design Automation Program)というツールの中で紹介されました。その後、コンピュータ科学者であるグレンフォード・J・マイヤーズ(Glenford J. Myers)の著書『The Art of Software Testing』にて原因結果グラフ法が紹介され、テスト設計ツールとして広く認知されるようになりました。
原因結果グラフの構成
原因結果グラフは、「ノード」「論理関係(リンク)」「制約」の3つの要素で構成されます。
ノード
ノードは、数学的にいう命題変数であり、真理値(真か偽)を持つ要素です。ソフトウェアテストでは、入力条件、条件の同値クラス、動作を引き起こすイベント、あるいは期待する出力結果や事後条件が該当します。
論理関係(リンク)
論理関係(リンク)は、ノード同士を接続する要素であり、論理演算を表します。
原因ノードの真理値を操作して結果ノードの値を出力し、リンクでノードを結合することでシステムの論理関係を表示します。論理関係の基本として「AND(論理積)」「OR(論理和)」「IDENTITY(同値)」「NOT(否定)」の4種類があります。
AND(論理積)
![AND(論理積)の図](https://ssaits.jp/promapedia/wp-content/uploads/2022/06/image.png)
図1はANDの論理関係を示し、複数の原因C1~C2の全てが真であれば結果eを出力することを表しています。
OR(論理和)
![OR(論理和)の図](https://ssaits.jp/promapedia/wp-content/uploads/2022/06/image-2.png)
図2はORの論理関係を示し、複数の原因C1~C3の内、少なくとも1つが真であれば結果eを出力することを表しています。
IDENTITY(同値)およびNOT(否定)
![IDENTITY(同値)およびNOT(否定)の図](https://ssaits.jp/promapedia/wp-content/uploads/2022/06/image-1.png)
図3はIDENTITYおよびNOTの論理関係を示しています。上側の部分はIDENTITYの関係であり、原因Cが真なら結果e1を出力することを表しています。下側はNOTの論理関係であり、偽なら結果e2を出力することを示しています。
制約
ある条件の値に制限をかけることや、必然的にありえない複合条件を出さないためのノード間の「制約」を表します。制約には「ONE」「EXCL」「INCL」「REQ」「MASK」の5種類があり、それぞれの制約は以下のとおりです。
- ONE:真になるノードは1つだけ
- EXCL:あるノードが真になったとき、ほかのノードは偽
- INCL:少なくとも1つ以上のノードが真
- REQ:このノードが真となるために、先に真になっているノードが必要
- MASK:このノードが真になると、真偽を問われなくなるノードがある
原因結果グラフ法の作成手順
原因結果グラフ法は、テスト対象を分析し、作成した原因結果グラフから論理関係を網羅するデシジョンテーブル(決定表)を作成します。テスト対象のグラフ化は、単なるテスト設計といった作業だけでなく、設計や仕様書の整理を行うことにも繋がります。テスト対象の分析とグラフ化を繰り返し行うことで精度を上げていくため、グラフの修正を行いやすくするためにもホワイトボードや付箋紙、その他支援ツールを活用すると効率的に進めることができます。