SlideShare uma empresa Scribd logo
1 de 58
SonarQubeでちょっと楽しい?
静的解析
@渋谷Java 2015/03/07
金森 政雄
自己紹介
• 認証と決済のシステム
– 社内の他のサービスから利用
• 主にオフショア管理がお仕事
初LT参戦、よろしくお願いします
とりあえず言いたいことは・・・
Why 消費税増税!!??
十数種類の決済種×月額/従量/+α
× 社内全サイト = デスマしか見えない
ちなみに
IT企業役員
売れっ子若手芸人 ヒラの開発者
まさかの
同い年
アジェンダ
• SonarQube概要
• SonarQubeとの出会い
• 機能紹介
• Tips
• まとめ
SonarQube概要
SonarQubeとは
• OSSのソースコード静的解析ツール
– 様々な言語の解析をサポート(一部有料plugin)
– サイト: http://www.sonarqube.org/
• 以前は「Sonar」と呼ばれていた
• ライセンスは LGPL v3.
• SonarSource社が追加言語のカバーやサポート
SonarQubeデモページ
http://nemo.sonarqube.org/
SonarQubeとの出会い
社内の成長活動:お題「自動化」
理想
 テスト自動化やCIって楽しそう!!
社内の成長活動:お題「自動化」
理想
 テスト自動化やCIって楽しそう!!
 デプロイ自動化もやってみたい!!
社内の成長活動:お題「自動化」
理想
 テスト自動化やCIって楽しそう!!
 デプロイ自動化もやってみたい!!
 最近流行りのツールもいろいろ試そう!!
社内の成長活動:お題「自動化」
理想
 テスト自動化やCIって楽しそう!!
 デプロイ自動化もやってみたい!!
 最近流行りのツールもいろいろ試そう!!
現実
 コストダウン最優先
現実
 コストダウン最優先
 部門の壁
『デプロイや構成管理は運用部なので手出し無用』
社内の成長活動:お題「自動化」
理想
 デプロイ自動化もやってみたい!!
 最近流行りのツールもいろいろ試そう!!
諸々あって静的解析担当に
本音:
「えー、今更静的解析?」
諸々あって静的解析担当に
本音:
「えー、今更静的解析?」
というわけにもいかないので・・・
静的解析のイメージ@Java
• Checkstyle
– 開発中は便利
– ルールのカスタマイズが面倒(設定、ルール追加)
• FindBugs
– バグ本当に見つかります・・・?
– checkstyleと一緒に入れとくだけ入れておく
• Jenkins
– Pluginで解析・レポートが見れる
静的解析のイメージ@Java
• Checkstyle
– 開発中は便利
– ルールのカスタマイズが面倒(設定、ルール追加)
• FindBugs
– バグ本当に見つかります・・・?
– checkstyleと一緒に入れとくだけ入れておく
• Jenkins
– Pluginで解析・レポートが見れる
もうやってるんですけど・・・
増える要求
増える要求
難易度の判定も
できたらいいな
増える要求
難易度の判定も
できたらいいな
レガシーなコードの
見積もりを出したい
増える要求
難易度の判定も
できたらいいな
レガシーなコードの
見積もりを出したい
チーム毎の
品質を
比較したい
増える要求
難易度の判定も
できたらいいな
レガシーなコードの
見積もりを出したい
チーム毎の
品質を
比較したい
リファクタリング
ポイントの特定
増える要求
難易度の判定も
できたらいいな
レガシーなコードの
見積もりを出したい
チーム毎の
品質を
比較したい
リファクタリング
ポイントの特定
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」
– コマンド:「sonar-runner」
※パス通すの忘れない
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
解析結果の確認
コード行数
重複率の割合
サイクロマチック複雑度
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
– Jenkins
• メモリ注意!!(デフォルトで2GB使います)
最後に
• この人に少しでも追いつきたいので英語の勉強がて
らSonarQubeのドキュメント和訳してます
• 少しずつ公開していくので不備などあればどんどん
指摘してください
最後に
• この人に少しでも追いつきたいので英語の勉強がて
らSonarQubeのドキュメント和訳してます
• 少しずつ公開していくので不備などあればどんどん
指摘してください
以上!!

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
 
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
Keycloakのステップアップ認証について
Keycloakのステップアップ認証についてKeycloakのステップアップ認証について
Keycloakのステップアップ認証について
 

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

hbstudy#6LTyuzorock
hbstudy#6LTyuzorockhbstudy#6LTyuzorock
hbstudy#6LTyuzorock
yuzorock
 
運用管理を楽にしたいという話
運用管理を楽にしたいという話運用管理を楽にしたいという話
運用管理を楽にしたいという話
Hisashi HATAKEYAMA
 
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
taiju higashi
 

Semelhante a Sonar qubeでちょっと楽しい静的解析 (20)

hbstudy#6LTyuzorock
hbstudy#6LTyuzorockhbstudy#6LTyuzorock
hbstudy#6LTyuzorock
 
運用管理を楽にしたいという話
運用管理を楽にしたいという話運用管理を楽にしたいという話
運用管理を楽にしたいという話
 
今日から始めるDigitalOcean
今日から始めるDigitalOcean今日から始めるDigitalOcean
今日から始めるDigitalOcean
 
Out systemsaichiusermeeting#5 lt2
Out systemsaichiusermeeting#5 lt2Out systemsaichiusermeeting#5 lt2
Out systemsaichiusermeeting#5 lt2
 
20131213 OSC enterprise
20131213 OSC enterprise20131213 OSC enterprise
20131213 OSC enterprise
 
じっくりコトコト煮込んだJavaスープ
じっくりコトコト煮込んだJavaスープじっくりコトコト煮込んだJavaスープ
じっくりコトコト煮込んだJavaスープ
 
リリース対象どーれだっ??
リリース対象どーれだっ??リリース対象どーれだっ??
リリース対象どーれだっ??
 
20161206 re growth-tokyo-maroon1st
20161206 re growth-tokyo-maroon1st20161206 re growth-tokyo-maroon1st
20161206 re growth-tokyo-maroon1st
 
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
 
reInvent 2018に行ってきた
reInvent 2018に行ってきたreInvent 2018に行ってきた
reInvent 2018に行ってきた
 
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?
 
20180828 subscliption test_solution@Test Engineers Meetup #3
20180828 subscliption test_solution@Test Engineers Meetup #320180828 subscliption test_solution@Test Engineers Meetup #3
20180828 subscliption test_solution@Test Engineers Meetup #3
 
DevelopersのためのSonicGardenで実践しているシステム運用での11の常識 〜監視編〜
DevelopersのためのSonicGardenで実践しているシステム運用での11の常識 〜監視編〜DevelopersのためのSonicGardenで実践しているシステム運用での11の常識 〜監視編〜
DevelopersのためのSonicGardenで実践しているシステム運用での11の常識 〜監視編〜
 
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
 
Ansibleは簡単なIT自動化
Ansibleは簡単なIT自動化Ansibleは簡単なIT自動化
Ansibleは簡単なIT自動化
 
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
 
Osoljp201204
Osoljp201204Osoljp201204
Osoljp201204
 
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
 
Zabbix on SoftLayer
Zabbix on SoftLayer Zabbix on SoftLayer
Zabbix on SoftLayer
 
スクラムプロジェクト準備(公開用) No.31
スクラムプロジェクト準備(公開用) No.31スクラムプロジェクト準備(公開用) No.31
スクラムプロジェクト準備(公開用) No.31
 

Mais de 政雄 金森

Mais de 政雄 金森 (8)

AWS FIS の実験テンプレートを書いてみよう!!
AWS FIS の実験テンプレートを書いてみよう!!AWS FIS の実験テンプレートを書いてみよう!!
AWS FIS の実験テンプレートを書いてみよう!!
 
DevAx::connect はじめました
DevAx::connect はじめましたDevAx::connect はじめました
DevAx::connect はじめました
 
ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発
 
Serverless Meetup Tokyo #15 Amazon EventBridge スキーマレジストリ でイベントの扱いを簡単に!
Serverless Meetup Tokyo #15 Amazon EventBridge スキーマレジストリ でイベントの扱いを簡単に!Serverless Meetup Tokyo #15 Amazon EventBridge スキーマレジストリ でイベントの扱いを簡単に!
Serverless Meetup Tokyo #15 Amazon EventBridge スキーマレジストリ でイベントの扱いを簡単に!
 
Ecsとlambdaのバッチ処理
Ecsとlambdaのバッチ処理Ecsとlambdaのバッチ処理
Ecsとlambdaのバッチ処理
 
APIモック3分クッキング
APIモック3分クッキングAPIモック3分クッキング
APIモック3分クッキング
 
Spring'17リリースノート輪読会 API By フレクト
Spring'17リリースノート輪読会 API By フレクトSpring'17リリースノート輪読会 API By フレクト
Spring'17リリースノート輪読会 API By フレクト
 
Sf素人が2週間でアプリケーションビルダーに挑戦してみた
Sf素人が2週間でアプリケーションビルダーに挑戦してみたSf素人が2週間でアプリケーションビルダーに挑戦してみた
Sf素人が2週間でアプリケーションビルダーに挑戦してみた
 

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

Notas do Editor

  1. 消費税の話入れる?
  2. 以前っていつころ?