Submit Search
Upload
Sonar qubeでちょっと楽しい静的解析
•
Download as PPTX, PDF
•
38 likes
•
24,178 views
政雄 金森
Follow
渋谷Java第十回で発表した発表資料です
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 58
Download now
Recommended
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
例外設計における大罪
例外設計における大罪
Takuto Wada
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Shin Ohno
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
Recommended
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
例外設計における大罪
例外設計における大罪
Takuto Wada
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Shin Ohno
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装
Masatoshi Tada
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
Yoshifumi Kawai
Python製BDDツールで自動化してみた
Python製BDDツールで自動化してみた
KeijiUehata1
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
Twitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
企業システムにアジャイルは必要か
企業システムにアジャイルは必要か
Hiromasa Oka
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
TDD のこころ
TDD のこころ
Takuto Wada
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのか
Yusuke Suzuki
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
Keycloakのステップアップ認証について
Keycloakのステップアップ認証について
Hitachi, Ltd. OSS Solution Center.
オーバーエンジニアリングって何? #devsumi #devsumiA
オーバーエンジニアリングって何? #devsumi #devsumiA
Ore Product
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
JustSystems Corporation
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
Takuto Wada
hbstudy#6LTyuzorock
hbstudy#6LTyuzorock
yuzorock
運用管理を楽にしたいという話
運用管理を楽にしたいという話
Hisashi HATAKEYAMA
More Related Content
What's hot
基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装
Masatoshi Tada
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
Yoshifumi Kawai
Python製BDDツールで自動化してみた
Python製BDDツールで自動化してみた
KeijiUehata1
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
Twitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
企業システムにアジャイルは必要か
企業システムにアジャイルは必要か
Hiromasa Oka
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
TDD のこころ
TDD のこころ
Takuto Wada
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのか
Yusuke Suzuki
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
Keycloakのステップアップ認証について
Keycloakのステップアップ認証について
Hitachi, Ltd. OSS Solution Center.
オーバーエンジニアリングって何? #devsumi #devsumiA
オーバーエンジニアリングって何? #devsumi #devsumiA
Ore Product
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
JustSystems Corporation
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
Takuto Wada
What's hot
(20)
基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
Python製BDDツールで自動化してみた
Python製BDDツールで自動化してみた
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
Twitterのsnowflakeについて
Twitterのsnowflakeについて
企業システムにアジャイルは必要か
企業システムにアジャイルは必要か
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
TDD のこころ
TDD のこころ
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのか
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Keycloakのステップアップ認証について
Keycloakのステップアップ認証について
オーバーエンジニアリングって何? #devsumi #devsumiA
オーバーエンジニアリングって何? #devsumi #devsumiA
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
Similar to Sonar qubeでちょっと楽しい静的解析
hbstudy#6LTyuzorock
hbstudy#6LTyuzorock
yuzorock
運用管理を楽にしたいという話
運用管理を楽にしたいという話
Hisashi HATAKEYAMA
今日から始めるDigitalOcean
今日から始めるDigitalOcean
Masahito Zembutsu
Out systemsaichiusermeeting#5 lt2
Out systemsaichiusermeeting#5 lt2
潤司 渡部
20131213 OSC enterprise
20131213 OSC enterprise
samemoon
じっくりコトコト煮込んだJavaスープ
じっくりコトコト煮込んだJavaスープ
Kazuhiro Serizawa
リリース対象どーれだっ??
リリース対象どーれだっ??
__Black
20161206 re growth-tokyo-maroon1st
20161206 re growth-tokyo-maroon1st
宗 大栗
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
Koichi ITO
reInvent 2018に行ってきた
reInvent 2018に行ってきた
Yu Otsubo
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?
Makoto SAKAI
20180828 subscliption test_solution@Test Engineers Meetup #3
20180828 subscliption test_solution@Test Engineers Meetup #3
譲 安田
DevelopersのためのSonicGardenで実践しているシステム運用での11の常識 〜監視編〜
DevelopersのためのSonicGardenで実践しているシステム運用での11の常識 〜監視編〜
Teruo Adachi
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
Ryo Sasaki
Ansibleは簡単なIT自動化
Ansibleは簡単なIT自動化
You&I
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
Masataka Tsukamoto
Osoljp201204
Osoljp201204
Masataka Tsukamoto
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
taiju higashi
Zabbix on SoftLayer
Zabbix on SoftLayer
Yuichi Tamagawa
スクラムプロジェクト準備(公開用) No.31
スクラムプロジェクト準備(公開用) No.31
Sukusuku Scrum
Similar to Sonar qubeでちょっと楽しい静的解析
(20)
hbstudy#6LTyuzorock
hbstudy#6LTyuzorock
運用管理を楽にしたいという話
運用管理を楽にしたいという話
今日から始めるDigitalOcean
今日から始めるDigitalOcean
Out systemsaichiusermeeting#5 lt2
Out systemsaichiusermeeting#5 lt2
20131213 OSC enterprise
20131213 OSC enterprise
じっくりコトコト煮込んだJavaスープ
じっくりコトコト煮込んだJavaスープ
リリース対象どーれだっ??
リリース対象どーれだっ??
20161206 re growth-tokyo-maroon1st
20161206 re growth-tokyo-maroon1st
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
reInvent 2018に行ってきた
reInvent 2018に行ってきた
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?
20180828 subscliption test_solution@Test Engineers Meetup #3
20180828 subscliption test_solution@Test Engineers Meetup #3
DevelopersのためのSonicGardenで実践しているシステム運用での11の常識 〜監視編〜
DevelopersのためのSonicGardenで実践しているシステム運用での11の常識 〜監視編〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
Ansibleは簡単なIT自動化
Ansibleは簡単なIT自動化
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
Osoljp201204
Osoljp201204
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
Zabbix on SoftLayer
Zabbix on SoftLayer
スクラムプロジェクト準備(公開用) No.31
スクラムプロジェクト準備(公開用) No.31
More from 政雄 金森
AWS FIS の実験テンプレートを書いてみよう!!
AWS FIS の実験テンプレートを書いてみよう!!
政雄 金森
DevAx::connect はじめました
DevAx::connect はじめました
政雄 金森
ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発
政雄 金森
Serverless Meetup Tokyo #15 Amazon EventBridge スキーマレジストリ でイベントの扱いを簡単に!
Serverless Meetup Tokyo #15 Amazon EventBridge スキーマレジストリ でイベントの扱いを簡単に!
政雄 金森
Ecsとlambdaのバッチ処理
Ecsとlambdaのバッチ処理
政雄 金森
APIモック3分クッキング
APIモック3分クッキング
政雄 金森
Spring'17リリースノート輪読会 API By フレクト
Spring'17リリースノート輪読会 API By フレクト
政雄 金森
Sf素人が2週間でアプリケーションビルダーに挑戦してみた
Sf素人が2週間でアプリケーションビルダーに挑戦してみた
政雄 金森
More from 政雄 金森
(8)
AWS FIS の実験テンプレートを書いてみよう!!
AWS FIS の実験テンプレートを書いてみよう!!
DevAx::connect はじめました
DevAx::connect はじめました
ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発
Serverless Meetup Tokyo #15 Amazon EventBridge スキーマレジストリ でイベントの扱いを簡単に!
Serverless Meetup Tokyo #15 Amazon EventBridge スキーマレジストリ でイベントの扱いを簡単に!
Ecsとlambdaのバッチ処理
Ecsとlambdaのバッチ処理
APIモック3分クッキング
APIモック3分クッキング
Spring'17リリースノート輪読会 API By フレクト
Spring'17リリースノート輪読会 API By フレクト
Sf素人が2週間でアプリケーションビルダーに挑戦してみた
Sf素人が2週間でアプリケーションビルダーに挑戦してみた
Sonar qubeでちょっと楽しい静的解析
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のドキュメント和訳してます • 少しずつ公開していくので不備などあればどんどん 指摘してください 以上!!
Editor's Notes
消費税の話入れる?
以前っていつころ?
Download now