SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Developers Summit 2024 Summer レポート(AD)

まずはここから!GUIテスト自動化ツール導入のポイントと「Squish」で実践するビヘイビア駆動型テスト

【24-A-3】なかなか実現しないGUIテスト自動化~まずはここから始めましょう!

  • X ポスト
  • このエントリーをはてなブックマークに追加

 ソフトウェアの品質は、ソフトウェアそのものだけではなく企業の評価にも影響を与える。もしソフトウェアの品質がユーザーの期待を損ねるものであれば、SNSでよくない評判が拡散されてしまい、企業価値を損ねることにもつながりかねない。品質向上に欠かせないバグ修正は後工程ほどコストが高くなるため、早い段階からテストを確実にこなしていくことが重要だ。GUIテスト自動化の課題とソリューションについて、Qt Group 坂本強氏が解説する。

  • X ポスト
  • このエントリーをはてなブックマークに追加

GUIテスト導入をスムーズに!手動テストと自動テスト併用のススメ

 ソフトウェア品質保証に欠かせないのがテストだ。もしバグを見逃してしまうと致命的な事態を引き起こしかねない。「シフト レフト テスティング」「テストファースト」と言われるように、テストを早い段階から万全に行いたいという気持ちはありつつも、現実はそう簡単ではない。

 ソフトウェア開発部門はテスト部門に「時間がかかる」「テスト結果が期待と異なる」「不具合の内容が不明確」「求める項目がテストされていない」などの悩みや不満を抱えている。一方、テスト部門は「工数がかかるため一部のテストしか実施できない」「人員が不十分」「テストの再利用ができていない」「ツールを導入したが使いこなせていない」「テストの抜け漏れが解決できない」といった苦悩を抱えていたりする。

 加えて、スマホの台頭により、GUIを備えたアプリケーションが増加しており、ユーザーはUI/UXを重視している。UI/UXの向上につながるGUIテスト、つまり操作や画面表示に不具合がないかのテストはますます重要になっている。

Qt Group ソリューションエンジニア 坂本 強氏
Qt Group ソリューションエンジニア 坂本 強氏

 テストには手動と自動があり、項目が少なければ手動でもいい。多少複雑でも手動なら対応可能だ。しかし項目や量が増えてくると、自動化が必要になる。GUIテストでも同様だ。

 長年ハードウェア設計やソフトウェア開発に従事し、現在Qt GroupでQA(品質保証)製品を担当している坂本強氏は「自動GUIテストでは、時間とコストを節約することが可能となり、テスト所要時間を短縮し、問題点の予測可能性が向上します。結果として製品の市場投入までの時間を短縮できます」とメリットを述べる。

 GUIテスト自動化ツールの検討段階ではテスト項目が多すぎる、全ての手動テストを置き換えようとする、難易度の高いテストを優先しようとするなど、欲張ってしまうと導入を断念してしまうことになりかねない。

 坂本氏のおすすめとしては、初期段階は難しい項目は手動テストに頼ること。JenkinsなどのCI/CDの導入を並行して検討すること。スクリプトを書ける人材を確保し、計画的なメンテナンスができるようにすることなどがある。特に「品質保証は組織的なプロセスと認識し、部門を超えた取り組みや協力の体制を整えることが重要な要素となります」と坂本氏は強調する。

 自動テストの初期段階は手動テストよりも労力が多くかかるものだ。自動テスト導入の効果が出るまで、つまり手動テストよりも労力が少なくなるまでには、手動テストと自動テストを共存させるのが望ましい。新規部分は手動テストで、既存部分は自動テストにする。手動テストが終了したら、スクリプトを作成してリグレッションテストへ組み入れるという流れにする。

ツールの効果が出始めるまでの道のり

 ソフトウェアの自動テストツールを選定する時のポイントとして、坂本氏は、使いやすさ、複雑なことを自動化できる(スクリプト作成可能)、クロスプラットフォーム、サポートの即応性を挙げる。

テストケース作成の工数削減に寄与、GUIテスト自動化ツール「Squish」

 ここからは具体的なテスト(品質保証)ツールの1つ、Qt Groupの「Squish(スクイッシュ)」と「Coco」について解説していこう。SquishはGUIテスト自動化ツールで、Cocoはコードカバレッジ分析ツールだ。両者は独立しているため、どちらか片方のみの導入も可能で、別のツールと組み合わせることもできる。

QA(品質保証)ツールを使用した開発フロー提案

 まずはメインのSquishから深掘りしていこう。効率的かつ迅速なGUIテストの自動化を実現するツールだ。テスト対象はデスクトップ、モバイル、組み込み、Webアプリケーションと幅広く対応している。

 現状ではQt フレームワークだけではなく、Visual Studio(Windows)、Java、 macOS、iOS(Xcode)、Android Studio、Web(HTML5)、Tk、VNCなど、GUIツールのほとんどを網羅している。それぞれ「Squish for Windows」というように、「Squish for 〜」とエディションが分かれている。

 実際にテストを実施する場合にはテストケースを作る必要がある。その点、Squishではアプリ操作のレコーディング機能があり、テストスクリプトを自動生成することができる。具体的には、まずレコーディングボタンを押し、次に実際のアプリケーションを操作することで、その時の操作がスクリプトとして出力される。

 ここで出力されるスクリプトの言語はPython、JavaScript、Perl、Ruby、Tclから選ぶことができる。記述方法はプログラム的に順番を記述するものと、後述するビヘイビア駆動型テストの2種類ある。

 GUIテストで重要になるのがオブジェクトの認識だ。SquishではObject MapによるObject検索を行うため、位置情報に依存せず、UI Objectが移動しても検索可能だ。このObject Mapの実体はオブジェクトのPropertyとValueのリストとなる。オブジェクトツール内から検索し、特定するという手法をとっている。オブジェクトを特定すると検証ポイントを作成するが、これは先述したようにGUI操作とエディタによる記述のどちらも可能だ。

 検証手段は次のように多岐にわたる。オブジェクトのプロパティ検証、画像検証(スクリーンショット取得)、Table検証(RowとColumnのデータを一括で検証)、Visual検証(画像とプロパティのハイブリッド)が可能だ。

 こうした機能を持つSquishはEclipseベースの「Squish IDE」と呼ばれる開発環境と各種モジュールから構成されている。実際にユーザーが使うのはSquish IDEで、ここでテストスイートを作成する。起動すると下図のような画面が開き、テストケースやスクリプト、テスト結果が表示されている。

Squish IDEツールの起動画面

 各種モジュールとはsquishrunner、squishserver、squish hookなどがあり、それぞれのプロセスに機能分散されており、TCP/IP通信している。

 テスト環境はホストとターゲットが同一の環境に共存するだけではなく、ホストとターゲットが異なる環境に存在するケースも可能だ。後者は主に組み込み機器などになる。またテスト対象となるアプリケーションは1つ(単体)だけではなく、複数のアプリケーションが連携して稼働するような場合でもSquish IDEからテストすることも可能だ。

Squishの構成例

 Squishを導入すると、先述したようなレコーディング機能でテストケース作成工数を削減できることが大きなメリットとなるだろう。テストケースはスクリプトで記述するので機能拡張が容易であり、再利用性も高くなる。高度なオブジェクト認識機能もGUIテストには有利に働くだろう。複数のプラットフォームで動作するアプリケーションや組み込み機器のテストも可能だ。

Squishで実践するビヘイビア駆動型テスト

 Squishにおけるテストケースのスクリプト記述方法は2種類ある。従来通りスクリプトで記述するスクリプトテストベースと、振る舞いを中心としたシナリオ(テスト項目)を記述するビヘイビアテストベースがある。後者はユニット検証を動作の視点からテストしていく。ビヘイビア駆動型テストはシナリオベースなので、Gherkin手法の「Given(初期のコンテキスト)」「When(トリガーとなるイベント)」「Then(期待される結果)」で記述していくのが特徴だ。

スクリプトテストベースとビヘイビアテストベース

 なおビヘイビア駆動型テストは日本語でテストシナリオを記述できるので、とっつきやすく、分かりやすい。技術者以外の関係者が記述することも可能だろう。またテスト手順とテスト内容を分離して記述できるため、重複を防止し、再利用もしやすい。

 実際のBDD(ビヘイビア駆動開発)テストスクリプトの記述例を見ていこう。ここでのアプリケーションはコーヒーマシンで、カプチーノを選んでいれるというシナリオを「Given、When、Then」で記述する。続いて実際のアプリを操作することで、スクリプトを自動で生成していく。レコーディングを開始するとコントロールバーにステップが表示されるので、必要に応じて検証ポイントを埋め込んでいく。図のサンプルはシンプルだが、実際は肉付けしたものとなる。作られたスクリプトは再利用も可能で、別のシナリオで共通するステップがあればステップを共有することも可能だ。

BDDテストスクリプトの記述例

 最後にCocoについて触れておこう。Squishとは別のツールで、コードカバレッジ分析ができる。坂本氏は「コードカバレッジをやる方は少ないと思いますが、ぜひともやっていただきたい」と力をこめる。

 コードカバレッジ分析とは、自動テストでチェックされたコードの割合を測定するものだ。テストされていないコードやデッドコード(実行されないコード)の発見にもつながる。テストケースの不足を検出し、品質向上につなげるのに役立つ。

 Cocoの対応言語はC、C++、C#、Tcl、SystemC、QMLで幅広く対応している。カバレッジ測定機能の自動埋め込み(Coverage Scanner)、カバレッジ結果を分析管理するためのGUI(Coverage Browser)などの機能がある。

 Cocoはビルドシステムへの組み込みが容易で、すぐにコードカバレッジ分析を開始できる。分析結果はGUIで直感的に確認できるのもメリットとなる。テストごとの実行時間の比較や、ソースコードを修正した場合には影響を受けるテストケースを抽出することも可能だ。

 最後にまとめとして坂本氏は「QAツールの導入でテスト工数削減、容易なテストケース記述、テストケースの再利用などが実現します。振る舞いベースのテストで技術者以外の参加を促進できて、カバレッジ測定ツールと連携すればテストの抜け漏れ防止にも役立ちます。今回は紹介できませんでしたが、テスト結果のデータ管理「Test Center」もあります。興味があればぜひお声がけください」と述べた。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加

提供:Qt Group

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20038 2024/09/25 12:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング