Your SlideShare is downloading. ×
Sonar qubeでちょっと楽しい静的解析
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

133
views

Published on

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

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

Published in: Engineering

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
133
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • 消費税の話入れる?
  • 以前っていつころ?
  • Transcript

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