じどうかの窓口通信/racine(ラシーヌ)のご紹介


こんにちは!技術推進部 技術推進グループ 新技術研究/技術ツール開発チームです。
2018年9月より発足した技術推進部では、SHIFTの技術を結集するための社内活動を
行っています。

今回は、「じどうかの窓口通信」をお届けいたします。
以前から「それ何?」という疑問の声の多かった
GUIテスト自動化フレームワーク「racine(ラシーヌ)」について、
より詳細にお伝えしていきます。

———————————————————————————

<目次>
・はじめに:テスト自動化のピラミッド
・有名なテスト自動化ツール「Selenium」でできること、できないこと
・今のracineでできること
・今後の展望

———————————————————————————

■はじめに:テスト自動化のピラミッド
まず、一口に「テスト自動化」と言ってもそのスコープはさまざまです。
テスト「実行」の自動化だけに対象を絞ったとしても、
テストレベルによってどのような自動化を行うかは大きく変わってきます。

下の図は、自動テストの種類を端的に表す概念としてよく使われる
「自動テストのピラミッド」というものです。
自動テストには大まかにUnitテスト、API(結合)テスト、GUIのテスト
という3種類があり、それぞれの特性に合わせて分量を調整すべき
(GUIのテストだけを大量に作るのはバッドノウハウ)という考えです。

3種類の主な特徴は以下のとおりです。

・GUIテスト:
  ・実際にユーザが行うのと同じ操作をする、いわゆるEndToEndテスト
  ・最終的にシステムが正しく稼働していることを確認するには必須
  ・構築・実行ともに高コストで遅いので数は絞るべき
・APIテスト:
  ・ある程度高速であり、GUI以外のシステムが疎通していることを確認できる
  ・比較的容易に作成できるためテスターでも構築可能
  ・画面の存在しないシステムではAPIテストがEndToEndテストになることも
・Unitテスト:
  ・プログラム単体のロジックをチェックするテスト
  ・高速かつ安定的に実行できるため網羅的な確認に向いている
  ・単体のテストなので、全体の疎通確認はできない

一般的にUnitテストは開発者が担当して開発と同時に作っていき、
それ以外は開発者とテスターで協力して作成するという分担が良いと考えられており、
SHIFTでもGUIのテストを中心に実績を積み、標準化を進めてきました。

今回お話するracineも、このGUIのテストを自動化するためのものです。
APIのテストについては現在新規に開発を進めていますので、
また「じどうかの窓口通信」にて詳細にご紹介できればと思います。

■有名なテスト自動化ツール「Selenium」でできること、できないこと
「Selenium(せれにうむ)」というツールの名前を聞いたことがある、
という方は多いのではないでしょうか。

Seleniumは、Webアプリケーションのテストを自動化できる
オープンソースのツールとしてよく知られています。
SHIFTのフレームワークであるracineもSeleniumをベースにしています。

Seleniumを使うと、以下のようなことが簡単にできます。
・Webブラウザの起動・終了
・テキスト入力やボタン押下などの画面操作
・画面上に表示されたテキストやCSS情報の確認
・スクリーンショットの取得

これだけでもさまざまなテストケースを自動化できるのですが、
実際の案件でSeleniumを使ってみるとさまざまな壁にぶつかります。
SeleniumができるのはあくまでWebブラウザ内の操作なので、

・メールの受信確認
・ダウンロードされたファイルの確認
・REST APIを使ったデータ投入、もしくはデータの参照
・スクリーンショットの妥当性確認

といったことは行えません。

加えて、自動テストを作成するということは、
何らかのプログラミング言語でテストスクリプトを書くということです。
スクリプトの内容は作った本人でないと理解できず、
実行時に失敗しても何が起きているか分からず解析できないということもあります。

■今のracineでできること
racineは、Javaのプログラムによって自動テストスクリプトを作成するためのフレームワークです。
名前がついたのは最近ですが実際には2017年はじめから少しずつ案件での利用を開始しており、
10/2にv2.1.0をリリースしたところです。現在のracineは主に2つの要素からできています。

(1)すぐにテストスクリプトを書き始められる雛形
racineには、オープンソースのECサイト開発フレームワーク「EC-Cube」
に対応するテストコードが付属しています。簡単なログインのテストに始まり、
ボタン押下・テキスト入力等のシンプルな操作、複数の画面を遷移するシナリオ、
ユーザ情報や商品の情報を外の設定ファイルから与えるシナリオなど、
さまざまなサンプルが同梱されており、対応した教育コンテンツもあります。

このサンプルを参考にすることで、
新しい案件でもすぐにテストスクリプトを書き始めることができます。

(2)Seleniumではできない、かゆいところに手が届く機能
上で挙げた「Seleniumではできない」便利機能のいくつかを、racineでは実現しています。

・メールの受信確認
・REST APIを使ったデータ投入、もしくはデータの参照
・スクリーンショットや帳票PDFの妥当性確認
 ※厳密には前回実施時のスクリーンショットとの差分抽出

自動テストで確認できない項目があってそのためだけに手動の打鍵を行うとなると、
自動化のメリットは大きく減少してしまいます。
上記のようなさまざまな確認手段を用意しておくことで、
実践的に使える自動テストを構築することができます。

また、「スクリプトの内容が作った本人でないと理解できず、
実行時に失敗しても何が起きているか分からない」という問題に対しても、
レポーティングを強化することである程度対応しています。

Javaのプログラムの中に日本語の説明を埋め込むことによって、
非エンジニアでも分かりやすいテスト手順、
失敗したときのスクリーンショットなどを出力することができます。

■今後の展望
これまでのracineは、案件の中で「対応できない事象を減らす」という方向性で開発を進めてきました。
一方、どうしてもJavaのコードを多く書かなければいけないため、
テストスクリプトの質はアサインされる担当者のスキルに大きく依存するという課題もありました。

今後はこの問題を解消するため、
・必ずしも全員がJavaのコードを書かなくてもスクリプト開発ができる仕組み
・スクリプトの一部自動生成
といった生産性向上に繋がる機能を開発予定です。

また、その前段として、作成したさまざまな機能が
最新のブラウザ・OSに対して問題なく動いていることを確認し、
フレームワークとして一定の品質を保証するという取り組みも進めています。

つまりフレームワーク自体の自動テストを継続的に実施し、
問題があれば実際に案件で使っている方々よりも早くキャッチして
素早く修正するための仕組み作りです。

フレームワークの機能を余すところなくテストするためには、
専用に開発されたテスト対象のシステム(SUT = System under Test)が必要です。
そうでないと、しばらく使っていなかった機能をお客様のシステムで使ったときに
いきなり不具合が出て緊急対応が必要になる場合があるためです。

この専用SUTも、PC・スマホアプリ合わせて開発していく予定です。

この記事をかいた人はこちら