Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
SonarQubeでちょっと楽しい?
静的解析
@渋谷Java 2015/03/07
金森 政雄
自己紹介
• 認証と決済のシステム
– 社内の他のサービスから利用
• 主にオフショア管理がお仕事
初LT参戦、よろしくお願いします
とりあえず言いたいことは・・・
Why 消費税増税!!??
十数種類の決済種×月額/従量/+α
× 社内全サイト = デスマしか見えない
ちなみに
IT企業役員
売れっ子若手芸人 ヒラの開発者
まさかの
同い年
アジェンダ
• SonarQube概要
• SonarQubeとの出会い
• 機能紹介
• Tips
• まとめ
SonarQube概要
SonarQubeとは
• OSSのソースコード静的解析ツール
– 様々な言語の解析をサポート(一部有料plugin)
– サイト: http://www.sonarqube.org/
• 以前は「Sonar」と呼ばれていた
• ライセンスは ...
SonarQubeデモページ
http://nemo.sonarqube.org/
SonarQubeとの出会い
社内の成長活動:お題「自動化」
理想
 テスト自動化やCIって楽しそう!!
社内の成長活動:お題「自動化」
理想
 テスト自動化やCIって楽しそう!!
 デプロイ自動化もやってみたい!!
社内の成長活動:お題「自動化」
理想
 テスト自動化やCIって楽しそう!!
 デプロイ自動化もやってみたい!!
 最近流行りのツールもいろいろ試そう!!
社内の成長活動:お題「自動化」
理想
 テスト自動化やCIって楽しそう!!
 デプロイ自動化もやってみたい!!
 最近流行りのツールもいろいろ試そう!!
現実
 コストダウン最優先
現実
 コストダウン最優先
 部門の壁
『デプロイや構成管理は運用部なので手出し無用』
社内の成長活動:お題「自動化」
理想
 デプロイ自動化もやってみたい!!
 最近流行りのツールもいろいろ試そう!!
諸々あって静的解析担当に
本音:
「えー、今更静的解析?」
諸々あって静的解析担当に
本音:
「えー、今更静的解析?」
というわけにもいかないので・・・
静的解析のイメージ@Java
• Checkstyle
– 開発中は便利
– ルールのカスタマイズが面倒(設定、ルール追加)
• FindBugs
– バグ本当に見つかります・・・?
– checkstyleと一緒に入れとくだけ入れておく
• ...
静的解析のイメージ@Java
• Checkstyle
– 開発中は便利
– ルールのカスタマイズが面倒(設定、ルール追加)
• FindBugs
– バグ本当に見つかります・・・?
– checkstyleと一緒に入れとくだけ入れておく
• ...
増える要求
増える要求
難易度の判定も
できたらいいな
増える要求
難易度の判定も
できたらいいな
レガシーなコードの
見積もりを出したい
増える要求
難易度の判定も
できたらいいな
レガシーなコードの
見積もりを出したい
チーム毎の
品質を
比較したい
増える要求
難易度の判定も
できたらいいな
レガシーなコードの
見積もりを出したい
チーム毎の
品質を
比較したい
リファクタリング
ポイントの特定
増える要求
難易度の判定も
できたらいいな
レガシーなコードの
見積もりを出したい
チーム毎の
品質を
比較したい
リファクタリング
ポイントの特定
SonarQube発見!!
• 多機能:難易度判定などにも使えそう
• pluginの開発で拡張もできる!!
• これならやる気出そう!!
SonarQube機能紹介
ソースコード解析の流れ
ソースコード
DB
ソースコード
DB
Analyzer
ソースコード
DB
Analyzer
解析
ソースコード
DB
Analyzer
解析
ソースコード
格
納
DB
Analyzer
CIツール
解析 解析
ソースコード
格
納
DB
Analyzer
CIツール
開発者
解析 解析
参照
ソースコード
格
納
SonarQube Runner
• SonarQube推奨のAnalyzer
– SonarQubeのサイトからダウンロード
• 言語問わず解析に利用できる
– 前提:言語に応じたpluginをインストールする
– 設定ファイルで解析する言語...
sonar-project.properties
#Required metadata
sonar.projectKey=sample
sonar.projectName=sample
sonar.projectVersion=1.0
# Co...
解析結果の確認
コード行数
重複率の割合
サイクロマチック複雑度
SQALE Rating
技術的負債
LOC:コード行数
• コードの行数を計測
– コメントは抜いてくれる
• ファイル数、クラス数、アクセサの数も測定
Duplications:コードの重複率
• ソースコードの重複率
Complexity:複雑度
• サイクロマチック複雑度
– デフォルトを1として分岐ごとに+1
– プロジェクトの合計、関数/クラスファイルの平均
• 1関数あたり15を超え始めると注意
Technical Debt:技術的負債
• 技術的課題を負債にたとえる
– 単位は修正にかかる工数
– 工数は設定で変更できる
SQALE Rating
• コード全体に占める技術的負債の割合
– コード全体はLoC×30min(デフォルト)
• A~Eで判定
– Aは10%以下、Eは100%以上
問題のあるところにドリルダウン
※SonarQubeドキュメントから拝借
dashboardのカスタマイズ
• widgetを組み合わせてdashboardを作れる
Time Machine
• 測定値の推移が見れるdashboard
Tips(というより起こったこと)
①メモリ不足連発
• ハードウェア要件
( http://docs.sonarqube.org/display/SONAR/Requirements )
– SonarQubeは最低1GBのメモリが必要
– ディスクI/Oも高速である必要がある...
②文字コードが統一されていない
• SonarQube Runnerの設定で文字コード指定
• 設定に反する文字コードのソースがあるとエ
ラー
文字コードが統一されてないと解析すらしても
らえない
③指標は組み合わせて見る
• 社内で悪名高いレガシーコードを分析
– 皆の期待:「品質めちゃくちゃ悪いはず」
③指標は組み合わせて見る
• 社内で悪名高いレガシーコードを分析
– 皆の期待:「品質めちゃくちゃ悪いはず」
⇒SQALE Rating→「A」
③指標は組み合わせて見る
• 社内で悪名高いレガシーコードを分析
– 皆の期待:「品質めちゃくちゃ悪いはず」
⇒SQALE Rating→「A」
③指標は組み合わせて見る
• 原因はソースコードの重複率
– 重複率:68.2%⇒半分以上要らないコード
– ちゃんと動くところがコピーされるので規模に対して負債
は膨らまなかった?
1つの指標だけ見ても判断できない。
組み合わせてまずいところ...
まとめ
「見える化」って大事
• 「見られている意識」が品質の改善に
– 自然とソースレビュー/リファクタリング提案
– 他と比較されるので成果がわかりやすい
• 上司受けがよい
– 定量化された指標
おまけ
• ローカルで試せる環境作成用のplaybook
https://github.com/G-F/sonar-playbook
• Vagrant と ansibleで自動的に下記が入ります
– SonarQube
– mysql
– J...
最後に
• この人に少しでも追いつきたいので英語の勉強がて
らSonarQubeのドキュメント和訳してます
• 少しずつ公開していくので不備などあればどんどん
指摘してください
最後に
• この人に少しでも追いつきたいので英語の勉強がて
らSonarQubeのドキュメント和訳してます
• 少しずつ公開していくので不備などあればどんどん
指摘してください
以上!!
Upcoming SlideShare
Loading in …5
×

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

18,758 views

Published on

渋谷Java第十回で発表した発表資料です

Published in: Engineering

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

  1. 1. SonarQubeでちょっと楽しい? 静的解析 @渋谷Java 2015/03/07 金森 政雄
  2. 2. 自己紹介 • 認証と決済のシステム – 社内の他のサービスから利用 • 主にオフショア管理がお仕事
  3. 3. 初LT参戦、よろしくお願いします とりあえず言いたいことは・・・
  4. 4. Why 消費税増税!!?? 十数種類の決済種×月額/従量/+α × 社内全サイト = デスマしか見えない
  5. 5. ちなみに IT企業役員 売れっ子若手芸人 ヒラの開発者 まさかの 同い年
  6. 6. アジェンダ • SonarQube概要 • SonarQubeとの出会い • 機能紹介 • Tips • まとめ
  7. 7. SonarQube概要
  8. 8. SonarQubeとは • OSSのソースコード静的解析ツール – 様々な言語の解析をサポート(一部有料plugin) – サイト: http://www.sonarqube.org/ • 以前は「Sonar」と呼ばれていた • ライセンスは LGPL v3. • SonarSource社が追加言語のカバーやサポート
  9. 9. SonarQubeデモページ http://nemo.sonarqube.org/
  10. 10. SonarQubeとの出会い
  11. 11. 社内の成長活動:お題「自動化」 理想  テスト自動化やCIって楽しそう!!
  12. 12. 社内の成長活動:お題「自動化」 理想  テスト自動化やCIって楽しそう!!  デプロイ自動化もやってみたい!!
  13. 13. 社内の成長活動:お題「自動化」 理想  テスト自動化やCIって楽しそう!!  デプロイ自動化もやってみたい!!  最近流行りのツールもいろいろ試そう!!
  14. 14. 社内の成長活動:お題「自動化」 理想  テスト自動化やCIって楽しそう!!  デプロイ自動化もやってみたい!!  最近流行りのツールもいろいろ試そう!! 現実  コストダウン最優先
  15. 15. 現実  コストダウン最優先  部門の壁 『デプロイや構成管理は運用部なので手出し無用』 社内の成長活動:お題「自動化」 理想  デプロイ自動化もやってみたい!!  最近流行りのツールもいろいろ試そう!!
  16. 16. 諸々あって静的解析担当に 本音: 「えー、今更静的解析?」
  17. 17. 諸々あって静的解析担当に 本音: 「えー、今更静的解析?」 というわけにもいかないので・・・
  18. 18. 静的解析のイメージ@Java • Checkstyle – 開発中は便利 – ルールのカスタマイズが面倒(設定、ルール追加) • FindBugs – バグ本当に見つかります・・・? – checkstyleと一緒に入れとくだけ入れておく • Jenkins – Pluginで解析・レポートが見れる
  19. 19. 静的解析のイメージ@Java • Checkstyle – 開発中は便利 – ルールのカスタマイズが面倒(設定、ルール追加) • FindBugs – バグ本当に見つかります・・・? – checkstyleと一緒に入れとくだけ入れておく • Jenkins – Pluginで解析・レポートが見れる もうやってるんですけど・・・
  20. 20. 増える要求
  21. 21. 増える要求 難易度の判定も できたらいいな
  22. 22. 増える要求 難易度の判定も できたらいいな レガシーなコードの 見積もりを出したい
  23. 23. 増える要求 難易度の判定も できたらいいな レガシーなコードの 見積もりを出したい チーム毎の 品質を 比較したい
  24. 24. 増える要求 難易度の判定も できたらいいな レガシーなコードの 見積もりを出したい チーム毎の 品質を 比較したい リファクタリング ポイントの特定
  25. 25. 増える要求 難易度の判定も できたらいいな レガシーなコードの 見積もりを出したい チーム毎の 品質を 比較したい リファクタリング ポイントの特定
  26. 26. SonarQube発見!! • 多機能:難易度判定などにも使えそう • pluginの開発で拡張もできる!! • これならやる気出そう!!
  27. 27. SonarQube機能紹介
  28. 28. ソースコード解析の流れ
  29. 29. ソースコード
  30. 30. DB ソースコード
  31. 31. DB Analyzer ソースコード
  32. 32. DB Analyzer 解析 ソースコード
  33. 33. DB Analyzer 解析 ソースコード 格 納
  34. 34. DB Analyzer CIツール 解析 解析 ソースコード 格 納
  35. 35. DB Analyzer CIツール 開発者 解析 解析 参照 ソースコード 格 納
  36. 36. SonarQube Runner • SonarQube推奨のAnalyzer – SonarQubeのサイトからダウンロード • 言語問わず解析に利用できる – 前提:言語に応じたpluginをインストールする – 設定ファイルで解析する言語を指定 • 設定ファイルを配置しそこでコマンドを実行 – 設定ファイル:「sonar-project.properties」 – コマンド:「sonar-runner」 ※パス通すの忘れない
  37. 37. sonar-project.properties #Required metadata sonar.projectKey=sample sonar.projectName=sample sonar.projectVersion=1.0 # Comma-separated paths to directories with sources (required) sonar.sources=src # Language sonar.language=java # Encoding of the source files sonar.sourceEncoding=UTF-8
  38. 38. 解析結果の確認 コード行数 重複率の割合 サイクロマチック複雑度 SQALE Rating 技術的負債
  39. 39. LOC:コード行数 • コードの行数を計測 – コメントは抜いてくれる • ファイル数、クラス数、アクセサの数も測定
  40. 40. Duplications:コードの重複率 • ソースコードの重複率
  41. 41. Complexity:複雑度 • サイクロマチック複雑度 – デフォルトを1として分岐ごとに+1 – プロジェクトの合計、関数/クラスファイルの平均 • 1関数あたり15を超え始めると注意
  42. 42. Technical Debt:技術的負債 • 技術的課題を負債にたとえる – 単位は修正にかかる工数 – 工数は設定で変更できる
  43. 43. SQALE Rating • コード全体に占める技術的負債の割合 – コード全体はLoC×30min(デフォルト) • A~Eで判定 – Aは10%以下、Eは100%以上
  44. 44. 問題のあるところにドリルダウン ※SonarQubeドキュメントから拝借
  45. 45. dashboardのカスタマイズ • widgetを組み合わせてdashboardを作れる
  46. 46. Time Machine • 測定値の推移が見れるdashboard
  47. 47. Tips(というより起こったこと)
  48. 48. ①メモリ不足連発 • ハードウェア要件 ( http://docs.sonarqube.org/display/SONAR/Requirements ) – SonarQubeは最低1GBのメモリが必要 – ディスクI/Oも高速である必要がある • 試しに仮想マシンで動かしてエラー連発 (当たり前ですが)ハードウェア要件ちゃんと確認する
  49. 49. ②文字コードが統一されていない • SonarQube Runnerの設定で文字コード指定 • 設定に反する文字コードのソースがあるとエ ラー 文字コードが統一されてないと解析すらしても らえない
  50. 50. ③指標は組み合わせて見る • 社内で悪名高いレガシーコードを分析 – 皆の期待:「品質めちゃくちゃ悪いはず」
  51. 51. ③指標は組み合わせて見る • 社内で悪名高いレガシーコードを分析 – 皆の期待:「品質めちゃくちゃ悪いはず」 ⇒SQALE Rating→「A」
  52. 52. ③指標は組み合わせて見る • 社内で悪名高いレガシーコードを分析 – 皆の期待:「品質めちゃくちゃ悪いはず」 ⇒SQALE Rating→「A」
  53. 53. ③指標は組み合わせて見る • 原因はソースコードの重複率 – 重複率:68.2%⇒半分以上要らないコード – ちゃんと動くところがコピーされるので規模に対して負債 は膨らまなかった? 1つの指標だけ見ても判断できない。 組み合わせてまずいところを見つけていく
  54. 54. まとめ
  55. 55. 「見える化」って大事 • 「見られている意識」が品質の改善に – 自然とソースレビュー/リファクタリング提案 – 他と比較されるので成果がわかりやすい • 上司受けがよい – 定量化された指標
  56. 56. おまけ • ローカルで試せる環境作成用のplaybook https://github.com/G-F/sonar-playbook • Vagrant と ansibleで自動的に下記が入ります – SonarQube – mysql – Jenkins • メモリ注意!!(デフォルトで2GB使います)
  57. 57. 最後に • この人に少しでも追いつきたいので英語の勉強がて らSonarQubeのドキュメント和訳してます • 少しずつ公開していくので不備などあればどんどん 指摘してください
  58. 58. 最後に • この人に少しでも追いつきたいので英語の勉強がて らSonarQubeのドキュメント和訳してます • 少しずつ公開していくので不備などあればどんどん 指摘してください 以上!!

×