単体テストアシスタント

JUnitテストコード作成支援機能で工数を33%削減​
単体テストは、ソフトウェアの品質を確保する上で、とても優れたテストです。
メソッド単位のテストで品質の低下やバグの再発を防止することができます。また、JUnitなどの広く使われているテスティングフレームワークを用いて効率的にテストコードを作成することができ、テストコード自体がエビデンスとなります。

しかし、思ったほど効果が出ない、運用に苦労しているといった課題はないでしょうか?
Jtestの単体テストアシスタントはJUnitを用いた単体テストを効率化する機能によってこれらの課題を解決します。単体テストに課題を持っている方だけでなく、JUnitに慣れていない開発者でもすぐに効率的な単体テストを始めることができます。

単体テストを成功させるコツとは?JtestではじめるJUnit入門

何にお困りですか? Jtest 機能
はてな 何から始めていいかわからない
はてな テストコードを手軽に作成、効率化したい
テンプレートの作成
はてな テストコードの作成コストを削減したい
はてな テストコードのメンテナンスコストを削減したい
モック化
単体テストの追跡や監視
はてな カバレッジ計測を効率化したい カバレッジの計測
単体テストの追跡や監視
はてな Springフレームワークのテストを効率化したい Spring単体テストテンプレートの作成

単体テストの導入や運用の障壁

単体テスト(ユニットテスト)は、プログラムを構成する比較的小さな単位(ユニット)が個々の機能を正しく果たしているかどうかを検証するテストです。通常、メソッドが単体テストの単位となります。 単体テストは、コード作成時などの早い段階で開発者によって実施されることが多いのが特徴です。

Javaの開発では多くのプロジェクトでオープンソースのテスティングフレームワーク「JUnit」が使われています。「JUnit」を使うメリットは、一度テストコードを作成すると同じ条件のテストの実行や結果の確認を自動化できることです。

多くの開発者は「品質をもっと上げたい」「開発⼯数を減らしたい」といった期待を持ち、「Junit」を使った単体テストや単体テストの⾃動化に取り組みます。しかし実際に導⼊し、運⽤してみると、「予想以上に工数がかかっているのに、思ったほど効果がでない」または「運⽤しているが⾮常に苦労している、ちっとも楽にならない」といったことに陥りがちです。

単体テストの導入や運用において、障壁となるのは以下の点です。
JUnitのスキルが不足している
  • 何から始めればいいかわからない
  • JUnit学習コストがかかる
単体テストのコストが増大した
  • テストコードの実装コストがかかる
  • テストコードが複雑でテストコードのメンテナンスに時間がかかる
ソースコードカバレッジの罠にハマった
  • カバレッジ100%が求められるが達成にはかなりの手間がかかる
  • カバレッジ100%を達成してもバグが減らない
Jtestの単体テストアシスタントは、これらの障壁を取り除き、効率的な単体テストの導入や運用を支援します。

単体テストアシスタントによる支援

単体テストアシスタントはテストケーステンプレートの作成やモック化の支援、単体テスト実行時の変数の追跡など単体テストを効率的に行う様々な機能が使えます。Springフレームワーク(Spring MVC、Spring Boot)をサポートしているため、Springフレームワーク独自のテストケーステンプレートやモックの作成支援を行えます。

テンプレートの作成

JUnitのテストメソッドのテンプレートやアサーションの作成を支援し、複数の引数をテストする際にCSVファイルなどに記載されたテストデータを用いることができます。詳細

おすすめ
JUnit初心者の方、工数削減を期待される方

モック化

テスト対象メソッドの呼び出しに必要なクラスオブジェクトをモックとして作成します。モック化したオブジェクトが必要とするクラスオブジェクトも「深いモック」によりモックを作成することができます。詳細

おすすめ
工数削減を期待される方

カバレッジの計測

JUnitのカバレッジ計測だけではなく、テストでカバーされていないコードをJtestが検知し、カバレッジ計測率を向上させるためのヒントを提示します。詳細

おすすめ
JUnit初心者の方、工数削減を期待される方

単体テストの追跡や監視

モックの利用を推奨するテストコードの実装やアサートの有無のチェックなど、単体テスト実行時の振る舞いを監視し、改善を促します。詳細

おすすめ
工数削減を期待される方

未カバー行をカバーするテストテンプレートの作成

未カバー行(実行されなかった行)に対して、その行を実行するために必要なテストケースを自動生成したり、テストテンプレート作成に役立つヒントを提供します。詳細

おすすめ
工数削減を期待される方

Spring単体テストテンプレートの作成

Springの単体テストに必要な定形コードやSpringの提供するモックを使った単体テストケーステンプレートを作成します。詳細

おすすめ
Springフレームワークを利用している方

以下をダウンロードいただけます。
  • Jtest体験版、チュートリアル、チュートリアル用プロジェクト
  • 単体テストコードを作成する際に、単体テストアシスタントを利用した場合と、していない場合の作業工数の比較資料
Jtestの単体テストアシスタントを効率的にチーム全体で利用するためにフレキシブルなライセンス形態が設定されたJtest Unit Test Editionもご用意しています。

単体テストアシスタントの詳細

単体テストアシスタントは、Eclipse および IntelliJ IDEAのプラグインとして動作します。Jtestのプラグインを開発環境(IDE)へ適用すると、すぐに単体テストアシスタントをお使いいただけます。

eclipseにJtestをプラグインし、単体テストアシスタントを利用

テンプレートの作成

テストメソッドテンプレートの作成

JavaコードからJUnitテストコードのテンプレートを自動生成
単体テストアシスタント機能では、メソッドまたはクラスの単位でJUnitテストメソッドのテンプレートを作成します。また、テスト対象メソッドの呼び出しやパラメータの定義はテストメソッド内に自動生成されるため、開発者はテストに使用するパラメータ値やテストの期待値を記述するのみですぐに実行可能な単体テストコードを作成することができます。

JUnitテストテンプレートの作成例

上記は、Simpleクラスのmapメソッドのテストを作成する例です。開発者はJtestが作成したJUnitテンプレート上のパラメータと期待値を設定するのみで単体テストを実行できます。

引数のパターンを複数指定したテストを行う際は、テストクラス・メソッドを作成するときにパラメータライズを選択することで、複数のパラメータをリストで指定できるようになります。また、この際にCSVファイルなどを指定して、複数の引数を指定することができます。

パラメータライズのJUnitテストテンプレートの作成例

アサーションの作成

テスト実行結果からアサートションのテンプレートを作成
テスト結果を判定するためのアサーションの作成を支援します。テストコードにアサーションが存在しない場合はテストの実行結果から適切なアサーションを提案します。
また、テスト対象クラスの変更により状態が変わった場合にはテスト対象クラスを検証するためのアサーションのテンプレートを作成することが可能です。テストの期待値を調べる必要はなく、現在の動作した結果をテストの期待値として設定することで、単体テストの作成を効率化します。

JUnitテストコードを実行した際の結果(result=-1)をテストの期待値として設定

モック化

モック作成機能で複雑なオブジェクトを含むコードのテストコードを効率的に作成
単体テストを行ううえで、複雑で手間がかかるのは、主にテスト対象のユニットを分離する作業です。単体テストアシスタントではテスト対象メソッドの呼び出しに必要なクラスオブジェクトをMockitoやPowerMockを使ってモック化します。データベースにアクセスするオブジェクトなど、複雑な依存関係を含むコードに対しても効率的にテストコードを作成できます。

依存するサービスをモック化

技術資料として公開している単体テストにおける工数削減のデータでは、このモック機能が最も単体テストの工数削減に寄与したという結果が出ています。

カバレッジの計測

C0カバレッジを計測、カバレッジを向上させるためのヒントで効率よくカバレッジUP
単体テストアシスタントでは、テスト対象のメソッドに対して、一定以上のカバレッジが計測されていないコードを検出し、カバレッジを向上させるためのヒントを提示します。追加するべきテストパターンを具体的に提示することで、効率的にカバレッジを向上させることができます。

計測したカバレッジ。コード行の表示の左に、テストで実行された行が緑、実行されなかった行が赤で表示されます。

カバレッジ計測の結果から、カバレッジを向上させるためのヒントを表示

単体テストの追跡や監視

実行時のデータを自動で収集、デバッグ作業を効率化
単体テストアシスタントはテストコード実行時の処理の経路やテストメソッド内の変数の値、モックの呼び出し、例外の発生有無などの様々な実行時データを収集します。
テストコードの実行後に実行されたテストの振る舞いを確認できるため、デバッグ作業を効率化、テストコードの実装工数を削減します。

Eclipse上のテストの処理の流れと実行時の値の監視

テスト実行時にモック化が可能な箇所を検知

 

未カバー行をカバーするテストテンプレートの作成

任意の行をカバーするためのテストケースを自動生成、カバレッジを効率的に向上
単体テストの実行時に処理が実施されなかった未カバー行(実施されなかった行)に対して、テスト対象のソースコードを分析し、その行を実行するためのテストケースを自動生成、または、カバーするためのヒントを表示します。

単体テストでカバーされなかった行のテストケースの作成例

 

Spring単体テストテンプレートの作成

Springフレームワークを利用したアプリケーションのテストを効率化
Springフレームワークはアプリケーションの構築だけでなく、単体テストのためのフレームワークやモックオブジェクトも提供しているため、フレームワークの仕組みに沿った単体テストの実施が可能です。
しかし、テストケースを適切にセットアップするには単純なテストでも多くの手作業による決まりきったコーディングが必要です。

テスト対象となるソースコードの例

たとえば、このソースコードであれば以下のような手順をコーディングする必要があります。
  • テスト対象のControllerとControllerが依存するTodoServiceを使用してSpringコンテナーを設定する。
  • findAllハンドラーメソッドに有効なリクエストを送信する。
  • 戻り値 ”todo/list”などのレスポンスを検証する。
単体テストアシスタントを使えばこれらの面倒な手続きを自動作成できるため、手作業のコーディングを減らし、テストケースの作り込みに時間を割くことができます。

単体テストアシスタントを使ったSpring単体テストテンプレートの作成例

さらに、MockMvcの監視も行うため、テスト実行時にモック化可能な箇所を検知しレポートします。そこからクリックするだけでモックテンプレートの作成が可能です。これにより、Springの単体テストやモックに慣れない開発者の学習コストを削減し、導入の敷居を下げます。

単体テストアシスタントによるモック化可能な箇所のレポートと作成したモックテンプレート

単体テストアシスタントの動画

単体テストアシスタントの操作動画です。
※ 動画中のJtestは10.3.1となります。
※ 全画面および最高画質での視聴を推奨します。また、日本語の字幕にて解説を入れております。字幕ONにてご視聴ください。


テストテンプレートの作成



アサーションの作成



モックの作成


Jtestその他の機能

静的解析・フロー解析

コードレビューを自動化して致命的なバグを早期発見
​ 約2,000種類のルールに従ってJavaソースコードを静的に解析し、違反している箇所をレポート、Javaソースコードの品質向上と問題修正の効率化を促進します。

アプリケーションカバレッジ計測

システムテストのカバレッジ計測でテストの抜け漏れを可視化
テストコードは不要で、手動またはテスト自動化ツールで実行されたUIテストのカバレッジを計測。テストの精度向上やエビデンス作成工数を削減します。

資料・製品ラインナップ・体験版

Java対応静的解析・単体テストツール Jtestに
関するお問い合わせ

  • テクマトリックス株式会社
    東京本社

    ソフトウェアエンジニアリング事業部

    03-4405-7853

メールでのお問い合わせ
parasoft-info@techmatrix.co.jp

お問い合わせ

製品についてやテクマトリックスについてなど、
こちらよりお気軽にお問い合わせいただけます。