連載
» 2018年08月31日 10時00分 公開

KeyConductors:今、あらためて考えるテスト自動化【最終回】

開発における「テスト」と聞くとまずツールを考えるが、中にはテストに関連した機能を含むプログラミング言語もあるという。それがテストフェーズでどう活用できるのだろうか。

[石黒 邦宏,デジタルハーツ]

テスト自動化のこれから

 本連載「今、あらためて考えるテスト自動化」を通してテスト自動化の仕組みやツールなどについて解説しましたが、最終回となる第4回では、日々進化するテスト自動化の動きとテスト自動化のこれからについて説明します。

1.プログラミング言語とテスト自動化

 「テスト自動化」というと、まず先にテストツールが頭に思い浮かぶと思いますが、最近のプログラミング言語の中にはテストの自動化機能を含んでいるものもあります。単体テストの自動化に広く使用される「xUnit」(第2回参照)のようなテストフレームワークは、あくまでもテストライブラリーとして提供されているものであり、プログラミング言語そのものが持つ機能ではありません。

 しかし、アジャイル開発の普及に伴い、より効率的な開発を行うために、テスト自動化に関連する機能を備えたプログラミング言語が増えています。

 その一つが「Go言語」です。Googleによって開発されたGo言語は、シンプルな言語仕様と、並列処理の簡便さから急速に普及しています。このGo言語には、単体テストのフレームワークに加えて、テストカバレッジの自動測定機能が含まれています。これまでは外部のパッケージや、商用ソフトウェアを導入しなければ測定できなかったカバレッジ測定ですが、その機能がプログラミング言語に標準で備わっているのは画期的といえるでしょう。

 もう一つの例にJavaの仮想マシンで動作するLISP(List Processor)言語である「Clojure(クロージャー)」があります。Clojureには「clojure.spec」というライブラリーが提供されており、これによって関数の仕様を記述することで、テストケースを自動生成できます。

 このように、ソースコードの中に仕様を記述することでソフトウェアの動作を規定するという考え方は、「契約プログラミング」あるいは「契約による設計」という形で以前から存在していますが、関数の仕様記述がテストと直結しているのはテスト自動化という観点から、非常に興味深いと思います。今後もプログラミング言語の標準機能あるいは拡張機能として、さまざまなテスト自動化の仕組みが提供されるのではと考えます。

2.WebDriverとテスト自動化

 最近のテスト自動化ツールの中で最もインパクトがあったのが「WebDriver」です。WebDriverは本連載第2回でも取り上げましたが、Webアプリケーションのテスト自動化ツール「Selenium」に備わるフレームワークで、高速かつ軽量で汎用的なWebブラウザエミュレーターの機能を備えていることが大きな特長です。

 従来、Seleniumは「Internet Explorer」や「Google Chrome」「Firefox」「Safari」といったブラウザごとにそれぞれ異なったAPIを使ってテストを行なっていました。ただ、これではブラウザをまたいだ共通のテスト基盤が作れないため、「Selenium 2.0」のアップデートのタイミングで、ブラウザ非依存の共通APIフレームワークとしてWebDriverが導入されました。

WebDriverの活用により、ブラウザ非依存のテスト自動化が可能となり、各ブラウザベンダーもWebDriverに対応したAPIを提供するようになりました。さらに、Web技術の標準を策定する「World Wide Web Consortium(W3C)」でもWebDriverの標準化が進められるなど、Webアプリケーションのテスト自動化ツールにおいてデファクトスタンダートとなりつつあります。

 今後、WebDriver上に、より抽象度の高いテスト自動化のフレームワークが構築され、WebDriverとAI(人工知能)との連携によりこれまで人間でしかできなかった部分のテスト自動化が進むことが期待されます。

3.AIとテスト自動化

 今後のテスト自動化にインパクトを与える技術の一つにAIがあります。AIによる画像解析技術の発達により、今までは分析が難しかったPCやスマートフォンの画面出力をコンピュータが認識できるようになります。これは、テスト自動化において計り知れないインパクトがあります。これらの技術革新は、ゲームやスマートフォンアプリのテストに大きく寄与することが期待されます。

 また、AIの発達によって、予測不可能な入力データを生成することも可能になります。例えば、予測不可能な入力データを与えることで意図的に例外を発生させソフトウェアの不具合や脆弱性を洗い出す「ファジング」では、AIを活用して入力データを生成するということも今後行われるでしょう。

 このようなさまざまな技術の発達により、今までは人間でしかできないと思われていたテストの多くが自動化でき、より正確に実施できるようになるでしょう。その分、テストにかけていた時間や労力を、人間でしかできない作業に向けられるようになるのだと思います。

Copyright © ITmedia, Inc. All Rights Reserved.

会員登録(無料)

ホワイトペーパーや技術資料、導入事例など、IT導入の課題解決に役立つ資料を簡単に入手できます。