⚖️

gTAAってなんなの?

2024/12/07に公開

はじめに

先日、JaSST Nano Vol.22(https://jasst-nano.connpass.com/event/276764/)にて「gTAAってなんなの?」について発表しました。
この発表内容について記載します。

この記事のお断り

  • 自動テストオタク向けの内容である
  • 筆者自身はTAE保有者レベルではあるが、提唱した人物ではない

JSTQB TAEについて

gTAAとは、JSTQB TAEに記載のある概念です。
上記はJSTQB Test Automation Engineerの略です。
これらの内容については、下記の方の記事が詳しいので、ご参照ください。

https://note.com/fuutaudis2741/n/n359579adb430

gTAAとは

gTAAとは、generic Test Automation Architectureの略で、日本語では汎用テスト自動化アーキテクチャと呼びます。
これらは水平レイヤー構造となっています。


Advanced LevelシラバスVersion 2016–– テスト自動化エンジニア24ページより引用

また、JSTQBシラバスでは下記のように定義しております。

gTAAは、gTAAのレイヤー、コンポーネント、インターフェースを表す。これらは特定のTAS向けのTAAとして具体化される。これにより、構造化されたモジュール形式のアプローチを利用して、以下の方法でテスト自動化ソリューションを構築できるようになる。
・内部および外部で開発したコンポーネントによってTASを具体化できるように、TASのコンセプト、レイヤー、サービス、インターフェースを定義する
・シンプルなコンポーネントを利用して効果的かつ効率的なテスト自動化を行えるようにする
・各種ソフトウェアの製品ラインや製品ファミリー、およびソフトウェア技術やツールが異なるものを含め、別のTASの開発やTASの改良の際にテスト自動化コンポーネントを再利用する
・TASの保守や改良を容易にする
・TASユーザー用の基本的なフィーチャーを定義する
Advanced Level シラバス Version 2016–– テスト自動化エンジニア24ページより引用

gTAA=>TAA=>TAS
と具体化していくということがポイントになります。

本記事では、gTAAのそれぞれのレイヤーの説明を試みます。
より具体的に知っていただくために、概要の説明についてはシラバスから引用しつつ、具体的なテストツールを紹介することによって理解を深めることを試みます。

gTAAを理解するにはコツがあります。
それはより身近な下位のレイヤーから理解していくことです。

ですので本記事では下位のレイヤーから順番に考えていきます。

テスト適合レイヤー

テスト適合レイヤーは、SUTのさまざまなコンポーネントやインターフェースを自動テストに適合させるために必要なコードを提供する。API、プロトコル、サービスなどを通じてSUTに接続するための各種アダプターを提供する。
Advanced Level シラバス Version 2016–– テスト自動化エンジニア 25ページより

具体的なツール

  • ブラウザを使用する製品の場合、Selenium、Playwright
  • 組み込みの場合はxilsなど

これらのツールは「テスト対象を操作すること」に重点を置いたツールだと考えています。
システムテストの自動化の際に最初の障壁になるのがこのレイヤーで、このレイヤーの選定次第でテスト設計方針や戦略が変わってしまう場合もあります。

テスト実行レイヤー

テスト実行レイヤーは、テストケースとテスト結果記録作業の実行をサポートする。選択されたテストを自動的に実行するテスト実行ツールと、記録およびレポート用のコンポーネントを提供する。
Advanced Level シラバス Version 2016– テスト自動化エンジニア 25ページ

具体的なツール

  • pytest、JUnit
  • Jenkinsといったテスト実行をキックするCIツール、そのプラグイン
  • Allure Reportなどの実行結果を表示するツール

テスト適合レイヤーのテスト実行を始めたり、これらの実行結果を得たりするツールです。

テスト定義レイヤー

テスト定義レイヤーは、テストスイートおよびテストケースの定義と実装をサポートし、SUTやテストシステムの技術およびツールからテスト定義を分離する。ハイレべルおよびローレべルのテストを定義する手段が含まれており、これらのテストはテストデータ、テストケース、テスト手順、テストライブラリコンポーネント、およびそれらの組み合わせによって処理される。
Advanced Level シラバス Version 2016 – テスト自動化エンジニア 25ページより引用

具体的なツール

  • キーワード駆動テストのキーワード定義表
  • CodeseptJSなどのラッパー
  • CucumberなどのBDDツール

「どのようなテストをするか」を定義したものです。
定義した内容はテスト実行レイヤーに渡され、テスト適合レイヤーにて製品の動作の形で実現されます。

そもそもスクリプトそのものも含まれるかもしれませんが、そこは私にはまだ答えがでていません。

また、テスト実行レイヤーに渡されてないただのテストケースはテスト定義レイヤーに含まれるかというと私は疑問に思っています。

テスト生成レイヤー

テスト生成レイヤーは、テストケースの手動または自動での設計をサポートし、テストケースを設計する手段を提供する。
Advanced Level シラバス Version 2016– テスト自動化エンジニア 25ページより引用

実際のツール

  • eggPlantなどのモデルベースドテストに対応したツール
  • Autify Genesisなどのテストケース自動生成に対応したツール
  • GIHOZなどのテスト設計ツール

テスト定義レイヤーに渡す、いわゆる「テスト値」を導出するために使用します。
このレイヤーに該当し、テスト自動化のシステムに組み込まれている例はあまり見ません。

2024年現在だと、生成AIを使ったものも見られます。
この分野については発展が楽しみだと思っています。

テスト自動化の三世代

テスト自動化技術の発展には、「テスト自動化の3世代」という形で整理される方もいらっしゃいます。
太古の昔にはTABOKという魔術書があったとのことですが、今は存在しないようです。

ですので、今回は松木さんの下記の資料を参考にしています。
JaSST’13 Hokkaido Tutorial テスト自動化分析- 頼れる大人のテストエンジニアリングと金勘定

リニアスクリプト/レコード&プレイバックの世代

この世代の特徴としてテスト生成からテスト適合までひとつのツールで完結して、gTAAすべてのレイヤーが含まれることが挙げられます。
機能分割/データ駆動などの構造化技法が使われず、「テスターの動作をリプレイする」という性質を持ったテスト自動化技術の世代です。

機能分割/データ駆動の世代

ページオブジェクトモデルなどを使用した、構造化プログラミングが自動化でも行われた時代だと認識しました。
テスト生成レイヤーは自動/手動は問わず分離され、テスト定義からテスト適合までのレイヤーがこの時代では含まれます。

キーワード駆動/モデルベースドテストの世代

テスト実行レイヤー、テスト適合レイヤーが分離され、テスト生成レイヤー、テスト適合レイヤーの2レイヤーのみをカバーするツールの時代と言われています。
ただ、この世代が現実にあるかどうか、私は観測できていません。

テスト自動化ツールや技術の未来について

一見、世代が進むにつれてツールの責務の分担が進み、柔軟なTAS構築が可能になっている傾向があるように見えます。
しかしながら、最近流行っているSaaS自動テストプロダクトはそんな方向性にはいっていないように思えます。

これらについては、「自動テストツール自体が便利になった」ともいえますが、自動テストエンジニアがTAAを構築するニーズが少ないということも言えるかもしれないと考えました。

残された謎

  • gTAAの出典はどこにあたるのか?ISTQB technical committeeが作ったものなのだろうか?
  • マネジメントとの関係性は一体なんなのだろうか?
  • テスト自動化フレームワークとの関係性は一体なんなのだろうか?
  • gTAAをどのようにしてTAAにしていくのか
    • gTAAを使ったり、TAA設計している人はいるのだろうか?

有識者の反応をご紹介

発表の際には、下記のような意見をTwitter上でいただきました。

yoshikiitoさま
https://twitter.com/yoshikiito/status/1638142398785290240?s=20

ぱいん🍍さま

https://twitter.com/pineapplecandy/status/1638140160696262658?s=20Kazu

SUZUKIさま
https://twitter.com/kz_suzuki/status/1638130713534021633?s=20

さいごに

本記事については積極的リライトしていきたいと考えていますので、コメントをいただければ幸いです。

GitHubで編集を提案

Discussion