Java テストツールのトレンド 2014/1～2016/5

## Java テストツールのトレンド 2014/1～2016/5版    

### **1. エコシステムに乗っかるべし**  
　継続的インテグレーション（CI：continuous integration）は、もはや必須のプラクティスとなりました。ＣＩを実施するにあたり、できるだけ世の中でよく使われているツールやフレームワークを使うことが、エコシステムにスムーズに乗っかっていく鍵になります。マイナーなツールやフレームワークを採用してしまった場合の問題点を挙げてみます。  

+ 採用したツールの開発が停滞していてバージョンアップによる恩恵が受けられない。  
+ 他のツールのバージョンアップに採用したツールが追従できず、他のツールのバージョンアップの恩恵が受けられない。  
+ 足りない機能があり社内で色々作りこんだものの、社内のスピードよりも、世の中のスピードのほうが速く、システムの改修が世の中に追従できななくなってしまう。  
+ CIシステムの維持が特定の人の仕事になってしまう。  
+ メンバーの教育が必要になってくる。  

　最近のソフトウェアは、企業の内部で単独で作るものではなく、ＯＳＳコミュニティーの力を活用し、Webの情報を参考にしながら開発していくものになっています。コミュニティが活発に活動しているツールやフレームワークを採用することで、よりスムーズな開発を継続していくことができるのです。  
  ということで、最近(2014/1～2016/5)のJava系のテストツールのトレンドをまとめてみました。  

### **2. テスティング フレームワーク**  

　ツールに標準で組み込まれているものを◎、各自で組み込む必要があるものを△で表示しています。Gradleは、内部にAntやJUnitを抱えているビルドツールです。Android Studioの標準のビルドツールで、Eclipseではver.4.5(Mars)から標準搭載、Jenkins ver.2では、初回起動時にプラグインのインストールを提案されます。Gradleが標準でサポートしているテストツールは、最近の傾向を反映しているため、トレンドをつかむうえで参考になります。  

**● 標準サポート状況**  

| ツール  | JUnit | TestNG | Spock |  
|:--------|:-----:|:-----:|:-----:|  
| Eclipse |   ◎   |   △   |  △   |
| Gradle  |   ◎   |   △   |  △   |  

**● Google検索トレンド**  
![TestingFramework.png](https://qiita-image-store.s3.amazonaws.com/0/107056/2d89c94f-3d8b-6bda-d506-e42396ecfac4.png)  
※ 6/5に検索したため、月ごとの集計で、2016/6のデータが少なく、グラフの右端が下がります。右端の下がっている部分は、トレンド判定の上で無視してください。  

### **3.静的解析ツール**  

　ソースコードの問題点を指摘してくれます。保守性向上、バグ混入予防のために導入しましょう。  

**● 標準サポート状況**  

| ツール  | CheckStyle | FindBugs | PMD |  
|:--------|:---------:|:--------:|:-----:|  
| Eclipse |    ◎    |    ◎    |   △   |
| Gradle  |    ◎    |    ◎    |   △   |  

**● Google検索トレンド**  
![StaticAnalysis.png](https://qiita-image-store.s3.amazonaws.com/0/107056/3bae09ec-f08d-c24e-da03-754a3b0768cd.png)  

### **4.コード カバレッジ**  

　UnitTestのコードカバレッジ集計ツールです。EclEmmaは、Eclipseのコードカバレッジプラグインで、内部にJaCoCoが組み込まれています。  

**● 標準サポート状況**  

| ツール  | JaCoCo(EclEmma) | Cobertura |  
|:--------|:-------------:|:---------:|  
| Eclipse |    △         |    △     |  
| Gradle  |    ◎         |    △     |  

**● Google検索トレンド**  
![Coverage.png](https://qiita-image-store.s3.amazonaws.com/0/107056/0551e44a-7497-761d-b8d8-dad1ed761a62.png)  
※ Coberturaは、ポルトガル語で「報道」。Emmaは、人名。JaCoCoのEclipseプラグインの名前がEclEmma。ズバリ比較できる検索キーワードとはなりません。  

### **5.モック フレームワーク**  

現在、開発が活発に行われているのはmockitoです。  

**● 標準サポート状況**  

| ツール  | mockito | EasyMock | PowerMock | JMockit | JMock |  
|:--------|:-------:|:-------:|:----------:|:-------:|:-----:|  
| Eclipse | △      | △      | △         | △      | △    |  
| Gradle  | △      | △      | △         | △      | △    |  
※ Pleiades Eclipseに標準インストールされている、Quick JUnit Pluginにmockitoが含まれています。  

**● Google検索トレンド**  
![Mock.png](https://qiita-image-store.s3.amazonaws.com/0/107056/b258bb49-76e2-2539-ab5e-17c6da698db1.png)  

### **6.ビルドツール**  

Ant, Maven, Gradleを比較してみました。Gradleは、CIと相性がよいビルドツールで、最近人気上昇中です。ビルドは、内部でAntを実行、ディレクトリ構成の規約はMaven準拠しています。  

**● 標準サポート状況**  

| ツール         | Ant | Maven | Gradle |  
|:--------------|:---:|:-----:|:------:|  
| Eclipse       | ◎  | ◎     | ◎     |  
| AndroidStudio | △  | △     | ◎     |  

**● Google検索トレンド**  
![BuildTool.png](https://qiita-image-store.s3.amazonaws.com/0/107056/135f99cf-84ca-17b5-294b-cfeb044f2ad7.png)  
※ 2015年は、GradleがAntを上回ったターニング ポイントになりました。  

### **6.まとめ**  

人気テストツールとビルドツールの関係は、このようになります。  

| 対応表      | Ant | Maven | Gradle | Eclipse |  
|:-----------|:---:|:-----:|:------:|:------:|  
| JUnit      | △  | △     | ◎     | ◎     |  
| CheckStyle | △  | △     | ◎     | ◎     |  
| FindBugs   | △  | △     | ◎     | ◎     |  
| JaCoCo     | △  | △     | ◎     | △     |  
| mockito    | △  | △     | △     | △     |  

対応表を作ってみると一目瞭然。GradleをベースにＣＩを組み立てれば、追加するプラグインはmockitoのみ。あっという間にエコなCIが完成です。  
それでは、よいＣＩライフを(^^)/