最近、ソフトウエア開発において注目を集めているキーワードの一つに「継続的インテグレーション(Continuous Integration、以下CIと略)」があります。今回は、CIを実現するツールと前回までに紹介した各種テスト自動化ツールとの連携によるテスト自動実行について紹介します。

 CIとは、ソフトウエア開発においてコンパイルやテストといったビルド処理を一日に何度も実行することにより、フィードバックサイクルを短くし、品質を向上させる仕組みのことです。

 CIを実施することにより、ソフトウエアの修正や変更によってコンパイルが通らなくなる不具合やデグレードなどを早期に発見できる上、その不具合がどの変更によって引き起こされたかを特定しやすくなります。そのため、品質の向上だけでなく、手戻り工数の削減も期待できます。

 CIの実現においては、コンパイルからテスト実行までの流れ(ビルド)をなるべく短い時間で手間をかけずに実行できることが求められます。そのため、テスト実行における自動化の技術が非常に重要になります。テスト実行を自動化することによって、テスト実行時間やテスト実行時の手間を減らすことが可能になります。

 また、CIとテスト自動化を組み合わせることによって、テストの実行結果の集計が可能になります。単一のテスト自動化ツールの結果の集計だけでなく、複数のツールの結果も集計できるため、ソフトウエアの品質の現状や推移をさまざまな角度から確認するのにとても役立ちます。

CIを実現するツール

 CIを実現するためには、ビルドプロセスの管理や、テストを含めたビルドプロセスの実行などの機能が必要になります。これらの機能を実現するためのツールとして、CIツールやビルドツール、テスト自動化ツールなどと呼ばれる、さまざまな種類のものがあります。現在は、これらのツール群の連携によってCIを実現することが一般的になっています。

 ここでは、テスト自動実行の前段となるテスト対象やテスト環境の準備を効率化するためのツールとしてCIツールとビルドツールについて紹介します。

(1)CIツール
 CIツールはビルドのプロセスを管理するためのツールで、CIの中核となる存在です。主な機能は以下の通りです。

  • ビルドの設定
  • ビルドの自動実行
  • 実行結果の通知
  • 実行結果の表示
  • バージョン管理
  • テスト自動実行

 CIツール自体がこれらの機能を持つ場合もありますが、多くはプラグインなど他の外部ツールと連携することによって実現しています。テスト自動化についても、前回までに紹介したようなテスト自動化ツールとの連携によって実現します。代表的なCIツールとしては、以下のようなものがあります。

  • Jenkins
     Javaで実装されたオープンソースソフトウエアのCIツール
  • Team Foundation Server
     米Microsoftのコラボレーションサーバー。CI機能も備える

(2)ビルドツール
 ビルドツールは、ライブラリやソースコード間の依存関係の解決、コンパイル、テストの実行といったビルド手順を、スクリプトや設定ファイルなどから自動実行するためのツールです。すなわち、CIにおいて主にビルドの実行部分を担うツールです。

 ビルドツールもCIツールと同様にテスト自動化ツールとの連携が可能です。例えば、ビルドツールのスクリプトによって単体テスト/静的解析/GUIテストの実行順序や結果の形式などを指定し、それぞれのテスト自動化ツールを呼び出すことができます。

 ビルドツールにはさまざまな種類があります。代表的なビルドツールには以下のようなものがあります。

  • C言語向け:Make、CMake
  • Java向け:Ant、Maven
  • Ruby向け:Rake
  • Groovy向け:Gradle
  • .NET向け:MSBuild

 米MicrosoftのMSBuild以外は、オープンソースソフトウエアとして提供されています。いずれも基本的には、特定の開発環境やプログラミング言語向けに使いやすいように作られています。そのため、開発環境や開発に用いているプログラミング言語に応じて適切なビルドツールを選択してください。