はじめに
Javaアプリケーションのモダナイゼーションでは、Javaやフレームワークの更新に加え、変更後の動作を検証するテストの整備も重要です。
IBMのAIエージェント駆動型開発支援パートナー「IBM Bob」が提供する「IBM Bob Premium Package for Java Modernization」には、次の4つのワークフローがあります。
- Libertyリプラットフォーミング:従来型JavaランタイムからLibertyへの移行を支援
- Javaアップグレード:Javaバージョン間の非互換を検出・修正
- UIモダナイゼーション:レガシーUIをRESTベースのバックエンドとフロントエンドへ変換
- ユニットテスト生成:テスト戦略とJUnitテストを生成し、実行・修正・カバレッジ確認を支援
本記事では、ユニットテスト生成ワークフローを試していきます。
IBM BobでJava Modernizationのワークフローを使用するには、Add-onのPremium Package for Java Modernizationが必要です。
ユニットテスト生成ワークフロー
このワークフローは、単にテストコードを生成するだけではなく、次の処理を一連の流れで実行します。
- 既存コードとテストの分析
- テスト戦略の作成
- JUnitテストの生成
- テストの実行
- エラーの診断と修正
- JaCoCoによるカバレッジ確認
特徴は、テスト戦略を先に作る「Strategy-first」と、生成したテストを実行しながら改善する「Generate → Run → Fix」のアプローチです。
これにより、既存コードが多く、テストが十分に整備されていないJavaアプリケーションでも、テスト作成の初期コストを下げられることが期待できます。
JaCoCoとは
JaCoCo(Java Code Coverage)は、Java向けのコードカバレッジ計測ツールです。
テスト実行時にJavaバイトコードを計測し、コードのどの部分が実行されたかを可視化します。主に次のような指標を確認できます。
- Instruction coverage:Javaの命令がどれだけ実行されたか
- Branch coverage:if文やswitch文の分岐がどれだけ実行されたか
- Line coverage:ソースコードの行がどれだけ実行されたか
- Method coverage:メソッドがどれだけ呼び出されたか
- Class coverage:クラスがどれだけ利用されたか
- Cyclomatic complexity:コード内に独立した処理経路がどれだけあるか
たとえばBranch coverageを見ることで、if文やswitch文の分岐がどこまでテストされているかを確認できます。
また、JaCoCoはバイトコードを基に計測するため、ソースコードの書式に依存せずカバレッジを取得できます。
結果はHTMLレポートなどで出力でき、テストで実行された箇所と、実行されていない箇所を視覚的に確認できます。
実際に試してみた
前提条件は、次のドキュメントをご参照ください。
1. ワークフローを開始
Bob IDEで対象プロジェクトを開き、Start Workflowを選択します。
Java Modernizationを選択すると、プロジェクトの分析が始まります。
続いて、Java Unit Testingを選択します。
2. 既存コードとテストを分析
プロジェクト内のソースコードとテストが分析されます。
JaCoCoが設定されていない場合は、カバレッジ計測に必要な依存関係も追加されます。
3. テスト戦略を作成
プロジェクト全体の分析結果を基に、テスト戦略のドキュメントが生成されます。
生成されたドキュメントには、主に次の内容がまとめられていました。
- システム構成とレイヤーごとのテスト方針
- 正常系・異常系・境界値のテストケース
- テストコードの配置・命名規則
- 実行方法と使用ライブラリ
- カバレッジ目標
- CI/CDで利用する品質チェック項目
クラスやメソッド単位でテストケースが整理されているため、そのまま実装に着手できる粒度です。
テスト生成前には、Git連携の有無や変更されたクラスだけを対象とするかなど、実行条件を調整できます。
4. JUnitテストを生成・実行
実行前に、消費するBobコインの概算と予想処理時間が表示されます。
テスト生成を進めるを選択すると、対象クラスのJUnitテストが生成・実行されます。エラーが発生した場合は、診断と修正も行われます。
完了後は、次の結果がフローチャート形式で表示されました。
- テスト生成の過程
- 生成されたテスト
- テストの実行結果
- カバレッジの改善状況
- Bobコインの消費量
処理過程と成果物を確認できるため、AIによる生成をブラックボックス化せず、開発者がレビューしながら利用できます。
実行結果は英語で表示されましたが、日本語で依頼すると日本語のサマリーも生成できました。
5. JaCoCoでカバレッジを確認
今回のMavenプロジェクトでは、次の場所にレポートが生成されました。
target/site/jacoco/
├── index.html
├── jacoco-sessions.html
├── jacoco.xml
├── jacoco.csv
├── jacoco-resources/
└── com.pharmacy.…/
target/site/jacoco/index.htmlをブラウザで開くと、プロジェクト全体やクラスごとのカバレッジを確認できます。
レポートでは、プロジェクト全体からパッケージ、クラス、ソースコード単位まで確認できるため、テストが不足している箇所を把握しやすくなります。
今回実施した結果では、全体カバレッジは命令92%・分岐93%と高水準ですが、actionパッケージは命令83%のため改善余地があります。
カバレッジを見る際の注意点
カバレッジの高さとテスト品質は、必ずしも一致しません。
コードを実行しただけで、戻り値や状態変化を検証していなくてもカバレッジは上がります。生成されたテストについては、次の点をレビューする必要があります。
- 異常系や境界値をテストしているか
- アサーションは適切か
- 外部依存を正しくモックしているか
- テスト同士が独立しているか
JaCoCoは品質を保証するものではなく、テストされていない箇所を見つけるための指標として利用するのがよいでしょう。
まとめ
IBM Bobのユニットテスト生成ワークフローでは、既存コードの分析からテスト戦略の作成、JUnitテストの生成・実行・修正、JaCoCoによるカバレッジ確認までを一連の流れで実施できます。
特に、テストが不足した既存Javaアプリケーションをモダナイズする際に、テスト整備のスタート地点を短時間で作れる点がメリットです。
一方で、生成されたテストやカバレッジ値をそのまま採用するのではなく、最終的には開発者がテスト内容とアサーションの妥当性をレビューすることが重要です。














