「テスト自動化」というと、まず先にテストツールが頭に思い浮かぶと思いますが、最近のプログラミング言語の中にはテストの自動化機能を含んでいるものもあります。単体テストの自動化に広く使用される「xUnit」のようなテストフレームワークは、あくまでもテストライブラリーとして提供されているものであり、プログラミング言語そのものが持つ機能ではありません。アジャイル開発の普及に伴い、より効率的な開発を行うために、テスト自動化に関連する機能を備えたプログラミング言語が増えています。その一つが「Go言語」です。Googleによって開発されたGo言語は、シンプルな言語仕様と、並列処理の簡便さから急速に普及しています。このGo言語には、単体テストのフレームワークに加えて、テストカバレッジの自動測定機能が含まれています。これまでは外部のパッケージや、商用ソフトウェアを導入しなければ測定できなかったカバレッジ測定ですが、その機能がプログラミング言語に標準で備わっているのは画期的といえるでしょう。Processor)言語である「Clojure(クロージャー)」があります。Clojureには「clojure.spec」というライブラリーが提供されており、これによって関数の仕様を記述することで、テストケースを自動生成できます。このように、ソースコードの中に仕様を記述することでソフトウェアの動作を規定するという考え方は、「契約プログラミング」あるいは「契約による設計」という形で以前から存在していますが、関数の仕様記述がテストと直結しているのはテスト自動化という観点から、非常に興味深いと思います。今後もプログラミング言語の標準機能あるいは拡張機能として、さまざまなテスト自動化の仕組みが提供されるのではと考えます。最近のテスト自動化ツールの中で最もインパクトがあったのが「WebDriver」です。WebDriverは本連載第2回でも取り上げましたが、Webアプリケーションのテスト自動化ツール「Selenium」に備わるフレームワークで、高速かつ軽量で汎用的なWebブラウザエミュレーターの機能を備えていることが大きな特長です。Chrome」「Firefox」「Safari」といったブラウザごとにそれぞれ異なったAPIを使ってテストを行なっていました。2.0」のアップデートのタイミングで、ブラウザ非依存の共通APIフレームワークとしてWebDriverが導入されました。WebDriverの活用により、ブラウザ非依存のテスト自動化が可能となり、各ブラウザベンダーもWebDriverに対応したAPIを提供するようになりました。Consortium(W3C)」でもWebDriverの標準化が進められるなど、Webアプリケーションのテスト自動化ツールにおいてデファクトスタンダートとなりつつあります。今後、WebDriver上に、より抽象度の高いテスト自動化のフレームワークが構築され、WebDriverとAI(人工知能)との連携によりこれまで人間でしかできなかった部分のテスト自動化が進むことが期待されます。今後のテスト自動化にインパクトを与える技術の一つにAIがあります。AIによる画像解析技術の発達により、今までは分析が難しかったPCやスマートフォンの画面出力をコンピューターが認識できるようになります。これは、テスト自動化において計り知れないインパクトがあります。これらの技術革新は、ゲームやスマートフォンアプリのテストに大きく寄与することが期待されます。AIの発達によって、予測不可能な入力データを生成することも可能になります。予測不可能な入力データを与えることで意図的に例外を発生させソフトウェアの不具合や脆弱性を洗い出す「ファジング」では、AIを活用して入力データを生成するということも今後行われるでしょう。このようなさまざまな技術の発達により、今までは人間でしかできないと思われていたテストの多くが自動化でき、より正確に実施できるようになるでしょう。その分、テストにかけていた時間や労力を、人間でしかできない作業に向けられるようになるのだと思います。GNU「Zebra」を開発。2015年株式会社アプリックスのCTOに就任しBeaconの技術開発・サービス開発に従事。2018年デジタルハーツにCTOとして参画。テスト自動化に関するお問い合わせ各種サービスについて、お気軽にご連絡ください。