テスト自動化には自動化が進んでいる分野と、そうでない分野に分かれます。
現在、単体テストやカバレッジ計算、UIテストなどは自動化ツールも普及しており、テスト自動化の動きが進んでいます。対して、結合テストや受け入れテストなどはまだ自動化ツールも少なく、これからの動きに期待したい分野となります。
今回は、以下の図にあるように、それぞれの分野でのテスト自動化ツールに焦点を当て、テストの自動化ツールにはどのようなものがあるのかをご紹介したいと思います。
網羅的なテストを自動化するツール
網羅的なテストの自動化には、CI(Continuous Integration:継続的インテグレーション)ツールが使われます。この分野では、Jenkinsが広く使われており、いまやCIツールのデファクトスタンダードとなっています。
Jenkinsは、もともとソフトウェアのビルドを自動化するために使われていましたが、最近では、テストの自動化ツールとしても広く知られています。例えば、あらかじめ設定することで、ソースコードに変更が加わったタイミングで自動的に単体テストを実行する、ビルドするタイミングで機能の動作を確認するスモークテストを自動実行する、ソフトウェアの構成が変わったときに構成確認のテストを実行する、といったことが可能になります。
また、Jenkinsと並ぶCIツールとして、ビルドやテスト、デプロイなどを自動実行するクラウドサービス「CircleCI」や「Travis CI」も出てきています。どちらもクラウドベースのソースコード管理サービス「GitHub」と連携し、ソースコードに変更が入ったタイミングで、ビルドおよびテストを実行するサービスです。
今までは、CIやテストの実施は社内のビルドサーバやテストマシンで実行することが多かったわけですが、CircleCIやTravis CIのようなクラウド型のCIツールが登場したことで、よりクラウドサービスを利用した開発が可能になってきています。
特定のテストに特化した自動化ツールとフレームワーク
次に、特定のテストに特化した自動化ツールおよびフレームワークをご紹介いたします。
(1)単体テストの自動化
単体テストの自動化には「xUnit」と呼ばれるフレームワークが広く使われています。これは単体テストのためのテストフレームワークの総称であり、例えばJavaでの開発向けであれば「JUnit」があります。JUnitは、現在多くのプロジェクトで使われていますので、聞いたことのある方も多いのではないでしょうか。その他、C言語であれば「CUnit」など、Java以外にもC++, Ruby, Pythonなど多くの言語向けの単体テストフレームワークが提供されています。xUnitはアジャイル開発において、テストファーストや、リファクタリングの前提となる非常に重要な要素なので、アジャイル開発を行なっているチームでは単体テストの自動化はすでに行われているのではないでしょうか。
(2)テストカバレッジ計測の自動化
テストケース全体のうちどれだけ実施したかを示すテストカバレッジ(テストの網羅率)が、ソフトウェアの品質を保つための重要な指標となっています。テストカバレッジの数値が、ソフトウェアの品質保証にもつながるのです。テストカバレッジの計測においても「COVERALLS」や「CodeConv」といったクラウドサービスが提供されています。
これもCircleCIやTravis CIと同様に、ソフトウェアに変更が入ったタイミングで、自動的にソフトウェアのテストカバレッジを測定します。また同時に、ソフトウェアのモジュールやパッケージ単位でもカバー率を測定し、前回のソフトウェア変更時のカバー率との比較も行ないます。例えば、新しく加わったソフトウェアへの変更によりカバー率が下がった場合は、警告が表示されます。このように、テストカバレッジを測定することで、継続的なソフトウェア品質の向上につなげられます。
(3)UIテストの自動化
今までUI(ユーザーインタフェース)テストは、テスト自動化の中で大きな課題でした。特にWebシステムのUIテストは、ブラウザごとにテストの仕組みを用意する必要があるため、複数のブラウザを横断したUIテストを実施するのは非常に困難でした。この状況を大きく改善したのが、オープンソースのテスト自動化ツールである「Selenium」です。
Seleniumは直接ブラウザを操作するのではなく、「WebDriver」によりAPIを利用してブラウザを操作します。それにより、単一のAPIで複数のブラウザを自動的に操作できるようになりました。Seleniumを活用することで、WebアプリケーションのUIテストを自動化することができるのです。W3C(World Wide Web Consortium :Web技術の標準化を行う団体)での標準化も進んでおり、2018年6月5日付けで、WebDriver APIがW3C標準の勧告に到達しました。
次に、スマートフォンアプリのUIテストはどうでしょうか。iOSについてはAppleから「XCUITest」というUIテストの自動化フレームワークが提供されており、AndroidについてはGoogleから「UI Automator」というフレームワークが提供されています。ただ、どちらもそれぞれのOS に特化したテストフレームワークになります。
このように、異なるプラットフォームのUIテストを共通の仕組みで自動化できるのが「Appium」になります。AppiumはSeleniumのWebDriverの仕組みを利用することで、iOSとAndroidを横断したUIテストが可能となります。
受け入れテストの自動化フレームワーク
このように、単体テストおよびUIテストの自動化については、CIツールやSelenium、Appiumといった自動化ツールが提供されていますが、結合テストや総合テスト、受け入れテストなど、テストの中にはまだまだ自動化できていないものがたくさんあります。このような大きな枠組みをターゲットにしたテスト自動化のフレームワークが出てきていますので、最後に紹介したいと思います。
受け入れテストのために開発されたテストフレームワークとして「Robot Framework」があります。ただ、受け入れテストに限らず広い使途で活用できる仕組みとなっています。このRobot FrameworkはPythonベースのテスト自動化フレームワークであり、テストデータへのインタフェース、テスト実施の枠組み、そしてテストを実施する環境へのインタフェースがそれぞれ定義されており、モジュラー化されたブロックを組み合わせることで自動化の仕組みを構築できるようになっています。今後はこのようなフレームワークも活用しながら、テストを自動化しソフトウェアの品質の向上につなげていくとよいのではないでしょうか。