MBTのツールを調査しました。その内の５つのツールを紹介します。

# はじめに
2023年もモデルベースドテスト(MBT)に取り組んできました。MBTはMBTモデルからテストケースを自動生成する技術です。MBTに関連するツールも色々と存在するようです。海外のサイトになりますが、以下のページでMBTツールが紹介されています。

- https://www.softwaretestingmagazine.com/tools/open-source-model-based-testing-tools/
- https://automated-360.com/model-based-testing/model-based-testing/
- http://mit.bme.hu/~micskeiz/pages/modelbased_testing.html

こちらで紹介されているMBTツールをいくつかピックアップして調査しました。本記事ではその中から5つのMBTツールを調査した結果を簡単にお伝えしたいと思います。

# 1.MBTsuite
　MBTsuiteはsepp.medが開発したツールです。フレームワークとしては、モデリングツールで設計されたフローチャート（MBTモデル）を入力として使用し、「Run Strategy」と「Run　Filter」を選択することでテストケースを作成します。サポートしているモデリングツールは、Enterprise Architect、IBM Rational、Microsoft Visioなどがあります。Enterprise Architect向けにはMBTassistと呼ばれるプラグインが用意されており、こちらを使用することでテストステップ、テスト値などのテスト専用のモデル要素を定義することが可能になっています。Run Strategyにより、どのようなテストケースを生成したいか、そして実施したいかを選択可能になっています。例えば以下のStrategyが用意されています。
- Full-Path Coverage: モデルの可能なすべてのパスを実施
- Random: モデルのランダムに選択されたパスを実施
- Shortest-Path: 最短パスでモデル/図を実施

　また、Run Filterにより生成するテストケースをFilterすることが可能です。例えば以下のFilterが用意されています。
- Cost：コストの上限を指定してフィルターする
- Duration：テスト実施時間の上限を指定してフィルターする
- Node Coverage：モデルのノードを網羅するようにフィルターする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541693/fd8eebe6-0071-0d43-97e9-80de604cf98f.png)


[参考]
- https://www.mbtsuite.com/
- https://www.youtube.com/watch?v=NcA-uQP3HSI

# 2.Graphwalker
　GraphWalkerはオープンソースのMBTツールです。状態遷移図のようにグラフ形式のモデルを作成できます。基本的には箱（vertex）と線（edge）を使って表現するというシンプルなモデルです。またモデル作成・編集だけではなく、様々なテストパスを生成し、実行（パスの検証）にも対応しています。パスの生成はGeneratorとしていくつかのオプションがあります。例えば以下になります。

- Random：完全にランダムな方法でモデルをナビゲートする
- weighted_random：エッジに重みを定義しておき、それを考慮してパスを生成する
- quick_random：モデルの最短パスを高速に実行しようとする

　また、Stop conditionsという機能もあります。これはパスがいつ完了するかを決定する条件になります。GeneratorはこのStop conditionsが満たされるまでパスに新しいステップを生成します。Stop conditionsもいくつかのオプションが用意されており、例えば以下にがあります。

 - edge_coverage：指定したedgeカバレッジの割合に達するまで
 - vertex_coverage：指定したvertexカバレッジの割合に達するまで
 - time_duration：指定した秒数に達するまで

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541693/b34a3fc4-d187-65eb-831c-3dde7fcbfa80.png)


[参考]
- http://graphwalker.github.io/
- https://github.com/GraphWalker/graphwalker-project/wiki

# 3.TestModeller.io
　TestModeller.ioは、BPMN(Business Process Model and Notation)形式のモデルを作成することができます。Actionsに用意されたStart、End、 Task、 Conditionといったモデル要素をdrag & dropすることでモデルを作っていくという体験になります。そしてExcel、 Visioなど色々な形式のモデルをインポートできるという特徴もあります。モデルとしてはテストシナリオを表現しているのに向いている印象でした。そのためテスト設計のためのモデルというより、テスト実装のためのモデルと言った方が近いです。また、詳しくは調査できていないですが、テストデータの生成、テスト実行の自動化、テスト管理を支援する機能があるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541693/efe66751-37c4-514f-2c68-3384804ba6b8.png)

[参考]
- https://www.curiositysoftware.ie/test-modeller
- https://youtu.be/qJL2Y7SHmO4?si=3_AY7f_Bj-1ZwDbw

# 4.HARMONY
　HARMONYはaction-state model というモデルによってテストステップを定義し、Cypress 用のテスト自動化のコード(test automation code)を生成することができるツールです。モデルはAction、Response、Test stateの形式でテキストで記述し、その内容はaction-state modelの図として視覚化されます。テストケースの自動生成ではなく、自動テストコードの生成になるため、このモデルもテスト実装のためのモデルと言った方がいいのかもしれません。また、HARMONYではRequirementsにaction-state modelを紐づけることができたり、Gherkinドキュメントの生成ができたりもするようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541693/97f2541c-571b-ac0b-6b5c-61be874ddd3c.png)


[参考]
- https://harmony.ac/
- https://testcon.lt/wp-content/uploads/2019/11/Istvan-Forgacs-Workshop-How-to-be-a-Good-Test-Automation-Engineer-in-Five-Days.pdf

# 5.Tricentis Tosca
　Tricentis Tosca はToscaのUIを通じて、テストケース作成、テストケースメンテナンスとテスト実装を可能にするツールです。テスト対象のアプリケーションをスキャンすることによりテストデータオブジェクトの構造を自動取得することができます。そして自動取得した要素を基にテストデータ、テストケースを自動生成するというものです。そのためこのツールもテスト実装、テスト自動化ツール寄りにツールという印象でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541693/21afbf8e-c481-03e9-6612-1a280f34cea8.png)

 [参考]
 - https://documentation.tricentis.com/tosca/1320/en/content/resources/webhelp/about_tricentis_tosca.htm


# まとめ
　想像していたMBTツールとしてはMBTsuiteが一番近く、活用できる場面が多い印象でした。Graphwalkerはシンプルなモデルの表現で十分な場合は活用できそうです。TestModeller.io、HARMONY、Tricentis Toscaはテストケースを自動生成する（テスト設計を自動化する）MBTツールというよりは、テスト実装、自動テスト実行を支援するツールになるかと思います。そういう意味では想像していたMBTツールではなかったのですが、これらのツールも利用状況がマッチする場合は活用してみても面白そうだと感じました。MBTツールにも色々な用途向けのツールが存在するということを知り、MBTと言っても様々な解釈があることを今回改めて感じました。