Jenkinsを使って継続的に静的コード解析をさせる
最近プロジェクト内でJenkinsをどう運用しているのか聞かれることがあったので書いておくことにします。
ビルドだけではもったいないので色々なことをやらせているのですが、とりあえず今回は静的コード解析について。
コード解析の設定は最初は少しだけ面倒かもしれませんが、出力されるレポートはプロジェクトの大事なインプットとなってくれます。
出力されたレポート、グラフを見て自分達の日々開発しているものをチェックしてチーム内の朝会やふりかえりでアレコレ語るのがいいんじゃないかと思います。
まずは必要なプラグインのインストール
静的コード解析
- FindBugs Plugin - コンパイル後のバイトコードを解析してバグや不具合が発生しそうなコードをチェックしてくれる
- Checkstyle Plugin - コーディング規約違反をチェックをしてくれる
- PMD Plugin - バグや不具合が発生しそうなコードをチェックしてくれる
- DRY Plugin - コピペコードのような重複したコードをチェックしてくれる
- Task Scanner Plugin - タスクスキャナーという名前ですがソースコードを任意の文字列で検索するチェックをかけることができます
- https://wiki.jenkins-ci.org/display/JENKINS/Task+Scanner+Plugin
- FIXME、TODO、XXX、deprecated、System.out.printlnとかスキャンしてます
- https://wiki.jenkins-ci.org/display/JENKINS/Task+Scanner+Plugin
- Warnings Plugin - コンパイラの警告をチェックしてくれる
- Cobertura Plugin - テストカバレッジを計測してくれる
- https://wiki.jenkins-ci.org/display/JENKINS/Cobertura+Plugin
- EmmaというプラグインもありますがCoberturaの方がレポートが見易い気がするのでこちらを利用してます
- https://wiki.jenkins-ci.org/display/JENKINS/Cobertura+Plugin
ビルドファイル(pom.xml, build.xmlの設定)
Jenkins自身ではコード解析、結果の出力はやってくれないのでコード解析の処理自体はAnt、Mavenにやらせます。
Mavenの場合はpom.xml, Antの場合はbuild.xmlに設定します。
コード解析のプラグインを突っ込むとジョブの設定画面のヘルプで丁寧に設定方法まで教えてくれるのでMavenやAntが苦手でもなんとかなると思います。
FindBugsの場合は↓のような感じ
すべての解析ツールの設定をしておきます。(FindBugs, CheckStyle, PMD, Cobertura)
※Task Scanner Pluginは設定不要
Jenkinsのビルド実行の設定
Mavenの場合、こんな感じで設定してXMLのレポート吐かせておけばJenkinsさんが見易くレポーティングしてくれます。
以上で設定完了です。一気に設定せずにビルド結果、レポートの表示を確認しながら1つずつ追加していった方がいいと思います。
設定ができていればジョブ実行をするとJenkins上で解析結果のレポートが表示されるはずです。
自分が所属するチームでの運用例
- ジョブのトリガ
- SCMレポジトリをポーリング
- コードを修正しコミットする度にビルドとコード解析が実行される。静的コード解析をローカル環境で手動でやる とかもう戻れません。
- 通知
- 基本のメール通知、IRC通知、Chrome拡張の通知
- すぐに気付くことができれば何を利用しても良いと思う。
- ビルドの失敗が続いて通知がウザイから切るっていうのは自分的には絶対ナシ。ウザイから早いとこビルドを安定させようという流れに持っていきたい。
- Jenkins上のレポート
- 出力されたレポート内容は朝会、ふりかえりのインプットに。問題の確認、共有、日々の改善につなげる。
- コード解析ツールは便利だけど誤検知も多いことをちゃんと知った上で利用する。
まとめ的な何か
Jenkinsにビルドとユニットテストまでしかやらせてないっていう話を結構聞くので書いてみました。
そこまで自動化できているのなら次のステップの静的コード解析までやらせちゃっていいのになぁと。導入コストも低いですし。
「レガシーなのでユニットテストないからウチはCIなんて無縁だよ」っていうのもよく聞きますがユニットテストなくても
とりあえずJenkins立てて静的コード解析を継続的にかけさせるのがいいんじゃないかと思います。
CPDでどれだけコピペコードがあるのか分かりますし、FindBugs、PMD、CheckStyleでよくないコードがどれだけ含まれているのか、どんな内容なのか傾向を探れます。
自動で継続的に解析しておけば "これ以上警告が増えたら通知する" とか設定でできますし。
解析ツールの結果は常に絶対ではありませんが充分参考にはなります。
また結果が時系列にグラフになることで変化に気付くことができます。
「最近警告が減ってきているのでイイネ」とか「昨日極端に増えたけどどんな変更した?」とか。
プロジェクトやチームによりけりだとは思いますが個人的にはビルド、ユニットテスト、静的コード解析まではとりあえず導入していいんじゃないかと思います。
設定さえ頑張ればJenkinsが勝手にやってくれますし。
もっと良い方法があったら教えていただけたら嬉しいです。
Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
- 作者: 佐藤聖規,和田貴久,河村雅人,米沢弘樹,山岸啓,川口耕介
- 出版社/メーカー: 技術評論社
- 発売日: 2011/11/11
- メディア: 単行本(ソフトカバー)
- 購入: 26人 クリック: 496回
- この商品を含むブログ (64件) を見る
- 作者: John Ferguson Smart,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/02/22
- メディア: 大型本
- 購入: 12人 クリック: 345回
- この商品を含むブログ (38件) を見る
継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化
- 作者: David Farley,Jez Humble,和智右桂,高木正弘
- 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
- 発売日: 2012/03/14
- メディア: 大型本
- 購入: 24人 クリック: 567回
- この商品を含むブログ (53件) を見る