このブログについて

ソフトウェア開発におけるエラーの予防やプロジェクト管理、品質管理を支援するParasoft製品のTIPSなどを、国内総販売代理店テクマトリックスのサポートスタッフが紹介しています。
ラベル Jenkins の投稿を表示しています。 すべての投稿を表示
ラベル Jenkins の投稿を表示しています。 すべての投稿を表示

2015年10月8日木曜日

Jtest DTP・Parasoft DTP を利用した短期・高品質開発

短期・高品質開発を実現する仕組みとは?

今回は、Jtest DTPとParasoft DTPを組み合わせた短期・高品質開発を実現する仕組みをご紹介します。

短期・高品質開発を実現するJtest DTP、Parasoft DTPの仕組みは以下の通りです。
図の仕組みに関して詳細にご説明いたします。

①継続的インテグレーションによる問題早期発見

継続的インテグレーション導入により、ビルド・インスペクション・テスト・パッケージング・リリースを継続的に実行し、開発・テストプロセスで発生する問題の早期発見が可能です。「問題点→対策」の一例を以下に示します。

  • ビルドが壊れた!→コンパイル不能なコードを特定しビルドが通るように修正
  • インスペクションで指摘が発見された!→バグの場合は早期に修正
  • テストが失敗した!→バグの場合は早期に修正
  • 上記すべてを合わせて、リリース可能なモジュールか判断可能!

特に、Jtest DTPによるインスペクション・テスト自動化により、コーディング工程で結合レベルのバグを早期発見したり、人の目では追えない複雑な処理(Exception発生時の処理等)で発生する問題を特定することができ、早期に品質を向上させるための基盤を整えることができます。

※Jtest DTPで検出できる指摘については詳しくはJtestとOSSとの違いを参照ください。

②Parasot DTPによる問題点可視化・リスク分析

継続的インテグレーションで発生した問題を眺めているだけでは、何も解決しません。問題が改善しているのか、リアルタイムで確認する必要が出てきます。

Parasoft DTPでは、インスペクション、テスト、メトリクス、ビルド等さまざまな情報を一元的に収集して表示できます。ウィジェットの一例を示します。

問題の発生状況をリアルタイムで確認

ウィジェット概要
指摘事項の傾向を表示し、改善しているかを確認できます。
ソースコードメトリクスに順守して開発しているかを表示します。赤は指摘、緑は順守していることを示します。
Jenkinsのジョブの状況を表示します。

多角的なデータからリスクを特定し、自動的に優先度付け

ウィジェット概要
モジュールのビジネスリスク・セキュリティリスク・指摘数からリスクのあるモジュールを特定します。
Googleのバグ予測スコア・サイクロマチック複雑度・コードボリュームから複雑でバグの混入確立が高いコードを特定できます。

③優先度付けされた指摘の取り込み、修正と生産性の高い開発

開発者は優先度付けされた指摘事項やテスト結果をIDEに取り込めます。 普段使いなれたIDE上で確認ができるので 生産性の高い開発も実現できます。

EclipseとIntelliJ IDEAに指摘を取り込んだ画面



開発者の手元でも解析を行えるので、チェックイン前のコードの品質を高めることができます。

最後に

いかがでしたでしょうか。Jtest DTPとParasoft DTPを組み合わせることで早期に問題を発見し、改善状況をリアルタイムにモニタリングできます。また、多角的な情報からリスク分析することで、ソフトウェア開発をより潤滑に進められるのではないでしょうか。

今回ご紹介した Jtest DTP、Parasoft DTPに関するセミナーを10月23日に実施いたします。

セミナーにつきましては、以下の記事で詳しく紹介していますので、ぜひこちらも御覧ください。

「2015年10月23(金)開催セミナー JALインフォテック様における旅客システム開発の品質向上事例紹介!」



また、Parasoft DTPの体験版もご用意しておりますので、ぜひお問い合わせください。

2015年2月28日土曜日

Maven+Jtest9.5+Jenkinsによる継続的インテグレーション

継続的インテグレーションとは

継続的インテグレ―ション(CI)をご存知でしょうか。継続的インテグレーションとはエクストリーム・プログラミングのプラクティスのひとつで、ビルドやインスペクションを継続的に実行していくことを意味します。 本日は、Maven、Jtest、Jenkinsの各特徴をご紹介しながら、継続的インテグレーションをより効果的に運用できるような情報をお届けします。

Maven

Mavenとは、ビルドツールの一種です。いつ、どこで、誰がビルドしても同じ成果物を生成できることを目的としたツールになっており、以下の特徴を有しています。
  • プロジェクトのディレクトリ構成が予め決まっている。
  • 依存ライブラリはMavenリポジトリから自動的にダウンロードされる。
  • 依存ライブラリを使用するタイミング(Maven用語ではフェーズ)を指定できる。
  • JUnitによる単体テストの実行が可能である。
  • 開発した成果物はMavenのリポジトリに公開可能である。
図1. EclipseのMavenプロジェクト
上記の特徴を持っているため、ソースコードを格納するディレクトリとMavenの設定ファイル(pom.xml)さえあれば、誰がどこでビルドしても失敗することはありません。 コンパイルや実行に必要な依存ライブラリは、Mavenが設定情報を元にインターネットから自動でダウンロードしてくれます。

また、Mavenには単体テストを実行できる枠組みも用意されています。JUnit単体テストケースをsrc/test/javaディレクトリに格納するだけで、Mavenがビルドの前に単体テストを自動実行します。デフォルトの動作では単体テストに失敗した場合ビルドは実行されません。これによりテストにパスしていない成果物の生成を防ぐことができます。ビルド時に意識することなく単体テストが実行されるため、回帰テストとしてもよく利用される機能です。

もちろん開発者はビルド時まで単体テストの実行を待つ必要はありません。mvn testコマンドを実行することで、単体テストを逐次実行することも可能です。

Jtest

Parasoft JtestはJavaアプリケーションに対するテストをサポートするためのツールです。大きく分けて静的解析機能と動的解析機能があり、今回は静的解析機能をご紹介します。 静的解析機能には以下の種類があります。
機能名概要
パターンマッチング特定の記述をしていることで発生するバグを検出する。
フロー解析(バグ探偵)処理の流れを静的に追い、結果的に発生するバグを特定する。
メトリクス計測ソースコードの保守性や複雑度を数値として計測する。
静的回帰ツールとしてはOSSのFindBugsやCheckStyleが有名ですが、Jtestのフロー解析を利用するとOSSではチェックしきれないファイルまたがりのバグを検出できます。
フロー解析(バグ探偵)で検出できるバグの一例をご紹介します。

図2. Jtestによるフロー解析(バグ探偵)の例

詳しくはOSSとの比較ページを参照ください。

Jtest Mavenプラグイン

JtestにはMavenプラグインが提供されており、MavenからJtestを呼びだすことができます。
図3. Jtest Maven プラグインの設定例(pom.xml)

通常、JtestはEclipseプロジェクトでなければ解析できませんが、Mavenプラグインを利用することによりEclipseプロジェクトではないMavenプロジェクトに対しても解析がかけられます。 MavenからJtestを実行するにはmvn parasoft:jtestのようにゴールに「parasoft:jtest」を指定します。

Jenkins

Jenkinsは言わずと知れた継続的インテグレーションツールです。以下の特徴を持っています。
  • 定期的なビルドを実行することが可能。
  • Mavenとの親和性が高い。
  • JUnitの結果やFindBugsの結果をJenkins上で参照することも可能。
  • GitやSubversion等のバージョン管理ツールと連携可能。
  • 成果物(jar/war/ear)の管理が可能。
Jenkinsの新規ビルドの作成画面では、「Mavenプロジェクトのビルド」が専用で用意されており、Mavenによるビルドを簡単に設定することが可能です。

図4. Jenkinsのビルド作成画面

ビルドの設定画面ではMavenの設定ファイルである、pom.xmlの場所と、ゴール(clean/compile/test/install等)を指定するだけです。

図5. Mavenのビルド方法指定

Maven+Jtest+Jenkinsの相乗効果

Maven、Jtest、Jenkinsの特徴を組み合わせることにより、様々な効果を得ることが可能になります。

開発環境に縛られない

IDEごとにばらばらだった静的解析の実行や単体テストの実行はMavenからの実行で統一されます。 これにより、EclipseやNetBeans、IntelliJなど開発者は自分にマッチしたIDEを自由に選択できます。 静的解析を実行するためにEclipseプロジェクトになおして、依存ライブラリを設定して・・・などという煩わしい作業は不要になります。依存ライブラリの解決はMavenに任せればよいのです。

ジョブの管理が容易

あらゆるタスクがMavenからの実行で可能になるため、Jenkins上のジョブは一つで済みます。いくつもジョブを作成してビルドパイプラインを作る必要はありません。
以下をひとつのジョブで実現可能になり、継続的なインテグレーションをより容易に実現できます。

  • ビルドの自動化
  • 静的解析(パターンマッチング+フロー解析+メトリクス)とレポート生成の自動化
  • 単体テストの自動化
  • 成果物のデプロイ自動化

図6. JenkinsからMavenのビルドを実行した際のログ

開発初期から結合レベルのバグを検出

OSSの代わりにJtestのフロー解析を適用することで、コーディング工程では検出が難しいバグを検出可能になり、より効果的なインテグレーションを実施することが可能になるでしょう。検出した違反はMaven+Jtestによって${Mavenプロジェクト}/target/site/parasoftの配下にレポートとして自動出力されます。

図7. Jenkinsによって実行されたJtestのレポート

意識することなく回帰テストを実行可能

単体テスト工程になり、Mavenのテスト格納ディレクトリに単体テストファイルが蓄積されていくと、開発者が意識することなくJenkinsとMavenによって単体テストが実行されます。単体テストの結果は${Mavenプロジェクト}/target/surefire-reports/TEST-プロジェクト名.xmlで保存されるため、テスト結果をそのままIDEにインポートすることも可能です。 加えて、単体テストケースを蓄積しておくことで、ソースコードを変更した際の回帰テストとしての役目も担ってくれます。

成果物に対するテストの状況を確認

いつビルドした成果物なのかをJenkins上で管理することもできます。ビルドされた際のテスト状況も合わせて確認することができるため、リリース可能な成果物なのかを一目で確認可能です。

図8. Jenkins上での成果物と単体テスト結果の確認

最後に

今回はJtest9.5をベースにした継続的インテグレーションをご紹介しました。
Jtestの後継製品であるDTP for Javaでは、Mavenから単体テストを実行し、カバレッジを採取することも可能になる予定です。さらに便利になってインテグレーションの効果を上げるDTP for Java のリリースをお楽しみに!