58
SonarQubeでちょっと楽しい? 静的解析 @渋谷Java 2015/03/07 金森 政雄

Sonar qubeでちょっと楽しい静的解析

Embed Size (px)

Citation preview

Page 1: Sonar qubeでちょっと楽しい静的解析

SonarQubeでちょっと楽しい?静的解析

@渋谷Java 2015/03/07

金森 政雄

Page 2: Sonar qubeでちょっと楽しい静的解析

自己紹介

• 認証と決済のシステム

– 社内の他のサービスから利用

• 主にオフショア管理がお仕事

Page 3: Sonar qubeでちょっと楽しい静的解析

初LT参戦、よろしくお願いします

とりあえず言いたいことは・・・

Page 4: Sonar qubeでちょっと楽しい静的解析

Why 消費税増税!!??

十数種類の決済種×月額/従量/+α×社内全サイト = デスマしか見えない

Page 5: Sonar qubeでちょっと楽しい静的解析

ちなみに

IT企業役員

売れっ子若手芸人 ヒラの開発者

まさかの同い年

Page 6: Sonar qubeでちょっと楽しい静的解析

アジェンダ

• SonarQube概要

• SonarQubeとの出会い

• 機能紹介

• Tips

• まとめ

Page 7: Sonar qubeでちょっと楽しい静的解析

SonarQube概要

Page 8: Sonar qubeでちょっと楽しい静的解析

SonarQubeとは

• OSSのソースコード静的解析ツール– 様々な言語の解析をサポート(一部有料plugin)– サイト: http://www.sonarqube.org/

• 以前は「Sonar」と呼ばれていた

• ライセンスは LGPL v3.

• SonarSource社が追加言語のカバーやサポート

Page 9: Sonar qubeでちょっと楽しい静的解析

SonarQubeデモページhttp://nemo.sonarqube.org/

Page 10: Sonar qubeでちょっと楽しい静的解析

SonarQubeとの出会い

Page 11: Sonar qubeでちょっと楽しい静的解析

社内の成長活動:お題「自動化」

理想

テスト自動化やCIって楽しそう!!

Page 12: Sonar qubeでちょっと楽しい静的解析

社内の成長活動:お題「自動化」

理想

テスト自動化やCIって楽しそう!!

デプロイ自動化もやってみたい!!

Page 13: Sonar qubeでちょっと楽しい静的解析

社内の成長活動:お題「自動化」

理想

テスト自動化やCIって楽しそう!!

デプロイ自動化もやってみたい!!

最近流行りのツールもいろいろ試そう!!

Page 14: Sonar qubeでちょっと楽しい静的解析

社内の成長活動:お題「自動化」

理想

テスト自動化やCIって楽しそう!!

デプロイ自動化もやってみたい!!

最近流行りのツールもいろいろ試そう!!

現実

コストダウン最優先

Page 15: Sonar qubeでちょっと楽しい静的解析

現実

コストダウン最優先

部門の壁

『デプロイや構成管理は運用部なので手出し無用』

社内の成長活動:お題「自動化」

理想

デプロイ自動化もやってみたい!!

最近流行りのツールもいろいろ試そう!!

Page 16: Sonar qubeでちょっと楽しい静的解析

諸々あって静的解析担当に

本音:

「えー、今更静的解析?」

Page 17: Sonar qubeでちょっと楽しい静的解析

諸々あって静的解析担当に

本音:

「えー、今更静的解析?」

というわけにもいかないので・・・

Page 18: Sonar qubeでちょっと楽しい静的解析

静的解析のイメージ@Java

• Checkstyle– 開発中は便利– ルールのカスタマイズが面倒(設定、ルール追加)

• FindBugs– バグ本当に見つかります・・・?– checkstyleと一緒に入れとくだけ入れておく

• Jenkins– Pluginで解析・レポートが見れる

Page 19: Sonar qubeでちょっと楽しい静的解析

静的解析のイメージ@Java

• Checkstyle– 開発中は便利– ルールのカスタマイズが面倒(設定、ルール追加)

• FindBugs– バグ本当に見つかります・・・?– checkstyleと一緒に入れとくだけ入れておく

• Jenkins– Pluginで解析・レポートが見れる

もうやってるんですけど・・・

Page 20: Sonar qubeでちょっと楽しい静的解析

増える要求

Page 21: Sonar qubeでちょっと楽しい静的解析

増える要求

難易度の判定もできたらいいな

Page 22: Sonar qubeでちょっと楽しい静的解析

増える要求

難易度の判定もできたらいいな

レガシーなコードの見積もりを出したい

Page 23: Sonar qubeでちょっと楽しい静的解析

増える要求

難易度の判定もできたらいいな

レガシーなコードの見積もりを出したい

チーム毎の品質を

比較したい

Page 24: Sonar qubeでちょっと楽しい静的解析

増える要求

難易度の判定もできたらいいな

レガシーなコードの見積もりを出したい

チーム毎の品質を

比較したい

リファクタリングポイントの特定

Page 25: Sonar qubeでちょっと楽しい静的解析

増える要求

難易度の判定もできたらいいな

レガシーなコードの見積もりを出したい

チーム毎の品質を

比較したい

リファクタリングポイントの特定

Page 26: Sonar qubeでちょっと楽しい静的解析

SonarQube発見!!

• 多機能:難易度判定などにも使えそう

• pluginの開発で拡張もできる!!

• これならやる気出そう!!

Page 27: Sonar qubeでちょっと楽しい静的解析

SonarQube機能紹介

Page 28: Sonar qubeでちょっと楽しい静的解析

ソースコード解析の流れ

Page 29: Sonar qubeでちょっと楽しい静的解析

ソースコード

Page 30: Sonar qubeでちょっと楽しい静的解析

DB

ソースコード

Page 31: Sonar qubeでちょっと楽しい静的解析

DB

Analyzerソースコード

Page 32: Sonar qubeでちょっと楽しい静的解析

DB

Analyzer

解析ソースコード

Page 33: Sonar qubeでちょっと楽しい静的解析

DB

Analyzer

解析ソースコード

格納

Page 34: Sonar qubeでちょっと楽しい静的解析

DB

Analyzer

CIツール

解析 解析ソースコード

格納

Page 35: Sonar qubeでちょっと楽しい静的解析

DB

Analyzer

CIツール

開発者

解析 解析

参照

ソースコード

格納

Page 36: Sonar qubeでちょっと楽しい静的解析

SonarQube Runner

• SonarQube推奨のAnalyzer– SonarQubeのサイトからダウンロード

• 言語問わず解析に利用できる– 前提:言語に応じたpluginをインストールする

– 設定ファイルで解析する言語を指定

• 設定ファイルを配置しそこでコマンドを実行

– 設定ファイル:「sonar-project.properties」

– コマンド:「sonar-runner」※パス通すの忘れない

Page 37: Sonar qubeでちょっと楽しい静的解析

sonar-project.properties

#Required metadatasonar.projectKey=samplesonar.projectName=samplesonar.projectVersion=1.0

# Comma-separated paths to directories with sources (required)sonar.sources=src

# Languagesonar.language=java

# Encoding of the source filessonar.sourceEncoding=UTF-8

Page 38: Sonar qubeでちょっと楽しい静的解析

解析結果の確認

コード行数

重複率の割合

サイクロマチック複雑度

SQALE Rating

技術的負債

Page 39: Sonar qubeでちょっと楽しい静的解析

LOC:コード行数

• コードの行数を計測

– コメントは抜いてくれる

• ファイル数、クラス数、アクセサの数も測定

Page 40: Sonar qubeでちょっと楽しい静的解析

Duplications:コードの重複率

• ソースコードの重複率

Page 41: Sonar qubeでちょっと楽しい静的解析

Complexity:複雑度

• サイクロマチック複雑度– デフォルトを1として分岐ごとに+1

– プロジェクトの合計、関数/クラスファイルの平均

• 1関数あたり15を超え始めると注意

Page 42: Sonar qubeでちょっと楽しい静的解析

Technical Debt:技術的負債

• 技術的課題を負債にたとえる

–単位は修正にかかる工数

–工数は設定で変更できる

Page 43: Sonar qubeでちょっと楽しい静的解析

SQALE Rating

• コード全体に占める技術的負債の割合

– コード全体はLoC×30min(デフォルト)

• A~Eで判定

– Aは10%以下、Eは100%以上

Page 44: Sonar qubeでちょっと楽しい静的解析

問題のあるところにドリルダウン

※SonarQubeドキュメントから拝借

Page 45: Sonar qubeでちょっと楽しい静的解析

dashboardのカスタマイズ

• widgetを組み合わせてdashboardを作れる

Page 46: Sonar qubeでちょっと楽しい静的解析

Time Machine

• 測定値の推移が見れるdashboard

Page 47: Sonar qubeでちょっと楽しい静的解析

Tips(というより起こったこと)

Page 48: Sonar qubeでちょっと楽しい静的解析

①メモリ不足連発

• ハードウェア要件( http://docs.sonarqube.org/display/SONAR/Requirements )

– SonarQubeは最低1GBのメモリが必要

–ディスクI/Oも高速である必要がある

• 試しに仮想マシンで動かしてエラー連発

(当たり前ですが)ハードウェア要件ちゃんと確認する

Page 49: Sonar qubeでちょっと楽しい静的解析

②文字コードが統一されていない

• SonarQube Runnerの設定で文字コード指定

• 設定に反する文字コードのソースがあるとエラー

文字コードが統一されてないと解析すらしてもらえない

Page 50: Sonar qubeでちょっと楽しい静的解析

③指標は組み合わせて見る

• 社内で悪名高いレガシーコードを分析

– 皆の期待:「品質めちゃくちゃ悪いはず」

Page 51: Sonar qubeでちょっと楽しい静的解析

③指標は組み合わせて見る

• 社内で悪名高いレガシーコードを分析

– 皆の期待:「品質めちゃくちゃ悪いはず」

⇒SQALE Rating→「A」

Page 52: Sonar qubeでちょっと楽しい静的解析

③指標は組み合わせて見る

• 社内で悪名高いレガシーコードを分析

– 皆の期待:「品質めちゃくちゃ悪いはず」

⇒SQALE Rating→「A」

Page 53: Sonar qubeでちょっと楽しい静的解析

③指標は組み合わせて見る

• 原因はソースコードの重複率

– 重複率:68.2%⇒半分以上要らないコード– ちゃんと動くところがコピーされるので規模に対して負債は膨らまなかった?

1つの指標だけ見ても判断できない。

組み合わせてまずいところを見つけていく

Page 54: Sonar qubeでちょっと楽しい静的解析

まとめ

Page 55: Sonar qubeでちょっと楽しい静的解析

「見える化」って大事

• 「見られている意識」が品質の改善に

–自然とソースレビュー/リファクタリング提案

–他と比較されるので成果がわかりやすい

• 上司受けがよい

–定量化された指標

Page 56: Sonar qubeでちょっと楽しい静的解析

おまけ

• ローカルで試せる環境作成用のplaybookhttps://github.com/G-F/sonar-playbook

• Vagrantと ansibleで自動的に下記が入ります– SonarQube

– mysql

– Jenkins

• メモリ注意!!(デフォルトで2GB使います)

Page 57: Sonar qubeでちょっと楽しい静的解析

最後に

• この人に少しでも追いつきたいので英語の勉強がてらSonarQubeのドキュメント和訳してます

• 少しずつ公開していくので不備などあればどんどん指摘してください

Page 58: Sonar qubeでちょっと楽しい静的解析

最後に

• この人に少しでも追いつきたいので英語の勉強がてらSonarQubeのドキュメント和訳してます

• 少しずつ公開していくので不備などあればどんどん指摘してください

以上!!