CIにおけるテスト管理のベストプラクティス


継続的インテグレーションの一環として、多くの開発チームがテストの自動化に取り組んでいます。
単体テストやコード解析、APIテストやUIテストなど、多くのテストが自動化の対象としてJenkinsなどのCI/CDツール上で動作するよう、日々検討や構築が進められていることと思います。テストには既に自動化されたテストや未だに手動で実施しているテストがあり、自動化されたテストは利用するツールにより結果のフォーマットが異なります。手動テスト結果はスプレッドシートでまとめられていることが多いのではないでしょうか。

今回は観点を変えて、こうしたテストの実施自体ではなく、テストして得られた結果をうまく活用するための方法を紹介しましょう。


目次


散らばったテスト結果

開発チームでは、様々な種類のテストが実施されます。

  • 単体テストによるメソッド単位での動作テスト
  • コード解析によるコーディングルールやセキュリティ脆弱性のテスト
  • APIテストによるビジネスロジックのテスト
  • UIテストによる製品全体の機能テスト

これらのテストにより、開発している製品ソフトウェアに問題が見つかればなるべく早くに修正し、問題の影響を出来る限り小さくします。これが継続的インテグレーションの目的です。開発プロセスや開発ルールに則り、必要なテストが自動化されCIとして実施されますが、開発チームやQAチームがそれぞれのテスト結果をどのように確認しているかに注目したことはありますか?

たとえば、ある単体テストの結果はJUnit形式で出力されるため、開発者ごとに開発環境にインポートして確認し、APIテストやUIテストの結果はXMLやJSON形式で出力され、スクリプトで集計またはWebブラウザーを用いてダッシュボードツールを確認します。テスト結果は自動化に用いたツールに依存しており、それぞれのツールに合わせた結果の確認をしなければなりません。
CI/CDで重要なことは、書いたコードが正しく動作することを確認し、すばやくリリースすることです。テストした結果をばらばらに確認することは非効率であり、早期リリースを阻害します。

さらにUIテストにおいては、すべてのUIテストを自動化していることは稀であり、手動テストが必ず発生します。この記事をお読みの方は、自動化されたUIテストの結果と手動テストの結果をどのように確認しているかを思い出してみてください。SeleniumのHTMLレポートを確認しつつ、Excelに記載された手動テストの結果も漏らさずチェックする必要があります。また、テスト結果を集計するために、複雑で、間違いの許されないマージ作業も必要となり、うんざりする作業が続きます。とても非効率です。

テスト結果を一か所にまとめる

CI/CDの恩恵を最大限に享受するために、非効率なテスト結果の確認を改善し、簡単にテスト結果が確認できる環境を整えましょう。

答えは簡単です。「ここを見ればテストがすべて確認できる」という場所を用意するだけです。注意しなければならないのは、CIツール自体はテスト結果を細かく確認する用途には不向きであることを理解することです。テスト結果をおおまかに把握するためには役立ちますが、テスト結果を管理する専用のツールを用いることが賢明です。

テスト管理

テスト管理 (Test Management) は円滑なテスト活動を目的としています。ソフトウェア開発でおこなわれるさまざまなテストやテスト結果を集中管理し、ここを見ればテストがすべて確認できる仕組みを提供します。

テスト管理ツールには、テストケースやテスト結果の管理以外に、テスト結果をリリースごとに集計したり、特定の条件で結果をレポート出力する、テストツールと連携し結果を取り込むなどの機能が搭載されています。テスト管理を実現する専用のツールとしては、オープンソースのTestLinkや弊社が販売するTestRailなどがあります。

TestRailでは、APIテストツールであるSOAtestや、UIテストツールであるRanorex、プロジェクト管理ツールのRedmine(およびLychee Redmine)と容易に連携でき、REST APIを用いてその他のツールと連携するためのインターフェイスが用意されています。
テスト管理ツールを用いることで、CIで実施されたテストはテスト管理ツールのインターフェイスを通して、データベースに記録され、わかりやすいUIでテスト結果をフィードバックします。散らばった、フォーマットの異なるテスト結果を確認する必要はありません。また、自動化されたテスト、手動のテストも区別なく、一緒に集計することができます。

上記の画面では、自動化されたUIテストとAPIテスト、手動テストの結果を1つのテスト実行として一覧表示しています。UIテストやAPIテストで失敗しているテストは何かがすぐにわかります。また、この図の例では、APIテストでカート編集APIのテストがFailedのため、それが原因でUIテストのカート追加が失敗している可能性があるかもしれません。

このように、複数のテストを実行している場合、テスト結果を1か所でまとめて確認できることには大きな利点があります。

また、テスト結果が1ヶ所にまとまることにより、実行の度に成功/失敗が変わる「不安定なテスト」を容易に発見・特定することが可能になります。このようなテストは原因の確認のためにチームメンバーの貴重な時間を使ってしまう要因の一つとなることから、テストを修正して安定させることにより、テストとCIをより効果のあるものに改善することができます。

まとめ

CIではさまざまなテストが実行されますが、テストツールによりテスト結果が異なるため、ビルド対象の開発ソフトウェアのテストの全体像が見えにくくなります。そこで、CIにてテスト管理ツールを用いることで、自動テストの結果を集約し、テストを安定させましょう。CIの効果をさらに高めることができます。

TestRailでは、テストに関するブログやすぐにご利用が可能なデモサイトをご用意しています。この機会にお試しください。