JUnit 実践入門 体系的に学ぶユニットテストの技法 第15章 継続的 テスト すばやいフィードバックを手に入れる
第15章 継続的テスト すばやいフィードバックを手に入れる
- 開発においては、欠陥の修正による恩恵と、リスクのバランスを示している考慮する必要がある。
- テストを早い段階から繰り返し行うことで、リスクをカバーできる。
15.1 継続的テスト
ユニットテストを開発に導入するためには、効果を体感させることが重要であり、その方法として、継続的テストが有用である。
開発チームへのすばやいフィードバック
ユニットテストの恩恵は、「開発チームへのすばやいフィードバック」である。
早期からテストする
自動的にテストする
ユニットテストは、実行を自動化できる。
繰り返しテストする
リグレッションの早期検知、修正が可能となるため、リグレッションが発生することを恐れ、コード修正が行えなくなる事態を回避できる。
継続的テストとは
- 継続的テスト continuous testing とは、早い段階からテストを繰り返し実施するプラクティスのこと。
- ソフトウェアの品質を直接的には高めないが、開発チームに、ソフトウェアリリースへの自信を与える。
継続的テストを行うための3つの要素
以下を現代ソフトウェア開発の三本柱という。
- ユニットテスト
- 自動化
- バージョン管理
ユニットテスト
JUnitを利用してテストコードを書くことで、プログラムとして実行可能となる。
自動化
バージョン管理
- テスト失敗時に差分を確認することで、原因を究明できる。
- 原因を救命できない際に、ひとまず一つ前の正常バージョンに切り戻すことができる。
継続的テストの運用
- バージョン管理システムに変更があったタイミングで、ユニットテストを含む自動化されたビルドプロセスが実行されるのが一般的。
- テスト失敗をゼロにすることが大事なのではなく、発生した失敗を早期に検知・修正することが大事。
継続的テストとリファクタリング
継続的テストがリファクタリングを行うことを心理面で容易にし、結果としてきれいなソースコードをもたらす。
ユニットテストとリファクタリング
- ソースコードのメメンテナンス性工場等の目的で実施する。
- 特に重複を減らし、再利用や拡張が行い易い設計にする目的で行われることが多い。
- ユニットテストの実施が担保されてはじめて、リファクタリングができる。
積極的なリファクタリング
継続的テストが実施されている環境では、開発者は積極的にリファクタリングを行うことができる。
15.2 Maven によるビルドプロセスの自動化
Maven とは
Maven の準備
Eclipse から 管理することも可能であるが、基本的にはコマンドラインから実行するツールであるため、公式サイトからダウンロードしたアーカイブを適当なディレクトリに展開し、パスを通しておく。
Maven プロジェクトと POM
- Maven も Eclipse 同様、ソースコードやリソースをプロジェクト単位で管理する。
- Maven プロジェクトでは、ルートディレクトリに XML ファイルを配置し、プロジェクトの構成を定義する。
- この定義ファイルのことは POM project object model と呼ばれ、通常 pom.xml というファイル名とする。
- プロジェクト構成を定義した POM を追加すれば、どんなプロジェクトでも Maven を利用できる。
- ただし Maven プロジェクトの標準的にディレクトリ構成に合わせておくのがベター。
Maven プロジェクトの作成
- Eclipse から簡単に作成できる。
Maven のプロジェクト構成
- 標準では、プロダクションコードとテストコードを独立したソースフォルダに作成する。リソースファイルも独立したソースファイルに作成するため、4つのソースフォルダが作成される。
- ビルド時の成果物は target 配下に出力されるため、ソースコード管理システム(Subversion, Git 等)利用時は、target フォルダを除外フォルダとすること。
依存ライブラリの管理
依存ライブラリを追加するには、そのライブラリのグループId、アーティファクトId、バージョンを POM に設定すれば良い。
Maven のリポジトリ
- リポジトリとは、Maven でライブラリ(Maven プロジェクトの成果物)を管理するデータベースのこと。
- JUnit のようなメジャーなライブラリは、セントラルリポジトリと呼ばれる標準リポジトリで見つけられる。
- Maven では、一度ダウンロードされたライブラリはローカルマシンのリポジトリ、ローカルリポジトリに保存している。
依存ライブラリの追加
ソースコードのエンコーディング設定
- Windows, MacのデフォルトエンコーディングMS932(Shift-JIS)ではなく、Java では UTF-8 が無難。
- Maven プロジェクトのソースコードエンコーディングは、POM の properties セクションに project.build.sourceEncoding タグを追加して指定する。
Maven のプラグイン
プラグインは、大きく4つに大分される。 - コンパイルやテストといったコア機能に関連するもの - JAR や WAR の作成などパッケージングに関連するもの - テスト結果や Javadoc などのレポート作成に関連するもの - それ以外の拡張機能に関連するもの