Technical Information

テスト自動化現場の「いま」と、次のステップに進むために

asset_approach_column_test-automation03_hero.jpg

市場のニーズや取り巻く環境が急激に変化する現在、開発サイクルの高速化と素早い価値提供を促進するテスト自動化は、ますますその重要性を増しています。本講演では、これまでさまざまなお客様に対してテスト自動化の技術支援を行ってきた私自身の経験や公開されている情報を元に、テスト自動化の現状から効果的なテスト自動化を行うために有効な知見や考え方、さらに世の中で行われているテスト自動化の実例などを紹介していきたいと思います。

※この記事は、『ベリサーブ アカデミック イニシアティブ 2020』の講演を基にした内容です。

伊藤 由貴

株式会社ベリサーブ
研究企画開発部
自動テスト推進課 課長
伊藤  由貴 

テスト自動化の「いま」

1.テスト自動化が「あたりまえ」の時代に

かつてお客様から相談を受けた中で多かったのは「テスト自動化を導入したいが、どうやって始めたらいいか分からない」というものでした。また、頑張って自分たちでテスト自動化を進めたものの「運用できなくなってしまった」という声も少なくありませんでした。
10年ほど前は、テスト自動化の成熟度が十分ではなく、まだテスト自動化に及んでいなかったり、たとえ、テスト自動化を導入したとしても十分な効果を得られていなかったり、という企業が数多く存在する状況だったように思います。

ところが昨今では、お客様から受ける相談内容も変化してきました。例えば「すでにテスト自動化をしているが、もっと効率的に運用できないか」、あるいは「社内の一部チームでテスト自動化に成功したのでこれを社内で横展開したい」といった、導入後の試行錯誤に関するものが増えているのです。
このような相談の変化からも、テスト自動化はすでに世の中では「あたりまえ」になってきているということを実感します。逆に言えば、テスト自動化はもはや先進的な取り組みではないということです。テスト自動化が先進的だった時代なら、開発のアジリティ(顧客ニーズや新たなビジネス環境に素早く適応しうる柔軟性)を高めることで他社に先んじることができたかもしれませんが、現在では「いかに他社より開発のアジリティを高めるか?」という部分に勝負は移っており、テスト自動化をやらなければ他社に遅れを取ることになりかねません。
テスト自動化は「いま」このような状況にあります。

効果的なテスト自動化のために

1.一般公開されるテスト自動化手法

現在、多くの企業ではテスト自動化導入後の試行錯誤へと課題が移ってきています。同時に、テスト自動化に成功し、またはそこから確実な効果を得られている組織が増えてきたことによって、効率的な運用のための知見や、テスト自動化できる範囲をさらに広げるための知見が公開されることも多くなりました(図1)。

図1:テスト自動化の知見の一例

2.ISTQBテスト自動化エンジニアシラバス

まず、ご紹介したいのが「ISTQBテスト自動化エンジニアシラバス※1」になります。ISTQB(国際ソフトウェアテスト資格認定委員会)というソフトウェアテストの国際認定試験を行っている団体が、そのテスト範囲を定めたものをシラバスとして作成しています。「テスト自動化エンジニア」のシラバスはまだ英語版しかありませんが、「テスト自動化の準備について」や、「テスト自動化システムのアーキテクチャ」など、テスト自動化をうまく始めて、なるべく失敗を避けて運用するための知見が豊富に掲載されています。

3.企業による知見やツールの公開

企業の例でいうと、LIFULL社では、ブラウザのテストを自動化する「Bucky」、画像差分を検出する「Gazo-san」という自社開発した自動テストツールを運用するとともにOSSとして一般公開しています(図2)。LIFULL社ではこれらの内製ツールを公開することでフィードバックを受け、さらに使いやすいツールへと進化させることを目指しています。現在ではこのように自らの知見やツールを公開して、ブラッシュアップするという取り組みをされている企業が増えています。

図2:LIFULL社のBuckyとGazo-san

4.AI自動テストツールの活用

テスト自動化をサポートするツールも充実してきており、特にAIを活用したツールが増えています。例えば、一般的にテスト対象の画面構成が変わった場合には自動テストも人間が修正しなければなりませんが、AI自動テストツールであれば、テスト対象の変更に対応してAIがテストシナリオ自体を自動で修復してくれます(オートヒーリングまたはセルフヒーリング機能)。保守にかかわる人間の手間を削減すると同時に運用コストの削減も可能になり、今後は日本国内でも導入が増えていくものと思われます(図3)。

図3:AIテストツールの例
(左:Mabl社「Mabl」、右:TRIDENT社「Magic Pod」)

5.SETロール

また、SET(Software Engineer in Test)ロールを設置している企業も現在増えています。SETロールというのは開発環境やQA環境の整備や運用、テスト自動化を含め、開発やテストの生産性を向上させるためにさまざまな取り組みを担当するロールとなります。ネット上で「SET」を検索すると、さまざまな企業で「SETの募集」や自分たちのSETロールに関する情報が公開されており、人気が高まっています。

このように、現在ではテスト自動化の導入・運用がかなり進み成果を上げている企業・組織が増えており、テスト自動化を成功させるための知見や有用な情報もかなり公開されている状況にあります。テスト自動化において、いまだ「道半ば」にある企業・組織の方は、ぜひこうした知見から自らの参考になるものを最大限に活かして、次のステップに進んでいただきたいと思います。

世の中で行われているテスト自動化

テスト自動化は現在さまざまな領域で行われていますが、実際にはそれぞれの領域ごとの難しさや環境面での違いに直面することになります。ここからはもう少し踏み込んで、それぞれのテスト自動化の課題や具体的な取り組み例を紹介してまいります。

1.組込みのテスト自動化

まず一般的に難しいと言われているのが「組込みのテスト自動化」です。ポイントはいくつかありますが、その一つに「テスト対象の操作の難しさ」があります。テスト対象を操作するために何かしら物理的なデバイスの操作が必要になる、あるいは外部からデバイスを操作するためのAPIが存在せず直接操作するしかないという場面にしばしば直面します。
こういった場合にはインターフェースの実装が工夫のポイントになります。外部から自動操作するための専用APIを実装し、コマンドラインやプログラミング言語から扱えるようにする手法がまず考えられます(図4)。
また、組込みのテスト自動化では、組込みの機器自体が気温や光、位置情報などの実環境に沿って動いている場合、テストを行う環境によって期待結果が異なる場合があります。こうした場合、自動で結果を判定することは困難になります。このような問題に対応する方法の一つとして、テスト対象には手を入れず、カメラや光センサーを用いて状態を観測する仕組みを構築する方法が考えられます(図4)。例えば、暗室の中にテスト対象とウェブカメラを入れ、そこで撮影した画像を元に、その後パソコン側でさまざまな画像認識処理を行うことで期待通りの動作がなされているかを判断します。こうした試みもすでにさまざまな企業で行われています。

図4:組込みシステムの自動テストの工夫例

2.ウェブアプリケーションのテスト自動化

ウェブアプリケーションのテスト自動化についてはブラウザという土台が共通していることからノウハウの横展開がしやすく、OSSツールやノウハウが非常に充実していることが特徴です。またAIテストツールも非常に多く、テスト自動化の導入や運用がしやすい状況にあります。

ウェブアプリケーションの自動テストにおいては、CIツールやチャットツールとの連携もよく行われています。例えば、CIツールを用いて夜間にテストを実行したり、夜間に実行したテスト結果をSlackやTeamsなどのチャットツールで通知して、朝出勤してきた開発者がその結果を確認したりするなどの実用例もあります。SlackやTeamsなどから簡単なコマンドを打つことで、プログラミングに詳しくないデザイナーやテスターの方がテスト実行する「ChatOps」を実現している企業も増えています。
また、ウェブアプリケーションにおいて、さまざまなブラウザで同じように動くことを確認したい場合には、コンテナ技術を使ってクラウド上に複数の実行環境を作り、そこでテストを並列に実行させて結果を集計(実行が終わったら環境ごと削除)するという手法も採用されています。

3.モバイルアプリケーションのテスト自動化

モバイルアプリケーションにおいてもテスト自動化をサポートするツールやノウハウは充実しています。AppiumやAirTestといったOSSや無償ツール、さらにはクラウドサービスとしてのAIのテストツールも登場し効率化に寄与しています。
一方、問題点としてはOSとOSバージョン、さらには端末のバリエーションの多さから、膨大な組み合わせパターンが発生し、さらに画面サイズやOSバージョンごとのUI差異によってテスト自動化に困難を来すことがしばしばあります。この点を解消するモバイル特有の方法としてデバイスファームの活用があります。デバイスファームでは、図5の左側写真のようにサーバーなどに実際の多数のスマートフォンを接続し、右側画面のようなアプリケーションを用意して外からネットワーク経由でアクセスし、実機での自動テストを実行することができます。

図5:デバイスファームの例

おわりに

本稿では、テスト自動化を次のステップに進めるためにというテーマでさまざまな知見や事例をお話しました。テスト自動化を「まだやっていない」という組織では、テスト自動化の専門のロールを設定することが理想です。しかし、現実的には難しいことも多いため、まずは公開されている成功事例を元に、テスト担当者がテスト自動化を始めてみる。また、テスト自動化をすでに「やっている」組織では、一般的なベストプラクティスを活用しつつ、これを自社組織に合った形にテーラリング(開発標準の手直し)を行う、小さく始めて少しずつ適用範囲を広げていくという進め方が良いかと思います。テスト自動化のノウハウを一般公開し、そこからフィードバックを得て改善のサイクルに結びつけることも有効です。このような方法により、「やっている」から「効果を得られている」状態にステップアップさせていくことができるのではないかと考えます。