CIで変更したコードだけをテストし、テストを高速化する


単体テストは、開発者にとってソフトウェア開発で最も手間や負担が大きくなることがあります。
開発プロジェクトの規模が大きくなるにつれて新しいコードが増えます。新しいコードすべてに膨大な数のテストを作成することを考えてみてください。十分なテストを作成することは重要ではありますが、それだけの量のテストを従来の手法で作成、実行、分析するための時間と開発リソースの確保は、昨今の開発プロジェクトでは実用的ではありません。
一方で、新しく追加されたコードに関連する部分だけテストを実行することができれば、テスト実行時間を大きく削減することができるでしょう。

 CI 環境でのテスト時間

Javaの開発プロジェクトの場合、CI 環境は開発を加速させるには有効ではありますが、前段にある通り、新しいコードが増えると必然的に単体テストの数も多くなり、テストの実行時間も長くなることが大きなボトルネックになります。
CI 環境を利用して単体テストを実行する場合、ビルド毎にすべてのテストを実行することを前提としているため、コードを1行だけ変更した場合でも結果を確認するには何時間もテストを実行する必要があります。

さらに、プロジェクト規模に比例してテスト実行時間は長くなります。これは明らかに時間がかかり過ぎであり現実的ではありません。その一方でプロジェクトを熟知している経験豊富な開発者は、これまでの経験から変更されたコードに関連するものだけを手動でテスト実行することができます。
このように必要な部分だけをテストしてくれる環境を CI でも構築することができます。
Jenkinsを利用した CI 環境と  Parasoft社の製品である Parasoft DTPParasoft Jtest を併せて利用することで、最小限のテストで最大限の価値を提供できる テストプラクティスの実現を可能にします。

変更されたコードに関連する部分だけをテストする"変更ベースのテスト"とは

変更されたコードに関連するものだけをテストできる、変更ベースのテストを実現するために、 Parasoft DTP と Parasoft Jtestを使用します。
Parasoft DTP と Parasoft Jtest は構成管理システムと連携してソースコードの変更箇所を特定し、変更されたコードに影響するテストを機械的に見つけ出し、テストを実行してくれます。
では、Parasoft DTP と Parasoft Jtest がどのように変更されたコードに関連する部分だけをテストできるのか、下記のCI 環境運用例で処理の流れを簡単にご紹介します。

① ビルドの実行
ソース コードの変更が構成管理サーバーに送られ、新しいビルドがトリガーされます。

② テスト対象の絞り込み
Parasoft Jtest はどの⾏/メソッドが変更されたかによって、収集したカバレッジ イメージを相互参照することにより、関連する単体テストを特定することができます。

③テスト実行とテスト結果のアップロード
Parasoft Jtest からテストを実行し、Parasoft DTPにデータをアップロードします。

 


これら3ステップは、すべてのテストを実行するよりも規模が小さく、実行時間が大幅に短縮されます。
機械的に影響するテストを見つけてくれるため、経験豊富な開発者よりも早く、正確にテストを実行します。

変更ベースのテストを使用して CI プロセスを加速させる

変更ベースのテストは、Jenkins を利用した CI 環境 のプラグインで拡張でき、継続的なビルドの実行に関連するボトルネックをソフトウェア開発組織が減らすのに役立つ高度な機能を利用できます。
Parasoft DTP の変更ベースのテストを採用することで、開発者は余計なテストの作成、実行、分析に充てる時間を必要とされるテストだけに集中することができ、時間とコストを節約してCI プロセスを加速させます。これらのプロセスが実現されることでコードの品質が向上して新しいリリースのスケジュールが順守されます。

さらに、変更ベースのテストはローカルの開発環境に導入できる

CI 環境だけでなく、Parasoft Jtest の専用プラグインによって同じ機能を IDE 環境内に導入することもできます。
ローカル環境で変更ベースのテストを導入することで、コード変更とコード変更の間、ソース管理システムに変更をコミットする前に、ローカル環境でテストを頻繁に実行するためのベスト プラクティスが格段に強化されます。
変更ベースのテストをCI 環境とローカル環境に併せて使用することで、開発プロセスを更に高速化させることができます。

Parasoft Jtestについて

Java対応静的解析・単体テストツール Parasoft Jtest

Jtestは、テスト工数の大幅削減とセキュアで高品質なJavaシステムの開発を強力にサポートするJava対応テストツールです。1,000個以上のコーディング規約をもとにソースコードを静的に解析し、プログラムの問題点や処理フローに潜む検出困難なエラーを検出します。さらに、JUnitを用いた単体テストについて、作成、実行、テストカバレッジ分析、テスト資産の管理といった単体テストに係る作業をサポートし、単体テストの効率化を促進します。

参考資料