ソフトウェアの品質を学びまくる

ソフトウェアの品質、ソフトウェアテストなどについて学んだことを記録するブログです。

Veriserveのテスト設計サポートサービス、GIHOZを触ってみる - その2

The Model.

 Veriserveさんがリリースしたテスト設計モデリングツール*1「GIHOZ」について、前回記事の続きです。

www.kzsuzuki.com

 残り3つの機能も触ってみましょう。

gihoz.com

今回は「デシジョンテーブルテスト」「状態遷移テスト」「ペアワイズテスト」の3つが、どんな感じで動くのかを紹介します。
 全体の所感と、わたしが勝手に期待していることは、次の記事に書きます。

デシジョンテーブルテスト

 今回も、『練習帳』の問題を使ってみます。ブログ記事はこちらです。

www.kzsuzuki.com

 仕様の概要は以下の通り。

  • 通常、1杯490円で提供されます。
  • 16:00から17:59まではハッピーアワーのため、1杯290円で提供されます。
  • クーポンを使うと、利用時間にかかわらずはじめの1杯のみ100円で提供されます。
  • ハッピーアワーでもクーポンは利用できます。
  • その時点で最も安い価格で提供されます。 1杯目のビールの価格を表すデシジョンテーブルを作成してください。

 「条件」にあたるパラメターは、「利用時間」「クーポン有無」になりそうですね。
 「動作」は、「金額」でいいでしょう。

 GIHOZでの初期画面はこれです。

f:id:kz_suzuki:20201128120528p:plain

  各セルは直接入力が可能です。

f:id:kz_suzuki:20201128120559p:plain

 条件を入力し、それに対する値を入力。また次の条件を入力、・・・と進めていきます。
 動作も同じですね。

f:id:kz_suzuki:20201128120617p:plain

 また他人とお作法が違うかもしれないので書いておきますが、わたしはテストケースを横に展開する前に、条件と値を書き出します。みんなそうだよね!?

 さて、ここから各値のY/Nを入力して、テストケースにしていきます。

f:id:kz_suzuki:20201128120635p:plain

 ハイフンが入っているセルで、「Y」「N」「-」のいずれかを選んでいきます。
 条件と値を決めたらY/Nの全組み合わせが自動生成され、ユーザはそれを剪定していくのかな?と想像していましたが、そうではないですね。

f:id:kz_suzuki:20201128120652p:plain

 Y/Nを入力したのが、1~4です*2

 テストケース#5は、「1つの条件で2つ以上の値がYになったらどうなる?」という観点。
 テストケース#6は、「Y/Nの割り当てが同一のテストケースがあったらどうなる?」という観点。
 後者については、期待通り、テストケース重複の警告が出ています。

f:id:kz_suzuki:20201128120704p:plain

 挿入や削除は、セル上の右クリックから。
 テストケースの上にある「有効/無効」は、同値クラスの有効無効とは関係なくて、以下の2つの目的で利用すると想定します。

1. 実施しない組み合わせを落とす。

 たとえば、そもそもありえない組み合わせを対象外にする。
 ヘルプで言及されているのも、この使い方です。

2. デシジョンテーブルの「簡単化」を表現する。

 これはわたしの勝手な使い方かも。
 たとえば仕様として、利用時間が「16:00から17:59の場合は一律100円」とするのであれば、Y/Nと有効/無効を以下のように修正することになります。
 また、ハイフンを「N/A」(どちらでもよい)の意味で使っています

f:id:kz_suzuki:20201128120718p:plain

 さて、ここまで作って気づいたのですが、「条件」部と違って、「動作」部は階層構造化できません。
 動作の方も、複数のパラメタを指定したいことありそうだけどなー。たとえば「金額」と、「お通し有無」とか。

 とりあえずは、金額を入力していきます。

f:id:kz_suzuki:20201128120728p:plain

 完成しました。
 同値分割/境界値分析と違って、ここから、各条件の値を指定した具体的テストケースへ落とし込むわけではないですね。

 ともあれ、直観的にテーブルを作っていけるツールに仕上がっています!

状態遷移テスト

 状態遷移テストについては、白紙からのスタートは厳しいということか、

f:id:kz_suzuki:20201128120736p:plain

 みんな大好きストップウォッチの状態遷移図がすでに描かれています。

f:id:kz_suzuki:20201128120744p:plain

 で、描いた状態遷移図に基づいて、スイッチカバレッジを指定してテストケースを自動生成します。  0スイッチと1スイッチを選択して生成してみましたが、とても速いです。

 まず状態遷移表。
 状態×イベントの形式と、状態×状態の形式、両方が生成されます。

f:id:kz_suzuki:20201128120754p:plain

 生成した状態遷移表の空きセルには、ignorecan't happen が選択できます。astah*と同じですね。
 この2つの値の意味については、この記事にメモしています。

www.kzsuzuki.com

  • ignore: 当該イベントが発生しても、発生しなかったように扱う。
  • cannot happen: 当該イベントは発生しえない。

似ているように見えますが、前者は「イベントが発生しうる」、後者は「イベントが発生しえない」ので、根本的に違いますね。

 なお、遷移すべき「状態」を入力して、状態遷移図に反映させるということはできません。図から表への一方通行です。

 ちょっと操作方法が直観的でないのが2つあったので、メモしておきます*3

1. 遷移図上のオブジェクトの削除は、[Delete] ボタンで。

 右クリックしてもメニューは出ません。

2. 自己遷移は、状態オブジェクトの端っこをドラッグアンドドロップ。

 「+」ボタンだと、自動的に別の「状態」も描かれてしまうので、「自己遷移はサポートしていない!?」と思いましたが、そんなはずありませんでしたね。ただちょっと操作は慣れが必要そう。

 まだおぼつかないですが、

f:id:kz_suzuki:20201128120803p:plain

 以下の記事で書いた例で、遷移図を描いてみました。

www.kzsuzuki.com

 1スイッチカバレッジのテストケースを生成!

f:id:kz_suzuki:20201128120813p:plain

 きれいに生成されました。

 表じゃなく図なので操作には慣れが必要ですが、すんなり描けますね。
 現時点で描けるのは状態と遷移のみなので、アクションなどの要素もサポートされるとさらに夢が広がる。

ペアワイズテスト

 こちらも初期画面で、サンプルが表示されます。

f:id:kz_suzuki:20201128120831p:plain

 ・・・が、なんかよくわからん!? ディスクフォーマットのテストでしょうか。
 「因子」「水準」という独特の用語は使わず、「パラメタ」「値」としています。

 『練習帳』の問題4.5.2のの仕様。

  • メタボ検診と婦人科検診は、年齢が35歳以上の人のみ選択できる
  • 脳検診は、年齢が45歳以上の人のみ選択できる
  • 婦人科検診は女性のみ選択できる

 これを適用していくと、

f:id:kz_suzuki:20201128120840p:plain

 このようになります。これもやはり、Excelのようにサクサク入力できます!

 なおここでやらかしたのですが、「保存」しないで「←一覧」を押すと、警告なしで一覧画面に戻ってしまいます・・・。

 次に、パラメタ間の「制約」を定義していきましょう。

f:id:kz_suzuki:20201128120853p:plain

 ここからパラメタ間の制約を追加していくのですが、ここで注意!

f:id:kz_suzuki:20201128120901p:plain

 ここで「制約表」「制約式」のどちらかを選ぶと、その後に選択し直す方法がありません*4
 今回はPictMasterでもおなじみの、表形式での制約入力をしてみます。

f:id:kz_suzuki:20201128120910p:plain

 PictMasterでは、IF にあたるパラメターのセルを色塗りするのですが、GIHOZではパラメタごとに制約を書く仕組みですね。
 年齢が20、34の場合は、任意追加項目で「メタボ検診」「婦人科検診」を選択できないという制約を、

f:id:kz_suzuki:20201128120917p:plain

 適当に書いてみました。

f:id:kz_suzuki:20201128120928p:plain

 適当に書いたらエラーになりました。

 このエラー内容を見ると、IF の部分は「20, 34」という1つの値として解釈されているのと、THEN の方も「メタボ検診か婦人科検診のどちらかと異なる」と解釈されていることがわかるので、修正します。

f:id:kz_suzuki:20201128120938p:plain

 おそらくですが、制約の表現の仕様として

  • IF に当たる部分は、値を1つだけ書ける。
  • THEN にあたる項目に複数の値を書くと OR で結ばれる。

となっているので、条件をばらして書いてあげる必要がありそうです。意図した通りの制約になっているかを確認したいので、できればこの制約表に対応する制約式が、エラーじゃないときも見えるようになれば・・・!

f:id:kz_suzuki:20201128120947p:plain

 制約を一通り埋めてみました*5

 さて、これでもエラーが出ます。

f:id:kz_suzuki:20201128120955p:plain

 よく見たら、「婦人科検診」を「婦人科」と書いていました。警告の意味は今回の場合、「任意追加項目が『婦人科』となる組み合わせが1つもない」ということです。定義されていない値が制約に入っているために起きるエラーです。
 これを修正して再度、組み合わせを生成すると、

f:id:kz_suzuki:20201128121003p:plain

 エラーなしできんと生成されました!

 GIHOZのせいではないですが、制約の書き方とそのエラーに慣れる必要がありそうですね。

*1:とわたしは呼んでいる。

*2:ヘルプを見ると、Yだけを入力し、それ以外はハイフンという使い方になっている。Nの使い道がわからない。

*3:両方ともヘルプに描かれている。ちゃんと読もう。

*4:正確には、わたしには見つけられませんでした。

*5:年齢に関する制約の可読性が悪いので、# で排除するのではなく、選択できるものを列挙することで制約をシンプルにできるかも。でもそれだと、今度は仕様との比較で面倒になる。