「GIHOZ」クラウド型テスト技法ツールを使ってみたよ

こんにちは。さすらいのQAエンジニア@illyponです。
[世界にバグは必要だ。](http://decadence-anime.com/)

さて、[ACCESS Advent Calendar 2020](https://qiita.com/advent-calendar/2020/access) 4日目は　**「GIHOZ」クラウド型テスト技法ツールを使ってみたよ**という話です。

# 突如リリースされたGIHOZ

つい先日[VeriServeさん](https://www.veriserve.co.jp/)から[クラウド型テスト技法ツール「GIHOZ」](https://www.veriserve.co.jp/gihoz/)なるものが突然リリースされました。
はたしてGIHOZは何にどのぐらい使えるのか。気になっているテスト関係者も多いと思いますので、今回の記事では実際に試していきたいと思います。

# GIHOZってこんな感じ

先に結論を書いておきます。

- GIHOZは、もともとテスト技法を知っていて、テスト設計もバリバリできる人が使うと生産性が上がる。
- これからテスト技法を習得したい人が学習のお供に使うとGood。[「ソフトウェアテスト技法練習帳」](https://gihyo.jp/book/2020/978-4-297-11061-1)とも相性がよさそう。
- 機能は限られているので、今後の機能追加、UI改善に期待していきたい。

# サポートするテスト技法

GIHOZがサポートしているテスト技法を確認しておきましょう。今のところ以下の4つですね。

- ペアワイズテスト（ペアワイズ法）
- デシジョンテーブルテスト
- 状態遷移テスト
- 境界値分析

![gihoz1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538769/a009fb82-5802-a3c4-e0e8-ffd1c59b9df1.png)

どれもテストエンジニアにはおなじみの技法ですね。サポートされる技法は今後少しずつ増えていくのかな？ペアワイズテストは年寄りにはおなじみですが、最近では使ってない人も多いと思うので、ちょっと何言ってるかわからないという人にはあとで少しだけ説明します。ではひとつひとつ見ていきましょう。

# ペアワイズテスト

まずはペアワイズテストですね。ペアワイズテストの作成を始めると、初期値としてサンプルデータが入っています。まずこれを抹殺しましょう。表をドラッグして複数行を選択し、右クリックから**行を削除**を選択します。

![gihoz2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538769/193e940b-a404-5a01-30ed-260a14e7e9ad.png)

サンプルデータがなくなってきれいになったところで、実際にテストデータを入力していきましょう。

今回は「朝ごはん、昼ごはん、夜ごはんをどんな組み合わせで食事をしても体調不良にならないか？」という謎のテストをすると仮定してデータを作りました。朝ごはん、昼ごはん、夜ごはんでそれぞれ選択できるメニュー(値)は1つのみで、メニューは以下の通りしかないというものです。

![gihoz3a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538769/88d76fbe-f0df-d172-c528-f7ea0f50d368.png)

たったこれだけの選択肢しかないのに、実際には108通りの組み合わせがあります。ここからさらにパラメータ、値がちょっと増えるだけで、組み合わせの数は急速に増えてしまいます。これがいわゆる組み合わせ爆発というやつですね。手動でテストするとしたら面倒くさくて死にそうです。これをどうにかするのがペアワイズ法です。

データの入力が済んだら「テストケース生成」ボタンをクリックします。すると、ペアワイズ法が自動的に適用され、ペアワイズ法がどうやってテストケースを間引いているのかをあなたは理解する必要もなく、間引かれた結果のテストケース一覧を入手できるのです。

![gihoz4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538769/465cf713-776f-2234-86e5-4cdf30f1afd5.png)

テストケースが36個だけになりました。ずいぶん減りましたね～。絞り込まれたテストケースをやるだけで、すべての組み合わせのテストをしたのと同じ効果があるって話です。実にありがたいですよね。

## 組み合わせに制約を設定する

制約を設定すると、この組み合わせはありえないといったものを抽出テストケースから除外することができます。逆に特定の組み合わせは絶対にテストするようにすることもできます。

たとえば、先ほどのテストケースの抽出結果によると、昼ごはんがラーメンだったのに、夜ごはんにもラーメンを食べてしまうという事態が発生していました。これを避ける制約を作ってみましょう。GIHOZでは制約式と制約表のふたつの方法から選択できます。

制約式で書くのであれば以下のようにPICT形式で書けばいいみたいです。昼ごはんがラーメンだったら、夜ごはんはラーメンではない、という意味になります。

```
if [昼ごはん] = "ラーメン" then [夜ごはん] <> "ラーメン";
```

制約表を使う方がより簡単で、現在設定されている制約の全体がわかりやすいです。
**昼ごはんが～だったら**ということを設定したいので、昼ごはんに関する制約のテーブルに記述します。
制約表で設定する場合は以下のようにします。**\#は否定を表しています。**

![gihoz5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538769/e3ddaa35-a27d-f90a-2b98-f239d30645db.png)

「テストケース生成」ボタンをもう一度押して、昼も夜もラーメンという組み合わせが表示されなくなったことを確認します。
なお、この状態で「保存」ボタンを押さないとテストケース生成結果が保存されないので注意です。

また、GIHOZでは一度制約式または制約表を選択してしまうと、別の方式に切り替えることはできないみたいです。このあたりに柔軟性が欲しいところです。

## テストケースをダウンロードする

テストケースを表示した後に「CSVダウンロード」ボタンを押すと、UTF8エンコードのCSV形式でテストケース一式をダウンロードできます。

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

デシジョンテーブルを書くことに特化した作成ツールになっています。補助機能としては、**重複している条件があると教えてくれるので便利**ですね。試しに作成したデシジョンテーブルが以下になります。とても簡単に作成できました。

![gihoz6a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538769/d4675b8c-4df5-0529-f36a-31846964d932.png)

あいにく作成したテーブルを出力する機能はないようですが、テーブル全体を選択してコピーすれば、テキストだけはGoogleスプレッドシートなどに移すことは可能です。

# 状態遷移テスト

状態遷移図をお絵描きするだけで、状態遷移表にして出力してくれるという便利機能になっています。
試しに以下のような状態遷移図を書いてみました。

![gihoz7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538769/05abd377-f587-7813-1c80-12285dca3130.png)

この状態で「状態遷移表とテストケースを更新」ボタンをクリックすると、以下の3つが自動的に生成されます。

- 状態遷移表 (状態×イベント)
- 状態遷移表 (前状態×後状態)
- 無効遷移を含めた全遷移テストケース

初期値では1回だけ状態遷移が発生する経路を網羅するテストケース（0スイッチテストケース）が生成されます。ひとつのテストケースで複数状態遷移させたいときは、**生成するテストケース（複数選択可）** にて1スイッチ以上を選択してください。

これまた便利な機能ですね。ただし、状態遷移図の描画ツールの使い勝手があまり良くなくて、たったこれだけの図なのに意外と時間を食ってしまいました。

# 境界値分析

最後はみんな大好き、境界値分析のツールですね。変数と呼ばれている数直線に、境界値をプロットしていくことによって同値クラスができあがる、そこからテストケースを生成してくれるという仕組みになっています。試しに作成してみた数直線が以下になります。（どこかの料金表をイメージしました。）ちなみに同値クラスのラベル部分を右クリックすることで、有効クラスと無効クラスの切り替えができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538769/0b6c9502-420d-1ab5-7ec6-197e9b8d7b95.png)

ちょっと文字が見えないところがあって残念ですが、境界値分析の結果を他人に説明するにはもってこいの絵が描けました。これだけでも使う価値がある気がします。この状態で「同値パーティション一覧を更新」ボタンを押すと、同値クラスの一覧が生成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538769/df5999b3-22de-7edf-b86b-469da9ae37aa.png)

同値クラスが意図通りであれば、さらに「テストケースを更新」ボタンを押してください。同値分割のテストケースと境界値分析のテストケースが自動的に生成されます。期待動作欄は当たり前ですが自動では生成されませんので空欄になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538769/a099a6b4-1518-7c2b-1190-669fb43cb9a2.png)

## 気になった点

境界値分析はテストの本質でもあるので、いいなあと思う反面、いろいろと気になるところもありました。

- 数値しか扱えないため、作成できるテストの幅が狭い（境界値って数字だけじゃないわけで）
- 変数を追加したときに最小値と最大値を指定しまうと、最小値と最大値の外側にある同値クラスを扱えない（なので通常は指定しない方がよさそう）
- 境界をドラッグして修正できそうなUIだが実際にはできない
- 一度作成した変数を修正できない（削除はできる）
- 一度作成した境界を修正できない（削除はできる）
- 境界を追加できない同値パーティションがある（幅の狭いところはダメみたい）
- パーティションの見た目の幅が実態とあっていない
- 生成されたテスト結果に期待結果を記入できるが**保存されない**（ダウンロードしたCSVには含まれるけど）

# 最後に

今回はGIHOZの紹介ということでテスト技法については触れませんでした。記事の中でペアワイズ法がとてもいいもののように書きましたが、実際には制限事項や落とし穴も多く、効果があるかどうかは使い方次第ですし、そのほかの技法についても同様です。GIHOZでできることの範囲を理解しながら使うことが大切かもしれません。

とまあ、いろいろと書いてきましたけど、こういったツールが無料で使えるっていうのはありがたいですね。特にWebサービスであるという点が素晴らしい。積極的に活用してテスト業界を盛り上げていきたいものです。