修正したアプリケーションをいち早くリリースするためには、アプリケーションの動作検証も短時間に終える必要がある。これを実現するのが、継続的インテグレーション(CI)ツールとテストツールだ。新規開発から実施するだけでなく、既存のソースに対しても適用できる。
TIS
3時間おきに回帰テスト
Jenkins、JUnit、PMD など
「システム稼働後の追加・修正でデグレードを起こさないことに最大の注意を払った」と、TISの竹内祐介氏(アプリケーション開発センター アプリケーション開発部主査)は述べる。
デグレードとは、システムをバージョンアップした際に、以前よりもサービスの品質が低下することだ。機能追加や修正のためにソースコードを変更したとき、動作検証が不十分だと起こり得る。
竹内氏がチームリーダーを務めたリース会社の資産管理SaaSの開発プロジェクトでは、特にデグレード対策が重要だった。このプロジェクトでは、最初に必要最小限の機能をリリースし、追加すべき機能は利用部門のフィードバックを受けながら1カ月ごとに追加・修正していく方針が立てられていた。
竹内氏が採った策は、回帰テストを自動化すること。回帰テストは、バージョンアップのたび、すべてのソースコードに対して同じテストを繰り返し実行する手法だ。CIツールである「Jenkins」などを使って静的/動的テストを自動化し、漏れなくテストを実行するようにした。
3時間ごとにすべての単体テスト実行
このプロジェクトで開発フェーズに入る前に、Jenkinsと各種テストツールを組み合わせたシステムを構築した。利用したツールは、バージョン管理ツール「Subversion」、ビルドツール「Ant」、コーディング規約チェック「Checkstyle」や単体テスト「JUnit」など5種類のテストツールである。
これにより、開発とテストを同時に進められる仕組みが整った(図1)。
開発現場での利用イメージはこうだ。まず開発者は、テストのシナリオを記述した「テストコード」と、テストに必要な「テストデータ」を作成する。次に、テストコードに記述したシナリオがすべて成功するように、ソースコードを作成する。
その後、ローカルの開発環境でテストツールを実行する。開発者は、テストツールでエラーが表示されなくなるまで、ソースコードの修正とテストを繰り返す。エラーが解決したら、ソースコード、テストコード、テストデータをバージョン管理ツールに保存する。
単体テストの実行は、Jenkinsに管理者が設定した情報を基に自動で進む。このプロジェクトでは、Jenkinsが3時間おきにバージョン管理ツールにアクセス。ソースコードやテストコードなどの変更履歴をチェックする。変更があればすべてのコードを取得し、テストツールを実行。その結果をJenkinsが開発メンバー全員に通知する。
開発者は、自分が担当するソースコードにエラーがあれば、テストコードとソースコードを修正し、再度、ローカルの開発環境でテストツールを実行する。正しく動作したらバージョン管理ツールに保存。3時間後には再びJenkinsがすべてのソースコードを対象にテストを実施する。