[書籍]ソフトウェアテスト技法ドリル -立体で捉える-

HAYST法も、デシジョンテーブルや原因結果グラフ、CFD法なども、どちらも組合せテストの一種ととらえることができますが、目的が違います。HAYST法は、関係ないだろうと思われる組合せに潜むバグを見つけるのが目的。デシジョンテーブルや、原因結果グラフ、CFD法は、関係性そのものが仕様書通りかどうかを確認するのが目的。デバッグ工学研究所の松尾谷先生はこれらを「無則」「有則」という言葉で表現しています。

有則とは、動作が定義された入力条件の組。定義されているので、テスト空間も限定されたり、閉じたりしている。これらの組合せを効率的・網羅的に洗い出す技法が、デシジョンテーブル、原因結果グラフ、CFD法といえる。

無則とは、何も影響を及ぼさない入力条件の組。数学的な用語に当てはめると「直交」と言い換えてもいい。この無則に該当するテスト空間は、広大で閉じていないため、万が一バグ(実は影響を及ぼす入力条件の組)がある場合、見つけることがなかなかしんどい。このバグを出現させる入力条件の組を限られた時間で見つけようとする技法が、直交表やペアワイズ(All-Pair)法、HAYST法である。

また、禁則というのは、動作が禁止された入力条件の組合せであり、原因結果グラフでいえば制約と重なる部分ともいえる(禁則⊂制約?)。「微則」という言葉もあるらしいが、どういう意味なのだろうか。。。

==

と、第4章については一旦ここで中断。
先日、この本の勉強会の第3回目が開催されたのだが、そこで出題された原因結果グラフの演習問題が以下の問題。

「今、食べたいラーメン」
腹が減りました。とてもラーメンが食べたいです。でも、どんなラーメンでもいいわけではありません。以下の条件を参考に、食べたいラーメンになるように原因結果グラフを作成してください。

  • 味はしょうゆか塩か味噌のいずれかが良い。普通の胃袋なので1 杯で十分です。
  • 昨日はステーキを食べたので、こってりではないほうが良い。
  • しょうゆか塩の場合は、とんこつベースが良い。
  • 味噌の場合は野菜がたっぷり入っているものが良い。
  • トッピングは絶対に付けたい。金に糸目はつけないので味玉、刻み玉ねぎ、焼き海苔の中から最低1つは付けたい。

僕が作った原因結果グラフとデシジョンテーブルはこちら(勉強会の時は「一杯」がなかったので追加)。

ramenceg

最初は、トッピングにONE制約をつけていましたが、「最低一つ」だったのでつけるならINCL制約のが適切。でもそうすると、かならず「トッピングあり」が真になってしまって、個人的には気に入らなかったので、制約を外して、トッピングがない場合も出現するようにした。(制約をつける目的は、テスト条件を減らすことであり、実際にINCL制約をつけると列が減ります。)

でもでも、本当にこれでいいのだろうか?トッピング2個の組合せで、実は嫌いなパターンがあるかもしれない。とんこつベースのしょうゆ味なら、こってりが合うのかもしれない。他にもテストしたくなる。これは、原因結果グラフが食べたいラーメンの説明文の「有則」部分を網羅しているだけで、説明文には見えてこない関係性が気になるということになるだろう。「無則」部分に隠れた定義があるように感じる。

なので、「有則」を確認する組合せとともに、ここで「無則」に関するテスト設計が必要になってくる。HAYST法をここで適用するのは、単に「無則」を組み合わせるだけではなく、隠れた因子を見つけることにもつながる。勉強会に参加された方も、ぜひ同じ問題を、今度はHAYST法で分析してほしい~。

ということで、次回はこの問題をドリル本に沿った手順でテスト設計していきたいと思います。まずは、テスト対象の因子・水準の整理をしまーす。

# んー、自分が作った直交表割付ツールが見当たらない。。。

※この記事は こちら からの転載です。

原因結果グラフ技法の解説(1)

原因結果グラフ技法とは

原因結果グラフ技法とは、入力やイベント(=原因)の組合せと、出力(=結果)との関係をブールグラフ化し、そこからデシジョンテーブルを作成するテスト設計技法である。複雑な論理関係を網羅的にテストするための道具であると同時に、仕様の漏れや矛盾を見つけたり、設計を単純化するためにも利用される。

原因結果グラフ技法の特徴

ソフトウェアテストにおいて、有則・無則という概念[1]がある。一般的に、有則とは動作が定義された入力条件の組を指し、無則とは組み合わせても何の影響も及ぼさない入力条件の組を指す。原因結果グラフ技法は、組合せテスト技法とみた場合に有則系のテスト(設計)技法に分類される。

表1. 組合せテスト技法の分類

有則・無則

原因結果グラフ技法の手順は一般的に以下の通りです。

  1. テスト対象を分析して原因結果グラフを作成する
  2. 原因結果グラフから論理関係を網羅するデシジョンテーブルを作成する
  3. デシジョンテーブルをもとにしてテストケースを実装する

テスト対象を分析してグラフ化することは、単なるテスト設計という作業だけではなく、設計書や仕様書の整理という作業とも言い換えられます。この作業によって、テスト対象となるプログラム・システムに潜む矛盾を見つけだしたり、設計の単純化を促進することもできます(セルフレビューやリファクタリングの効用)。

実際に原因結果グラフを作成する場合は、分析作業とグラフ作成の作業を繰り返します。そのたびにグラフの修正が必要となるため、一般的にはホワイトボードや付箋紙、その他支援ツールが必須となります。さらに、テスト条件の組合せを表すデシジョンテーブルに変換する際、一定のスキルが必要であり、テスト条件の因子数が多くなればなるほど、手作業で実施することが困難となります(技法の理解、時間的制約、正確性の問題)。

原因結果グラフの構成

原因結果グラフは「ノード」「論理関係」「制約」の3つの要素で構成される。

ノード

ノードとは、真偽値(True or False)を持つなんらかの条件を表した要素で、ソフトウェアテストでは「入力条件」や「イベント」あるいは「期待結果」「事後条件」にあたり、数学的には「命題」にあたる。

論理関係

一般的に原因結果グラフにおける論理関係は、AND と OR をさす。1つ以上の原因(A、B、C)がすべて成立する場合にある結果(X)が成立することを図1のように表現し、で関係を表現する。

AND

図1. 論理関係 AND の例(X = A AND B AND C)

同様に1つ以上の原因(A、B、C)のいずれか一つが成立する場合にある結果(X)が成立することを図2のように表現し、で関係を表現する。

OR

図2. 論理関係 OR の例(X = A OR B OR C)

原因結果グラフでは、論理演算子を挟んで左側に原因(入力条件やイベント)を配置し、右側に結果(出力結果)を配置し、特に原因側のノードを「原因ノード」、結果側のノードを「結果ノード」と呼ぶ。

単純な論理関係は AND、OR のみで表現できるが、通常はノードを論理関係で結合するバリエーションとして「否定(NOT)」と「階層構造」が必要である。これらについて解説する。

  • 否定(NOT)
  • 原因ノードの条件を逆(数学的には補集合)にして論理関係を表現する場合は、否定(NOT)を用いる。原因結果グラフでは、図3のようにアルファベットの N を模した記号を記載して表現する。

    NOT

    図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)

    Constraint1

    表3. 原因結果グラフで用いる制約(REQ、MASK)

    Constraint2

    参考文献・引用文献

    [1] ソフトウェアテストの展望: SW機能テストから、システム挙動の評価へ, 松尾谷徹(デバッグ工学研究所), JaSST’07 Tokyo 招待講演


    CEGTestにxlsx形式でのエクスポート機能を追加

    xlsx形式のエクスポート機能

    CEGTest(セグテスト)のエクスポートに xlsx 形式でのダウンロード機能を追加しました。
    1シート目はデシジョンテーブル、2シート目はカバレッジ表です。本当は、3シート目に原因結果グラフの元データを、4シート目に原因結果グラフの画像を張り付けたかったのですが、ちょっとそこまで実装できませんでした。

    URL はこちら。

    CEGTest(ウェブ版)
    CEGTest(ダウンロード版:v1.6-20130907)

    なお、今回の機能追加では、XLSX.js を利用させていただきました。

    原因結果グラフの演習

    原因結果グラフ技法を使いこなすためには、グラフをたくさん描くことが大事です。ここでは、2009年からTEFが主催する勉強会で紹介した演習問題を取り上げます。難易度(★~★★★★★)のやさしい順にひとつずつ原因結果グラフを作成して、模範解答と見比べて、違いを見つけてみましょう。

    この演習問題のもとになった勉強会は、秋山浩一さん、鈴木三紀夫さんのご協力によるものです。この場を借りて御礼申し上げます。
    また、原因結果グラフは仕様の曖昧さや作成者の解釈によって異なることがあり、softestが作成した解答例と一致しなくても不正解ではありません。ノードのつけ方や制約のつけ方の違いを確認してみましょう。

    原因結果グラフ テスト支援ツール
    CEGTest(セグテスト)

    解答例についての問い合わせ
    本ページのコメントでお問い合わせいただくか、メールアドレス宛てまでお願いいたします。

    難易度:★☆☆☆☆
    迷惑電話防止機能 [2009年3月4日 演習]

    電話帳に登録していない相手や、電話番号を通知してこない相手から電話がかかってきたときに、指定した時間が経過した後に着信音が鳴る。
    ただし、メモリ登録外着信拒否を「ON」に設定していると本機能は使用することができない。

    (携帯電話マニュアルより)

    解答例 (画像, 14.9K)
    解答例 (CSV, 0.5K)
    解説



    難易度:★☆☆☆☆
    オフサイドルール [2009年3月4日 演習]

    オフサイドというルールは、「オフサイドポジションにいる選手に対して、パスを出す事を禁止する」というものである。
    ここで「オフサイドポジション」とは以下の条件を全て満たした位置の事を指す。

    1. 相手陣内にいる
    2. ボールより前にいる
    3. 相手の2番目に後ろの選手よりゴールラインに近い位置にいる

    (Wikipediaより)

    解答例 (画像, 17.7K)
    解答例 (CSV, 0.6K)
    解説



    難易度:★★☆☆☆
    献血を断られるケース [2009年3月4日 演習]

    • 献血する人への負担軽減の理由から
      • 体調がよくない
      • 睡眠不足(ただし、当日の採血計画を大きく下回る状況で医師の許諾があれば献血可能)
    • 輸血される側の安全の理由から
      • 特定の病気に罹患したことがある
      • 海外から帰国後4週間

    (Wikipediaより)

    解答例 (画像, 29.9K)
    解答例 (CSV, 1.1K)
    解説



    難易度:★★★★☆
    JR乗車券類の誤購入の場合の取扱方法 [2009年3月4日 宿題]

    第293条

    1. 旅客が、誤つてその希望する乗車券、急行券又は特別車両券と異なる乗車券、急行券又は特別車両券を購入した場合で、その誤購入の事由が駅名の同一・類似その他やむを得ないと認められ、かつ、係員がその事由を認めたときは、正当な乗車券、急行券又は特別車両券に変更の取扱いをする。
    ただし、指定急行券及び指定特別車両券については、この取扱いをしない。

    (JR東海 旅客営業規則より)

    解答例 (画像, 42.8K)
    解答例 (CSV, 1.9K)
    解説



    難易度:★★☆☆☆
    ニート(厚生労働省の定義) [2010年2月9日 演習]

    • 15歳~34歳、未婚であって家事・通学をしていない人
    • 学籍はあるが、実際は学校に行っていない人
    • 既婚者で家事をしていない人

    (Wikipediaより一部抜粋)

    解答例 (画像, 34.2K)
    解答例 (CSV, 0.9K)
    解説



    難易度:★☆☆☆☆
    インストールの仕様 [2009年3月4日 例題]

    Administratorまたは、Power Userがログインしている場合に、ディスク容量があれば、インストールを開始することができる。

    解答例 (画像, 13.7K)
    解答例 (CSV, 0.6K)
    解説



    難易度:★☆☆☆☆
    投函可能な年賀状 [2009年3月27日 例題]

    裏面にプリント、もしくは、手書きのどちらかあるいは両方があり、表面に送り先の記載がある年賀状は投函できる。

    解答例 (画像, 10.8K)
    解答例 (CSV, 0.5K)
    解説



    難易度:★★☆☆☆
    定額給付金 [2009年3月27日 演習]

    給付対象者1人に付き12,000円が、また65歳以上及び18歳以下の者については20,000円が給付される。

    (Wikipediaより抜粋)

    解答例 (画像, 11.0K)
    解答例 (CSV, 0.4K)
    解説



    難易度:★★☆☆☆
    ATM手数料 [2009年3月27日 演習]

    「引出」「預入」「振り込み」機能があり、夜23時~翌朝8時までは手数料が発生する。ただし、優遇会員の場合は、終日手数料がかからない。

    解答例 (画像, 18.3K)
    解答例 (CSV, 0.6K)
    解説



    難易度:★★★☆☆
    携帯電話の音楽再生中の着信処理 [2009年3月27日 演習]

    携帯電話の音楽再生中の着信処理に対する以下の要求に対して原因結果グラフとカバレッジ表およびデシジョンテーブルを作成しなさい。

    1. 音楽ファイルは、本体メモリと、メモリスティックに格納できる
    2. 音楽再生中に電話がかかってくると音楽が止まり着信ベルが鳴る
    3. 着信応答には次の2つの方法がある
      • 本体の通話ボタンを押す
      • ハンズフリーヘッドセットの通話ボタンを押す

    解答例 (画像, 27.6K)
    解答例 (CSV, 1.6K)
    解説



    難易度:★★☆☆☆
    電話機 [2009年5月29日 例題]

    受話器を取るか、スピーカーボタンを押して、発信音を確認してから電話番号を押すことで電話をかけることができる。

    解答例 (画像, 16.4K)
    解答例 (CSV, 0.8K)
    解説



    難易度:★★★★☆
    フォルダのクリック方法 [2009年5月29日 例題]

    シングルクリックのときのみ、アイコンの下線状態の選択ができる。
    (ダブルクリックで開くを選択すると下線状態の選択は意味が無くなる)

    解答例 (画像, 47.5K)
    解答例 (CSV, 2.4K)
    解説



    印刷時の用紙サイズ [2009年5月29日 例題]

    用紙サイズは、A4, B4, A3, B5の4種類あるが両面可能な用紙はA4とB4のみ。




    仮運転免許の路上運転 [2009年4月20日 宿題]

    仮免許を所持して、以下に箇条書きする基準に該当する運転免許保持者を指導者として助手席に同乗させ、「仮免許練習中」標識を所定の位置に装着した自動車で、路上練習をすることができる。

    同乗指導者の資格は、

    • 練習する自動車を運転可能な第一種運転免許保持者で、運転経験が通算3年以上
    • 練習する自動車を運転可能な第二種運転免許保持者

    のいずれかである。ただし、上の条件を満たしていても、免許停止処分中は同乗指導者となることができない。

    (Wikipediaより抜粋)




    コピー・アンド・ペースト [2009年5月29日 演習]

    コピーしたい範囲を選択したうえで一定の操作を行うことでクリップボードにデータをコピーでき、クリップボードにコピーされたデータは、一定の操作で他の箇所に貼る(ペーストする)ことができる。一定の操作とは、

    • Ctrl-C、あるいは、範囲選択中に右クリック「コピー」
    • Ctrl-V、あるいは、コピーデータがあるときに右クリック「貼り付け」

    (Wikipediaをもとに作成)




    遊園地の入園料 [2010年2月9日 演習]

    遊園地の入園料

      大人 小学生
    一般 2,000円 1,000円
    団体 1,800円 900円
    • 市内在住の小学生は入場料は無料となります。
    • 65歳以上の方、6歳未満のお子様は無料となります。
    • 17時以降、県外からの来場者はトワイライトチケット(500円)でご入場いただけます。




    風呂リモコンのテスト [2009年4月20日 宿題]

    仕様

    1. リモコンの仕様
      • 風呂ボタンを入れると風呂が沸く(ただし浴槽に水があること)
      • 風呂を沸かしている間は給湯優先ボタンを入れておかないとカラン・シャワーからお湯は出ない(水が出る)
      • それぞれのボタンにはステータスランプが右上についている
    2. 蛇口ハンドルの仕様
      • 右に回すとシャワーから水(またはお湯)が出る
      • 左に回すとカランから水(またはお湯)が出る

    Photo



    ボウリングのスコア計算 [2009年5月29日 演習]

    点数の計算法

    1. フレームにおいてスペア・ストライクがない場合(オープンフレームと呼ぶ)、2回の投球で倒したピンの本数がそのフレームの得点となる。
    2. スペアを出した場合、倒した本数である10点に加え、次の1投球で倒したピンの本数がこのフレームの得点に加算される。
    3. ストライクを出した場合、倒した本数である10点に加え、続く2投球で倒したピンの本数が加算される。つまり次の投球もストライクだった場合は、さらにその次の投球(2フレーム先の第1投球)で倒したピンの本数まで加算される。
    4. 第10フレームのみ、スペア・ストライクを出した場合、3投して倒したピンの総数を第10フレームの得点として計算する。
    5. 各フレームの得点の合計が1ゲームの得点となる。最高得点は300点となる。

    (Wikipediaをもとに作成)