1月25-26日、東京都目黒区の目黒雅叙園にてソフトウェアテストをテーマにした技術カンファレンス「JaSST(Japan Symposium on Software Test) 2011」が開催された。同カンファレンスでは、2日間で合計40以上のセッションを実施。ソフトウェウェアテストのエキスパートたちが参集し、さまざまなテーマの情報提供/意見交換が行われた。

ここでは、25日の午後に行われたニフティ 加瀬正樹氏のセッション「原因結果グラフの分割と影響範囲の局所化に関する考察 - 仕様変更を考慮した論理関係テスト設計方法」の模様を簡単に紹介しよう。

「CEGTest」開発者が語る、原因結果グラフ技法の応用

ニフティの加瀬正樹氏

加瀬氏は、原因結果グラフ技法を活用したテスト設計支援ツール「CEGTest」の開発者として知られる。今回のセッションでは、原因結果グラフ技法をより効率的に活用するために「分割」や「ズームアウト」という概念を取り上げてその効用を説明したうえで、CEGTestに組み込んだ対応機能を紹介した。

氏の講演の紹介に入る前に、まずは講演のテーマとなっている原因結果グラフ技法についてごく簡単に補足しておこう。

原因結果グラフ技法とは

原因結果グラフ技法とは、その名称のとおり、「原因結果グラフ」を活用した論理思考ツールになる。

では、その原因結果グラフ(Cause-Effect Graph)とは何なのかというと、原因と結果の論理関係を特定の技法でビジュアル化した、以下の写真のようなグラフである。アプリケーション開発においては、複雑な仕様を持つテスト対象の入力やイベント(原因)の組合せと出力(結果)との関係を整理する際などに利用される。「IF~THEN~」を視覚的に表したものと言ってもよいだろう。

原因結果グラフの例。加瀬氏の発表資料から

加瀬氏がテーマにした原因結果グラフ技法は、この原因結果グラフで仕様を整理したうえで、それを基にデシジョンテーブルと呼ばれる表を作成してテストケースを洗い出し、テストの網羅率を高めていこうという試みになる。原因結果グラフを作成する過程では、仕様の矛盾を発見したり、設計の単純化が図れたりといった効果も得られ、テストを前提とする場合に限らず、仕様策定途中の段階でも有効だという。

先ほどの原因結果グラフを基に作成したディシジョンテーブル。加瀬氏の発表資料から

氏が開発したCEGTestは、上記の一連の作業を効率化するためのツールで、原因結果グラフの作成に特化した描画機能や、原因結果グラフからディシジョンテーブルを自動生成する機能などを備えている。JavaScriptで開発されており、CEGTestのWebサイトにてオンラインで利用できるので興味のある方は試してみるとよいだろう。

分割、ズームアウト

さて、講演の内容に戻ろう。加瀬氏が今回の講演のテーマに据えたのが「原因結果グラフの分割」である。

原因結果グラフは、テスト条件を網羅的に洗い出すうえで有効な手法だが、「原因」に当たる要素が増えるにつれてテストケースは爆発的に増えていくことになる。この問題を解消するために加瀬氏が紹介した技法が「原因結果グラフを分割」だ。「原因結果グラフを分割することで、影響範囲を局所化することが可能」(加瀬氏)という。

例えば、以下のスライドのような原因結果グラフがあるとする。この場合、「回線条件」と「決済条件」の間には関連がないため、それぞれを独立した原因結果グラフと見ることもできる。

動画中継機能をテーマにした原因結果グラフのサンプル

ここで、「回線条件」に関わる部分のみに仕様変更が発生したと想定しよう。

仕様変更が発生したと想定

もし、「回線条件」と「決済条件」が統合された原因結果グラフでテストケースを洗い出そうとすると、仕様変更の内容が「回線条件」のみに限定されるものであっても、「決済条件」の内容も含めてテストケースが洗い出されることになり、テストケースの数も多くなる。しかし、「回線条件」を分割して考えれば、条件がシンプルになり、テストケースを大きく抑えることができる。

原因結果グラフを分割して考えてほうが、影響範囲を狭めることができる

もちろん、実際には「回線条件」と「決済条件」の関連性を考えて相応のテストケースを用意する必要があるが、「回線条件」を独立した原因結果グラフとして検討を進めたうえで、全体の影響を考えたほうが作業を効率的に進められるはずだ。

加瀬氏によると、こうした技法は顧客を相手にするシステム開発では特に大きな効果を発揮するという。

「開発現場では、ユーザーがシステムを試した後に仕様変更が発生し、それに伴ってテストもやり直しになるケースが多い。したがって、"分割"を身に付けて、影響範囲を正しく定められるようになれば、作業時間の短縮などの効果が期待できるはず」(加瀬氏)

なお、加瀬氏は、原因結果グラフの分割に関連した概念として「ズームアウト」も紹介。これは、「テスト設計を行う際に、テストの目的に応じてテスト条件や期待値の粒度を粗くして同値分割/水準抽出する手法」(加瀬氏)のことで、「原因結果グラフの分割はズームアウトにも応用できる」という。

さらに氏は講演の最後に、原因結果グラフの分割効果を高めるポイントについても言及。影響範囲を限定する目的で使用する場合には、より原因側に近いノードで分割した方が効果が大きく、ズームアウトに応用する場合には、より結果側に近いノードで分割した方が効果が大きいことなどを説明し、聴講者に対して実現場で活用するためのヒントを提示した。