SlideShare ist ein Scribd-Unternehmen logo
1 von 69
© Works Applications Co.,Ltd.#ccc_f3
2017 May/20th, JJUG CCC 2017 Spring
SpotBugs(FindBugs)による
大規模ERPのコード品質改善
1
© Works Applications Co.,Ltd.#ccc_f3
Agenda
自己紹介
 2017年5月現在のJava静的解析ツール機能・動向比較
 大規模ERPのコード品質が抱える問題とその解決
 開発している組織とその製品
 行っている工夫と今後の展望
2
© Works Applications Co.,Ltd.#ccc_f3
このセッションで得られるもの
 大規模開発にて運用可能なコード品質改善手法
 グローバルで大規模なJava開発において必須となる
「コード品質の底上げ」の実践的な手法
 社内FWやライブラリの使い方を広める手法として
活用できる静的解析ツールプラグインの開発手法
3
© Works Applications Co.,Ltd.#ccc_f3
突然のQuiz
4
© Works Applications Co.,Ltd.#ccc_f3
JJUG CCCのCCCとは?
1. クラス・チョット・コンパイルデキル
2. 超・コーディング・コンテスト
3. クロス・コミュニティ・カンファレンス
5
© Works Applications Co.,Ltd.#ccc_f3
自己紹介
✤ https://github.com/KengoTODA/
✤ ㈱ワークスアプリケーションズ
研究開発エンジニア
✤ ゲームが作りたくてHSP2に
手を出し、フリーソフトウェア
作家を経て、入社しR&Dに
✤ SpotBugsの中の人
JVM Simulator
Maven3 ebook
6
© Works Applications Co.,Ltd.#ccc_f3
1. 2017年5月現在の
Java静的解析ツール機能・動向比較
7
© Works Applications Co.,Ltd.#ccc_f3
静的解析ツールの良いところ
✤ 使い手に経験や深い知識がなくても、
✤ レビュー前やデプロイ前など早い段階で、
✤ 問題を発見できる
8
© Works Applications Co.,Ltd.#ccc_f3
比較対象Java静的解析ツール
 Checkstyle
 PMD
 FindBugs / SpotBugs
 Checker Framework
 Google error-prone
9
© Works Applications Co.,Ltd.#ccc_f3
Checkstyle
 ソースコード解析なのでコンパイルなしで実行できる
 多彩なIDE・ビルドツールに対応
 コーディング規約の確認が主目的
 プラグイン実装に必要な知識が少ない
 http://checkstyle.sourceforge.net/
10
© Works Applications Co.,Ltd.#ccc_f3
PMD
 ソースコード解析なのでコンパイルなしで実行できる
 多彩なIDE・ビルドツールそして言語に対応
 CPD(コピペ検出)機能も搭載
 プラグイン実装はわりと複雑
 https://pmd.github.io/
11
© Works Applications Co.,Ltd.#ccc_f3
FindBugs
 バイトコード解析なのでコードにない情報(親クラス、
依存先、アノテーション等)もCLASSPATHから補完できる
 多彩なIDE・ビルドツールに対応
 プラグイン実装にはJVMやバイトコードの知識があると良い
 https://spotbugs.github.io/
12
© Works Applications Co.,Ltd.#ccc_f3
SpotBugsとは?
 FindBugsの開発がしばらく止まっていた
(3.0.1は2年弱前のリリース)
 3.1.0リリース準備&コミュニティ形成中
 FindBugsコミュニティにおける例の件の顛末、
そしてSpotBugsとは何か
13
© Works Applications Co.,Ltd.#ccc_f3
参考:JSR305アノテーションの今
 javax.annotation パッケージに含まれる
@Nonnull や@Untaintedなどのアノテーション
 JSR305がDormantとなった後もFindBugsが配布していた
 SpotBugsによるメンテナンス予定無し
 型パラメータに使うこともできないので
今後穏やかに置き換えられていくのでは
14
© Works Applications Co.,Ltd.#ccc_f3
Checker Framework
 Java8のJSR 308 (Annotations on Java Types) を利用する
 多彩なIDE・ビルドツールに対応
 JDKに含まれるクラスの振る舞いをデータベースに持つ
 https://checkerframework.org/
15
© Works Applications Co.,Ltd.#ccc_f3
Google error-prone
 コンパイル時に解析するのでコードにない情報も拾いやすい
 ソースコードの自動修正を当初から意識している?
 Eclipse非対応(com.sun.* パッケージに依存のため)
 色々モダンでプラグイン実装もしやすい
 Google社員以外からのPRは(実績として)受け付けてない
 http://errorprone.info/
16
Refs: http://dl.acm.org/citation.cfm?id=2486877
© Works Applications Co.,Ltd.#ccc_f3
今使うならどのツール?
17
\ Target Standard Rules Note
Checkstyle
7.7
AST 152 checks coding規約
PMD
5.6.1
AST 287 rules
(PMD Java)
多言語対応
SpotBugs
3.1.0−RC2
Bytecode 453 patterns
(+9 experimentals)
plugin豊富
Checker Fw
2.1.11
AST
(Compiler拡張)
19 checkers JSR308対応
error-prone
v2.0.19
AST
(Compiler拡張)
145 patterns
(+61 experimentals)
将来に期待
© Works Applications Co.,Ltd.#ccc_f3
今使うならどのツール?
 とにかく数を出したい
 SpotBugs + Checker Framework
 Type Annotationを使えばSpotBugsに見つけられない問題も
炙り出せる可能性がある
 解析に時間をかけたくない
 error-proneでコンパイル時チェック
 PMDをコンパイラと並列実行
18
© Works Applications Co.,Ltd.#ccc_f3
 Javaスキルの高い開発者が揃っている
 アノテーションの利用を促進しChecker Frameworkを活用する
 定期的なSpotBugsで細かい問題も炙り出す
 開発者のJavaスキルにばらつきがある
 Checkstyleで最低限の読みやすさを担保する
 CPDでコピペに警告をする(節度のあるコピペを促す)
 動作を軽くしたPMDやSpotBugsをこまめに回し最低限のミスを防ぐ
19
今使うならどのツール?
© Works Applications Co.,Ltd.#ccc_f3
Agenda
 自己紹介
 2017年5月現在のJava静的解析ツール機能・動向比較
 大規模ERPのコード品質が抱える問題とその解決
 開発している組織とその製品
 行っている工夫と今後の展望
20
© Works Applications Co.,Ltd.#ccc_f3
2. 大規模ERPのコード品質が
抱える問題
21
© Works Applications Co.,Ltd.#ccc_f3
株式会社
ワークスアプリケーションズとは
✤ ERPパッケージの開発を行っている企業
✤ シンガポール、中国、インド、アメリカ等にも拠点
✤ コンシューマアプリのようなユーザビリティと
スピードを持つERP「HUE(AI WORKS)」を
開発・提供
22
© Works Applications Co.,Ltd.#ccc_f3
HUEの実装
✤ 脱RDBするなど速度にこだわっていて、
✤ MSAしないと死ぬ程度には山ほどサービスがあり、
✤ 徳島に研究所作るレベルで自然言語処理に本気で、
✤ 100ms達成のためにAWS Lambdaを導入するなど
新しいことも色々やっている。
23
© Works Applications Co.,Ltd.#ccc_f3
HUEの実装を支える人
✤ 非常に多彩で長所も多い
✤ 東京・大阪・チェンナイ・上海・シンガポールなどに
開発拠点が分散している
✤ 受けた教育や常識からして大きく違う
✤ フロントエンド、フレームワーク、モバイル、機械学習、
バッチ、分散処理といった様々な専門家が共存
✤ スキルのない新人が増え続けている状態
24
© Works Applications Co.,Ltd.#ccc_f3
HUEの実装を支える人
✤ 非常に多彩で長所も多い
✤ 東京・大阪・チェンナイ・上海・シンガポールなどに
開発拠点が分散している
✤ 受けた教育や常識からして大きく違う
✤ フロントエンド、フレームワーク、モバイル、機械学習、
バッチ、分散処理といった様々な専門家が共存
✤ スキルのない新人が増え続けている状態
25
問:
高速に増えていく
開発者のキャッチアップを
少ないコミュニケーションで
どのように助けるか?
© Works Applications Co.,Ltd.#ccc_f3
なぜSpotBugsか
✤ 社内の人材と資産
✤ 内部実装に明るい複数の開発者
✤ プラグイン実装経験の蓄積
✤ Eclipse連携
✤ HUEはEclipseを標準IDEとしている
✤ Java8サポート
✤ FindBugs 3.0.1はLambdaの扱いに
問題がある
27
© Works Applications Co.,Ltd.#ccc_f3
Agenda
‣ 自己紹介
‣ 2017年5月現在のJava静的解析ツール機能・動向比較
 大規模ERPのコード品質が抱える問題とその解決
 開発している組織とその製品
 行っている工夫と今後の展望
28
© Works Applications Co.,Ltd.#ccc_f3
3. HUEが行っている工夫と
今後の展望
29
© Works Applications Co.,Ltd.#ccc_f3
過去の失敗
✤ デフォルト設定のままFindBugsやCheckstyleを
ローカルビルドやプレマージビルドに導入し、
生産性を大きく下げた
✤ プレマージビルドが1時間近くかかってしまった
✤ mvn -Dfindbugs.skip や <findbugs.skip>true
</findbugs.skip> が当たり前になってしまった
30
© Works Applications Co.,Ltd.#ccc_f3
過去の失敗
✤ デフォルト設定のままFindBugsをEclipseに導入し、
生産性を大きく下げた
✤ ワークスペースに10を超えるプロジェクトを常時
用意して開発する人が多かった
✤ Eclipse Pluginにパフォーマンス上の欠陥があった
31
© Works Applications Co.,Ltd.#ccc_f3
そもそも、
✤ MSAを目指しているのに組織横断な解析は必要か?
✤ 各サービス開発者が好きにやればいいのでは?
✤ 自治できる活動を開発効率を低下させてまで
横断的にやる?
33
© Works Applications Co.,Ltd.#ccc_f3
MSAで組織横断な解析は必要か?
✤ 必要
✤ 静的解析はnice to haveではなくmust to have
✤ それぞれ異なる人材・工数を持っているので
完全に自治に任せるといつ実施されるのか不明瞭
✤ 開発効率を下げない方法を探す必要がある
34
© Works Applications Co.,Ltd.#ccc_f3
優先度
網羅性
(メリット)
失敗を踏まえて
✤ 開発効率に妥協しない
✤ 極力開発者の日常業務を
ブロックしない手法を探す
✤ 効率低下を納得させられる
価値を出す
✤ ちゃんと中身を理解して使う
✤ 結局はバッチプログラムなので
慣れた手法でプロファイル可能
開発効率
(納得)
35
© Works Applications Co.,Ltd.#ccc_f3
調査:なぜFindBugsは遅いのか?
✤ 10数年前の常識にもとづいた実装 (SpotBugs 3.1.0-RC1で解消)
✤ Mapを使った String#intern() 相当の自前処理
✤ Listインスタンスを使いまわすための計算処理
✤ Eclipse GUIを頻繁に更新しすぎる (SpotBugs 3.1.0-RC2で解消)
✤ 解析対象が変わるたびにUIを更新
✤ シングルスレッド(コアを使い切れない)
36
© Works Applications Co.,Ltd.#ccc_f3
調査:環境変更で高速化できる?
✤ ほぼできない
✤ FindBugsはCPU boundだがシングルスレッドなバッチ
✤ 複数コアを食い切っているのはJITコンパイラのスレッド
(-XX:CICompilerCountで増減可だが速度にほぼ寄与なし)
✤ OOMEやGC stormを起こさない程度のメモリを与えれば
あとはCPUコア増やしてもメモリ増やしても変化なし
37
© Works Applications Co.,Ltd.#ccc_f3
調査:Guava v19.0解析のマイクロベンチ
(4 CPU cores)
38
128m 256m 512m 1g
2
(Default)
OOME 18.2s 18.0s 18.2s
3 OOME 19.2s 18.2s 18.0s
4 OOME 24.8s 24.7s 23.6s
-XX:CICompilerCount
-Xmx & -Xms
refs: https://github.com/spotbugs/spotbugs/pull/128
© Works Applications Co.,Ltd.#ccc_f3
調査:Guava v19.0解析のマイクロベンチ
(2 CPU cores)
39
2g
Default 26.0s
G1GC 28.7s
G1GC
+
UseStringDeduplication
29.1s
GC設定(Java8)
-Xmx & -Xms
refs: https://github.com/spotbugs/spotbugs/pull/128
© Works Applications Co.,Ltd.#ccc_f3
調査:設定でfindbugs-maven-pluginを
高速化するには
✤ onlyAnalyzeで対象クラスを削り、
visitorsで利用Detectorを削ることで高速になる
✤ 発見したいバグに優先度をつけることが肝要
✤ ExcludeFilterで対象ファイルを削っても速くならない
✤ Filterは処理の結果に対して影響するため
40
© Works Applications Co.,Ltd.#ccc_f3
調査:effortの効果(TBU)
41
ACCUR
ATE_EX
CEPTIO
NS
MODEL
_INSTA
NCEOF
TRACK_
GUARA
NTEED_
VALUE
_DEREF
S_IN_N
ULL_PO
INTER_
ANALY
SIS
TRACK_
VALUE
_NUMB
ERS_IN_
NULL_P
OINTER
_ANAL
YSIS
INTERP
ROCED
URAL_
ANALY
SIS
INTERP
ROCED
URAL_
ANALY
SIS_OF_
REFERE
NCED_
CLASSE
S
CONSE
RVE_SP
ACE
SKIP_
HUGE
_MET
HODS
min ✓ ✓
less ✓ ✓ ✓
default,
more
✓ ✓ ✓ ✓ ✓ ✓
max ✓ ✓ ✓ ✓ ✓ ✓
Refs: FindBugs.java
© Works Applications Co.,Ltd.#ccc_f3
以上を踏まえて
42
© Works Applications Co.,Ltd.#ccc_f3
方針
✤ 速度重視の粗い解析と、網羅性重視の解析を
組み合わせる
✤ プレマージビルドでは変更されたクラスだけを解析
✤ 拾い漏れる問題は日次の解析で発見・報告
43
© Works Applications Co.,Ltd.#ccc_f3
重く網羅性の高い解析(概要)
✤ Jenkins + SonarQubeで開発が活発でない時間帯に実施
✤ 重大でないレベルのルールも含めて実施
✤ 開発者がいつでもアクセスできるSonarQubeを提供
✤ Readmeやプロジェクト一覧ページにBadgeを表示し
一覧性とSonarQubeへの導線を確保
44
© Works Applications Co.,Ltd.#ccc_f3
重く網羅性の高い解析(結果)
✤ 50のプロジェクトから3,000の問題を見つけ、
1ヶ月でうち900を解消した
✤ String.format() や logger.info() のフォーマット異常
✤ マルチスレッドプログラミングアンチパターン
45
© Works Applications Co.,Ltd.#ccc_f3
素早く粗い解析(概要)
✤ 重大な問題を中心に調査
✤ 独自Mavenプラグインでfindbugs-maven-pluginを
ラップ
✤ 変更された.javaファイル一覧から更新された可能性
のあるclassファイルの一覧をSpotBugsに渡す
46
© Works Applications Co.,Ltd.#ccc_f3
素早く粗い解析(結果)
✤ SpotBugsにかかる時間を平均93%削減
✤ 大きなリポジトリでも1分以内に解析を終えられる
✤ 拾いきれない問題は必ず出る
✤ 例:@NonNullをインタフェースに追加した場合
47
© Works Applications Co.,Ltd.#ccc_f3
今後の展望
✤ さらに多くのリポジトリへの導入
✤ Type Annotationを段階的に導入する
✤ 技術にこだわりの強い、共通モジュール開発者に
協力を依頼する
48
© Works Applications Co.,Ltd.#ccc_f3
4. 社内FW支援のための
SpotBugsプラグイン実装方法
49
© Works Applications Co.,Ltd.#ccc_f3
大まかな流れ
✤ 要件の明確化
✤ プロジェクトの作成
✤ JUnitで稼働確認しながら実装
✤ Messageの作成
50
© Works Applications Co.,Ltd.#ccc_f3
要件の明確化
51
✤ 要件に応じて拡張すべき親クラスが変わる
✤ OperandStackの状態を追う→OpcodeStackDetector
✤ アノテーションを確認する→AnnotationDetector
© Works Applications Co.,Ltd.#ccc_f3
プロジェクトの作成
52
$ mvn archetype:generate ¥
-DarchetypeGroupId=com.github.spotbugs ¥
-DarchetypeArtifactId=spotbugs-archetype ¥
-DarchetypeVersion=0.1.0
Refs: https://github.com/spotbugs/spotbugs-archetype
© Works Applications Co.,Ltd.#ccc_f3
JUnitで動作確認しながら実装
53
✤ 「バグとして見つけたい状態」を実装
✤ 「バグとして見つかるべきでない状態」を実装
✤ classファイルをテスト実行前に生成
© Works Applications Co.,Ltd.#ccc_f3 54
Refs: https://github.com/spotbugs/spotbugs/tree/master/test-harness
© Works Applications Co.,Ltd.#ccc_f3
Messageの作成
✤ src/main/resources/messages.xmlの改変
✤ 「何が問題か」だけでなく「どう修正できるか」も
指南することが望ましい
55
Refs: http://dl.acm.org/citation.cfm?id=2486877
© Works Applications Co.,Ltd.#ccc_f3
Live demo
56
© Works Applications Co.,Ltd.#ccc_f3
5. まとめ
57
© Works Applications Co.,Ltd.#ccc_f3
大規模開発におけるコード品質改善
✤ プロジェクトの数と規模が大きいMSAでは運用の
難度が上がる
✤ 各サービス開発者が静的解析ツールのメリットを
享受できる環境の構築が必要
58
© Works Applications Co.,Ltd.#ccc_f3
大規模開発におけるコード品質改善
✤ FindBugs/SpotBugsのクセを理解すれば
大規模開発でもサクサク利用できる
✤ パラメータの変更で実行ルールと対象コードを
絞り込む、差分解析とバッチ実行を分ける
59
© Works Applications Co.,Ltd.#ccc_f3
大規模開発におけるコード品質改善
✤ SpotBugsプラグインを開発すれば社内フレームワーク
固有の問題も静的解析ツールで発見できる
✤ 実装には必ずしもJVMやバイトコードの知識は必要
としない
60
© Works Applications Co.,Ltd.#ccc_f3
6. 採用情報
61
© Works Applications Co.,Ltd.#ccc_f3
世界を目指すエンジニアを
募集しています
62
© Works Applications Co.,Ltd.#ccc_f3
具体的な話を聞きたい方へ
✤ 発表後に私に聞きに来てください!
✤ CI、MSA、マイグレーション、開発プロセス、
多拠点開発は専門なので色々お話できます.
63
© Works Applications Co.,Ltd.#ccc_f3
Thank you!
ご清聴ありがとうございました!
64
© Works Applications Co.,Ltd.#ccc_f3
7. 参考資料
65
© Works Applications Co.,Ltd.#ccc_f3
参考情報
 ソースコードの品質向上のための効果的で効率的な
コードレビュー
 https://www.slideshare.net/MoriharuOhzu/ss-
9224836
66
© Works Applications Co.,Ltd.#ccc_f3
参考情報
 ラムダ式やストリーム API や新しい日時 API だけじゃない!
Java8 のタイプ・アノテーションあの手この手
 http://waman.hatenablog.com/entry/2014/05/08/063959
67
© Works Applications Co.,Ltd.#ccc_f3
参考情報
 Type Annotation for Static Program Analysis
 https://www.slideshare.net/skrb/type-annotation-
for-static-program-analysis
68
© Works Applications Co.,Ltd.#ccc_f3
参考情報
✤ G1: from garbage collector to waste management
consultant
✤ https://blogs.oracle.com/java-platform-
group/g1%3a-from-garbage-collector-to-waste-
management-consultant
69
© Works Applications Co.,Ltd.#ccc_f3
参考情報
✤ G1 GC おさらいと #jjug_ccc で発表した話
✤ http://cco.hatenablog.jp/entry/2015/12/01/011223
70
© Works Applications Co.,Ltd.#ccc_f3
参考情報
✤ The Google FindBugs fixit
✤ http://dl.acm.org/citation.cfm?id=1831738
71

Weitere ähnliche Inhalte

Was ist angesagt?

[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティスAmazon Web Services Japan
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Masahito Zembutsu
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかAtsushi Nakada
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugItsuki Kuroda
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テストTakahiro Moteki
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTT DATA Technology & Innovation
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService PrincipalToru Makabe
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAkihiro Kuwano
 
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]Koichiro Matsuoka
 
The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発Amazon Web Services Japan
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 

Was ist angesagt? (20)

[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
Google Cloud で実践する SRE
Google Cloud で実践する SRE  Google Cloud で実践する SRE
Google Cloud で実践する SRE
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
 
The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発
 
PostgreSQLバックアップの基本
PostgreSQLバックアップの基本PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 

Andere mochten auch

Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)Ikuru Kanuma
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Kosuke Kida
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.JustSystems Corporation
 
2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2Kazuhiro Wada
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to missAndres Almiray
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMyy yank
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求hajime funaki
 
Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)Logico
 
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~Yoshio Kajikuri
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたKoichi Sakata
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 Hiroshi Ito
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Hiroyuki Ohnaka
 
Introduction of Project Jigsaw
Introduction of Project JigsawIntroduction of Project Jigsaw
Introduction of Project JigsawYuichi Sakuraba
 
グラフデータベース入門
グラフデータベース入門グラフデータベース入門
グラフデータベース入門Masaya Dake
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...なおき きしだ
 

Andere mochten auch (20)

Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
 
2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to miss
 
Jjug ccc
Jjug cccJjug ccc
Jjug ccc
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
 
Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug 日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
Introduction of Project Jigsaw
Introduction of Project JigsawIntroduction of Project Jigsaw
Introduction of Project Jigsaw
 
グラフデータベース入門
グラフデータベース入門グラフデータベース入門
グラフデータベース入門
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
 

Ähnlich wie SpotBugs(FindBugs)による 大規模ERPのコード品質改善

楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten, core skills neede...
楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten,  core skills  neede...楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten,  core skills  neede...
楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten, core skills neede...Rakuten Group, Inc.
 
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~Yuki Ando
 
Vantan shinsuke miyaki_upload
Vantan shinsuke miyaki_uploadVantan shinsuke miyaki_upload
Vantan shinsuke miyaki_uploadShinsuke Miyaki
 
市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望についてKen Azuma
 
イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~
イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~
イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~InnovationSprint2011
 
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門陽一 滝川
 
20141003 webマーケティングエンジニアリング
20141003 webマーケティングエンジニアリング20141003 webマーケティングエンジニアリング
20141003 webマーケティングエンジニアリングInnova Inc.
 
市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望についてKen Azuma
 
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発Developers Summit
 
人が作るソフトウェア 〜今組織パターンを読む意味〜
人が作るソフトウェア 〜今組織パターンを読む意味〜人が作るソフトウェア 〜今組織パターンを読む意味〜
人が作るソフトウェア 〜今組織パターンを読む意味〜Yukei Wachi
 
最新事例にみるサービスデザインという新潮流(I・CON2014)
最新事例にみるサービスデザインという新潮流(I・CON2014)最新事例にみるサービスデザインという新潮流(I・CON2014)
最新事例にみるサービスデザインという新潮流(I・CON2014)IMJ Corporation
 
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)Developers Summit
 
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのかなぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのかYusuke Suzuki
 
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019満徳 関
 
【schoo WEB-campus】どうすれば小さなチームでも大きな成果を出せるのか
【schoo WEB-campus】どうすれば小さなチームでも大きな成果を出せるのか【schoo WEB-campus】どうすれば小さなチームでも大きな成果を出せるのか
【schoo WEB-campus】どうすれば小さなチームでも大きな成果を出せるのかschoowebcampus
 

Ähnlich wie SpotBugs(FindBugs)による 大規模ERPのコード品質改善 (20)

楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten, core skills neede...
楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten,  core skills  neede...楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten,  core skills  neede...
楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten, core skills neede...
 
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
 
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
 
Vantan shinsuke miyaki_upload
Vantan shinsuke miyaki_uploadVantan shinsuke miyaki_upload
Vantan shinsuke miyaki_upload
 
楽天エンジニアライフ
楽天エンジニアライフ楽天エンジニアライフ
楽天エンジニアライフ
 
市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について
 
Force.com開発基礎
Force.com開発基礎Force.com開発基礎
Force.com開発基礎
 
イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~
イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~
イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~
 
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
 
20141003 webマーケティングエンジニアリング
20141003 webマーケティングエンジニアリング20141003 webマーケティングエンジニアリング
20141003 webマーケティングエンジニアリング
 
市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について
 
[Biz reach qa meetup] qa team_build
[Biz reach qa meetup] qa team_build[Biz reach qa meetup] qa team_build
[Biz reach qa meetup] qa team_build
 
[デブサミ関西2013]チケット駆動で プロジェクトチームを加速せよ
[デブサミ関西2013]チケット駆動でプロジェクトチームを加速せよ[デブサミ関西2013]チケット駆動でプロジェクトチームを加速せよ
[デブサミ関西2013]チケット駆動で プロジェクトチームを加速せよ
 
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発
 
人が作るソフトウェア 〜今組織パターンを読む意味〜
人が作るソフトウェア 〜今組織パターンを読む意味〜人が作るソフトウェア 〜今組織パターンを読む意味〜
人が作るソフトウェア 〜今組織パターンを読む意味〜
 
最新事例にみるサービスデザインという新潮流(I・CON2014)
最新事例にみるサービスデザインという新潮流(I・CON2014)最新事例にみるサービスデザインという新潮流(I・CON2014)
最新事例にみるサービスデザインという新潮流(I・CON2014)
 
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
 
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのかなぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのか
 
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019
 
【schoo WEB-campus】どうすれば小さなチームでも大きな成果を出せるのか
【schoo WEB-campus】どうすれば小さなチームでも大きな成果を出せるのか【schoo WEB-campus】どうすれば小さなチームでも大きな成果を出せるのか
【schoo WEB-campus】どうすれば小さなチームでも大きな成果を出せるのか
 

Mehr von Works Applications

Gitで安定マスターブランチを手に入れる
Gitで安定マスターブランチを手に入れるGitで安定マスターブランチを手に入れる
Gitで安定マスターブランチを手に入れるWorks Applications
 
Javaでつくる本格形態素解析器
Javaでつくる本格形態素解析器Javaでつくる本格形態素解析器
Javaでつくる本格形態素解析器Works Applications
 
新入社員が多い中で効果的なレビューを行うための方法 レビューの準備からフィードバックまでの工夫
新入社員が多い中で効果的なレビューを行うための方法 レビューの準備からフィードバックまでの工夫新入社員が多い中で効果的なレビューを行うための方法 レビューの準備からフィードバックまでの工夫
新入社員が多い中で効果的なレビューを行うための方法 レビューの準備からフィードバックまでの工夫Works Applications
 
RDB脳でCassandra / MSAを始めた僕達が、分散Drivenなトランザクション管理にたどり着くまで / A journey to a...
RDB脳でCassandra / MSAを始めた僕達が、分散Drivenなトランザクション管理にたどり着くまで / A journey to a...RDB脳でCassandra / MSAを始めた僕達が、分散Drivenなトランザクション管理にたどり着くまで / A journey to a...
RDB脳でCassandra / MSAを始めた僕達が、分散Drivenなトランザクション管理にたどり着くまで / A journey to a...Works Applications
 
Cassandraに不向きなcassandraデータモデリング基礎 / Data Modeling concepts for NoSQL weak point
Cassandraに不向きなcassandraデータモデリング基礎 / Data Modeling concepts for NoSQL weak pointCassandraに不向きなcassandraデータモデリング基礎 / Data Modeling concepts for NoSQL weak point
Cassandraに不向きなcassandraデータモデリング基礎 / Data Modeling concepts for NoSQL weak pointWorks Applications
 
Enterprise UI/UX - design as code
Enterprise UI/UX - design as codeEnterprise UI/UX - design as code
Enterprise UI/UX - design as codeWorks Applications
 
Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)Works Applications
 
Global Innovation Nights - Spark
Global Innovation Nights - SparkGlobal Innovation Nights - Spark
Global Innovation Nights - SparkWorks Applications
 

Mehr von Works Applications (11)

Gitで安定マスターブランチを手に入れる
Gitで安定マスターブランチを手に入れるGitで安定マスターブランチを手に入れる
Gitで安定マスターブランチを手に入れる
 
Javaでつくる本格形態素解析器
Javaでつくる本格形態素解析器Javaでつくる本格形態素解析器
Javaでつくる本格形態素解析器
 
新入社員が多い中で効果的なレビューを行うための方法 レビューの準備からフィードバックまでの工夫
新入社員が多い中で効果的なレビューを行うための方法 レビューの準備からフィードバックまでの工夫新入社員が多い中で効果的なレビューを行うための方法 レビューの準備からフィードバックまでの工夫
新入社員が多い中で効果的なレビューを行うための方法 レビューの準備からフィードバックまでの工夫
 
RDB脳でCassandra / MSAを始めた僕達が、分散Drivenなトランザクション管理にたどり着くまで / A journey to a...
RDB脳でCassandra / MSAを始めた僕達が、分散Drivenなトランザクション管理にたどり着くまで / A journey to a...RDB脳でCassandra / MSAを始めた僕達が、分散Drivenなトランザクション管理にたどり着くまで / A journey to a...
RDB脳でCassandra / MSAを始めた僕達が、分散Drivenなトランザクション管理にたどり着くまで / A journey to a...
 
Cassandraに不向きなcassandraデータモデリング基礎 / Data Modeling concepts for NoSQL weak point
Cassandraに不向きなcassandraデータモデリング基礎 / Data Modeling concepts for NoSQL weak pointCassandraに不向きなcassandraデータモデリング基礎 / Data Modeling concepts for NoSQL weak point
Cassandraに不向きなcassandraデータモデリング基礎 / Data Modeling concepts for NoSQL weak point
 
形態素解析
形態素解析形態素解析
形態素解析
 
Erpと自然言語処理
Erpと自然言語処理Erpと自然言語処理
Erpと自然言語処理
 
Enterprise UI/UX - design as code
Enterprise UI/UX - design as codeEnterprise UI/UX - design as code
Enterprise UI/UX - design as code
 
Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)
 
Demystifying kubernetes
Demystifying kubernetesDemystifying kubernetes
Demystifying kubernetes
 
Global Innovation Nights - Spark
Global Innovation Nights - SparkGlobal Innovation Nights - Spark
Global Innovation Nights - Spark
 

SpotBugs(FindBugs)による 大規模ERPのコード品質改善

  • 1. © Works Applications Co.,Ltd.#ccc_f3 2017 May/20th, JJUG CCC 2017 Spring SpotBugs(FindBugs)による 大規模ERPのコード品質改善 1
  • 2. © Works Applications Co.,Ltd.#ccc_f3 Agenda 自己紹介  2017年5月現在のJava静的解析ツール機能・動向比較  大規模ERPのコード品質が抱える問題とその解決  開発している組織とその製品  行っている工夫と今後の展望 2
  • 3. © Works Applications Co.,Ltd.#ccc_f3 このセッションで得られるもの  大規模開発にて運用可能なコード品質改善手法  グローバルで大規模なJava開発において必須となる 「コード品質の底上げ」の実践的な手法  社内FWやライブラリの使い方を広める手法として 活用できる静的解析ツールプラグインの開発手法 3
  • 4. © Works Applications Co.,Ltd.#ccc_f3 突然のQuiz 4
  • 5. © Works Applications Co.,Ltd.#ccc_f3 JJUG CCCのCCCとは? 1. クラス・チョット・コンパイルデキル 2. 超・コーディング・コンテスト 3. クロス・コミュニティ・カンファレンス 5
  • 6. © Works Applications Co.,Ltd.#ccc_f3 自己紹介 ✤ https://github.com/KengoTODA/ ✤ ㈱ワークスアプリケーションズ 研究開発エンジニア ✤ ゲームが作りたくてHSP2に 手を出し、フリーソフトウェア 作家を経て、入社しR&Dに ✤ SpotBugsの中の人 JVM Simulator Maven3 ebook 6
  • 7. © Works Applications Co.,Ltd.#ccc_f3 1. 2017年5月現在の Java静的解析ツール機能・動向比較 7
  • 8. © Works Applications Co.,Ltd.#ccc_f3 静的解析ツールの良いところ ✤ 使い手に経験や深い知識がなくても、 ✤ レビュー前やデプロイ前など早い段階で、 ✤ 問題を発見できる 8
  • 9. © Works Applications Co.,Ltd.#ccc_f3 比較対象Java静的解析ツール  Checkstyle  PMD  FindBugs / SpotBugs  Checker Framework  Google error-prone 9
  • 10. © Works Applications Co.,Ltd.#ccc_f3 Checkstyle  ソースコード解析なのでコンパイルなしで実行できる  多彩なIDE・ビルドツールに対応  コーディング規約の確認が主目的  プラグイン実装に必要な知識が少ない  http://checkstyle.sourceforge.net/ 10
  • 11. © Works Applications Co.,Ltd.#ccc_f3 PMD  ソースコード解析なのでコンパイルなしで実行できる  多彩なIDE・ビルドツールそして言語に対応  CPD(コピペ検出)機能も搭載  プラグイン実装はわりと複雑  https://pmd.github.io/ 11
  • 12. © Works Applications Co.,Ltd.#ccc_f3 FindBugs  バイトコード解析なのでコードにない情報(親クラス、 依存先、アノテーション等)もCLASSPATHから補完できる  多彩なIDE・ビルドツールに対応  プラグイン実装にはJVMやバイトコードの知識があると良い  https://spotbugs.github.io/ 12
  • 13. © Works Applications Co.,Ltd.#ccc_f3 SpotBugsとは?  FindBugsの開発がしばらく止まっていた (3.0.1は2年弱前のリリース)  3.1.0リリース準備&コミュニティ形成中  FindBugsコミュニティにおける例の件の顛末、 そしてSpotBugsとは何か 13
  • 14. © Works Applications Co.,Ltd.#ccc_f3 参考:JSR305アノテーションの今  javax.annotation パッケージに含まれる @Nonnull や@Untaintedなどのアノテーション  JSR305がDormantとなった後もFindBugsが配布していた  SpotBugsによるメンテナンス予定無し  型パラメータに使うこともできないので 今後穏やかに置き換えられていくのでは 14
  • 15. © Works Applications Co.,Ltd.#ccc_f3 Checker Framework  Java8のJSR 308 (Annotations on Java Types) を利用する  多彩なIDE・ビルドツールに対応  JDKに含まれるクラスの振る舞いをデータベースに持つ  https://checkerframework.org/ 15
  • 16. © Works Applications Co.,Ltd.#ccc_f3 Google error-prone  コンパイル時に解析するのでコードにない情報も拾いやすい  ソースコードの自動修正を当初から意識している?  Eclipse非対応(com.sun.* パッケージに依存のため)  色々モダンでプラグイン実装もしやすい  Google社員以外からのPRは(実績として)受け付けてない  http://errorprone.info/ 16 Refs: http://dl.acm.org/citation.cfm?id=2486877
  • 17. © Works Applications Co.,Ltd.#ccc_f3 今使うならどのツール? 17 \ Target Standard Rules Note Checkstyle 7.7 AST 152 checks coding規約 PMD 5.6.1 AST 287 rules (PMD Java) 多言語対応 SpotBugs 3.1.0−RC2 Bytecode 453 patterns (+9 experimentals) plugin豊富 Checker Fw 2.1.11 AST (Compiler拡張) 19 checkers JSR308対応 error-prone v2.0.19 AST (Compiler拡張) 145 patterns (+61 experimentals) 将来に期待
  • 18. © Works Applications Co.,Ltd.#ccc_f3 今使うならどのツール?  とにかく数を出したい  SpotBugs + Checker Framework  Type Annotationを使えばSpotBugsに見つけられない問題も 炙り出せる可能性がある  解析に時間をかけたくない  error-proneでコンパイル時チェック  PMDをコンパイラと並列実行 18
  • 19. © Works Applications Co.,Ltd.#ccc_f3  Javaスキルの高い開発者が揃っている  アノテーションの利用を促進しChecker Frameworkを活用する  定期的なSpotBugsで細かい問題も炙り出す  開発者のJavaスキルにばらつきがある  Checkstyleで最低限の読みやすさを担保する  CPDでコピペに警告をする(節度のあるコピペを促す)  動作を軽くしたPMDやSpotBugsをこまめに回し最低限のミスを防ぐ 19 今使うならどのツール?
  • 20. © Works Applications Co.,Ltd.#ccc_f3 Agenda  自己紹介  2017年5月現在のJava静的解析ツール機能・動向比較  大規模ERPのコード品質が抱える問題とその解決  開発している組織とその製品  行っている工夫と今後の展望 20
  • 21. © Works Applications Co.,Ltd.#ccc_f3 2. 大規模ERPのコード品質が 抱える問題 21
  • 22. © Works Applications Co.,Ltd.#ccc_f3 株式会社 ワークスアプリケーションズとは ✤ ERPパッケージの開発を行っている企業 ✤ シンガポール、中国、インド、アメリカ等にも拠点 ✤ コンシューマアプリのようなユーザビリティと スピードを持つERP「HUE(AI WORKS)」を 開発・提供 22
  • 23. © Works Applications Co.,Ltd.#ccc_f3 HUEの実装 ✤ 脱RDBするなど速度にこだわっていて、 ✤ MSAしないと死ぬ程度には山ほどサービスがあり、 ✤ 徳島に研究所作るレベルで自然言語処理に本気で、 ✤ 100ms達成のためにAWS Lambdaを導入するなど 新しいことも色々やっている。 23
  • 24. © Works Applications Co.,Ltd.#ccc_f3 HUEの実装を支える人 ✤ 非常に多彩で長所も多い ✤ 東京・大阪・チェンナイ・上海・シンガポールなどに 開発拠点が分散している ✤ 受けた教育や常識からして大きく違う ✤ フロントエンド、フレームワーク、モバイル、機械学習、 バッチ、分散処理といった様々な専門家が共存 ✤ スキルのない新人が増え続けている状態 24
  • 25. © Works Applications Co.,Ltd.#ccc_f3 HUEの実装を支える人 ✤ 非常に多彩で長所も多い ✤ 東京・大阪・チェンナイ・上海・シンガポールなどに 開発拠点が分散している ✤ 受けた教育や常識からして大きく違う ✤ フロントエンド、フレームワーク、モバイル、機械学習、 バッチ、分散処理といった様々な専門家が共存 ✤ スキルのない新人が増え続けている状態 25 問: 高速に増えていく 開発者のキャッチアップを 少ないコミュニケーションで どのように助けるか?
  • 26. © Works Applications Co.,Ltd.#ccc_f3 なぜSpotBugsか ✤ 社内の人材と資産 ✤ 内部実装に明るい複数の開発者 ✤ プラグイン実装経験の蓄積 ✤ Eclipse連携 ✤ HUEはEclipseを標準IDEとしている ✤ Java8サポート ✤ FindBugs 3.0.1はLambdaの扱いに 問題がある 27
  • 27. © Works Applications Co.,Ltd.#ccc_f3 Agenda ‣ 自己紹介 ‣ 2017年5月現在のJava静的解析ツール機能・動向比較  大規模ERPのコード品質が抱える問題とその解決  開発している組織とその製品  行っている工夫と今後の展望 28
  • 28. © Works Applications Co.,Ltd.#ccc_f3 3. HUEが行っている工夫と 今後の展望 29
  • 29. © Works Applications Co.,Ltd.#ccc_f3 過去の失敗 ✤ デフォルト設定のままFindBugsやCheckstyleを ローカルビルドやプレマージビルドに導入し、 生産性を大きく下げた ✤ プレマージビルドが1時間近くかかってしまった ✤ mvn -Dfindbugs.skip や <findbugs.skip>true </findbugs.skip> が当たり前になってしまった 30
  • 30. © Works Applications Co.,Ltd.#ccc_f3 過去の失敗 ✤ デフォルト設定のままFindBugsをEclipseに導入し、 生産性を大きく下げた ✤ ワークスペースに10を超えるプロジェクトを常時 用意して開発する人が多かった ✤ Eclipse Pluginにパフォーマンス上の欠陥があった 31
  • 31. © Works Applications Co.,Ltd.#ccc_f3 そもそも、 ✤ MSAを目指しているのに組織横断な解析は必要か? ✤ 各サービス開発者が好きにやればいいのでは? ✤ 自治できる活動を開発効率を低下させてまで 横断的にやる? 33
  • 32. © Works Applications Co.,Ltd.#ccc_f3 MSAで組織横断な解析は必要か? ✤ 必要 ✤ 静的解析はnice to haveではなくmust to have ✤ それぞれ異なる人材・工数を持っているので 完全に自治に任せるといつ実施されるのか不明瞭 ✤ 開発効率を下げない方法を探す必要がある 34
  • 33. © Works Applications Co.,Ltd.#ccc_f3 優先度 網羅性 (メリット) 失敗を踏まえて ✤ 開発効率に妥協しない ✤ 極力開発者の日常業務を ブロックしない手法を探す ✤ 効率低下を納得させられる 価値を出す ✤ ちゃんと中身を理解して使う ✤ 結局はバッチプログラムなので 慣れた手法でプロファイル可能 開発効率 (納得) 35
  • 34. © Works Applications Co.,Ltd.#ccc_f3 調査:なぜFindBugsは遅いのか? ✤ 10数年前の常識にもとづいた実装 (SpotBugs 3.1.0-RC1で解消) ✤ Mapを使った String#intern() 相当の自前処理 ✤ Listインスタンスを使いまわすための計算処理 ✤ Eclipse GUIを頻繁に更新しすぎる (SpotBugs 3.1.0-RC2で解消) ✤ 解析対象が変わるたびにUIを更新 ✤ シングルスレッド(コアを使い切れない) 36
  • 35. © Works Applications Co.,Ltd.#ccc_f3 調査:環境変更で高速化できる? ✤ ほぼできない ✤ FindBugsはCPU boundだがシングルスレッドなバッチ ✤ 複数コアを食い切っているのはJITコンパイラのスレッド (-XX:CICompilerCountで増減可だが速度にほぼ寄与なし) ✤ OOMEやGC stormを起こさない程度のメモリを与えれば あとはCPUコア増やしてもメモリ増やしても変化なし 37
  • 36. © Works Applications Co.,Ltd.#ccc_f3 調査:Guava v19.0解析のマイクロベンチ (4 CPU cores) 38 128m 256m 512m 1g 2 (Default) OOME 18.2s 18.0s 18.2s 3 OOME 19.2s 18.2s 18.0s 4 OOME 24.8s 24.7s 23.6s -XX:CICompilerCount -Xmx & -Xms refs: https://github.com/spotbugs/spotbugs/pull/128
  • 37. © Works Applications Co.,Ltd.#ccc_f3 調査:Guava v19.0解析のマイクロベンチ (2 CPU cores) 39 2g Default 26.0s G1GC 28.7s G1GC + UseStringDeduplication 29.1s GC設定(Java8) -Xmx & -Xms refs: https://github.com/spotbugs/spotbugs/pull/128
  • 38. © Works Applications Co.,Ltd.#ccc_f3 調査:設定でfindbugs-maven-pluginを 高速化するには ✤ onlyAnalyzeで対象クラスを削り、 visitorsで利用Detectorを削ることで高速になる ✤ 発見したいバグに優先度をつけることが肝要 ✤ ExcludeFilterで対象ファイルを削っても速くならない ✤ Filterは処理の結果に対して影響するため 40
  • 39. © Works Applications Co.,Ltd.#ccc_f3 調査:effortの効果(TBU) 41 ACCUR ATE_EX CEPTIO NS MODEL _INSTA NCEOF TRACK_ GUARA NTEED_ VALUE _DEREF S_IN_N ULL_PO INTER_ ANALY SIS TRACK_ VALUE _NUMB ERS_IN_ NULL_P OINTER _ANAL YSIS INTERP ROCED URAL_ ANALY SIS INTERP ROCED URAL_ ANALY SIS_OF_ REFERE NCED_ CLASSE S CONSE RVE_SP ACE SKIP_ HUGE _MET HODS min ✓ ✓ less ✓ ✓ ✓ default, more ✓ ✓ ✓ ✓ ✓ ✓ max ✓ ✓ ✓ ✓ ✓ ✓ Refs: FindBugs.java
  • 40. © Works Applications Co.,Ltd.#ccc_f3 以上を踏まえて 42
  • 41. © Works Applications Co.,Ltd.#ccc_f3 方針 ✤ 速度重視の粗い解析と、網羅性重視の解析を 組み合わせる ✤ プレマージビルドでは変更されたクラスだけを解析 ✤ 拾い漏れる問題は日次の解析で発見・報告 43
  • 42. © Works Applications Co.,Ltd.#ccc_f3 重く網羅性の高い解析(概要) ✤ Jenkins + SonarQubeで開発が活発でない時間帯に実施 ✤ 重大でないレベルのルールも含めて実施 ✤ 開発者がいつでもアクセスできるSonarQubeを提供 ✤ Readmeやプロジェクト一覧ページにBadgeを表示し 一覧性とSonarQubeへの導線を確保 44
  • 43. © Works Applications Co.,Ltd.#ccc_f3 重く網羅性の高い解析(結果) ✤ 50のプロジェクトから3,000の問題を見つけ、 1ヶ月でうち900を解消した ✤ String.format() や logger.info() のフォーマット異常 ✤ マルチスレッドプログラミングアンチパターン 45
  • 44. © Works Applications Co.,Ltd.#ccc_f3 素早く粗い解析(概要) ✤ 重大な問題を中心に調査 ✤ 独自Mavenプラグインでfindbugs-maven-pluginを ラップ ✤ 変更された.javaファイル一覧から更新された可能性 のあるclassファイルの一覧をSpotBugsに渡す 46
  • 45. © Works Applications Co.,Ltd.#ccc_f3 素早く粗い解析(結果) ✤ SpotBugsにかかる時間を平均93%削減 ✤ 大きなリポジトリでも1分以内に解析を終えられる ✤ 拾いきれない問題は必ず出る ✤ 例:@NonNullをインタフェースに追加した場合 47
  • 46. © Works Applications Co.,Ltd.#ccc_f3 今後の展望 ✤ さらに多くのリポジトリへの導入 ✤ Type Annotationを段階的に導入する ✤ 技術にこだわりの強い、共通モジュール開発者に 協力を依頼する 48
  • 47. © Works Applications Co.,Ltd.#ccc_f3 4. 社内FW支援のための SpotBugsプラグイン実装方法 49
  • 48. © Works Applications Co.,Ltd.#ccc_f3 大まかな流れ ✤ 要件の明確化 ✤ プロジェクトの作成 ✤ JUnitで稼働確認しながら実装 ✤ Messageの作成 50
  • 49. © Works Applications Co.,Ltd.#ccc_f3 要件の明確化 51 ✤ 要件に応じて拡張すべき親クラスが変わる ✤ OperandStackの状態を追う→OpcodeStackDetector ✤ アノテーションを確認する→AnnotationDetector
  • 50. © Works Applications Co.,Ltd.#ccc_f3 プロジェクトの作成 52 $ mvn archetype:generate ¥ -DarchetypeGroupId=com.github.spotbugs ¥ -DarchetypeArtifactId=spotbugs-archetype ¥ -DarchetypeVersion=0.1.0 Refs: https://github.com/spotbugs/spotbugs-archetype
  • 51. © Works Applications Co.,Ltd.#ccc_f3 JUnitで動作確認しながら実装 53 ✤ 「バグとして見つけたい状態」を実装 ✤ 「バグとして見つかるべきでない状態」を実装 ✤ classファイルをテスト実行前に生成
  • 52. © Works Applications Co.,Ltd.#ccc_f3 54 Refs: https://github.com/spotbugs/spotbugs/tree/master/test-harness
  • 53. © Works Applications Co.,Ltd.#ccc_f3 Messageの作成 ✤ src/main/resources/messages.xmlの改変 ✤ 「何が問題か」だけでなく「どう修正できるか」も 指南することが望ましい 55 Refs: http://dl.acm.org/citation.cfm?id=2486877
  • 54. © Works Applications Co.,Ltd.#ccc_f3 Live demo 56
  • 55. © Works Applications Co.,Ltd.#ccc_f3 5. まとめ 57
  • 56. © Works Applications Co.,Ltd.#ccc_f3 大規模開発におけるコード品質改善 ✤ プロジェクトの数と規模が大きいMSAでは運用の 難度が上がる ✤ 各サービス開発者が静的解析ツールのメリットを 享受できる環境の構築が必要 58
  • 57. © Works Applications Co.,Ltd.#ccc_f3 大規模開発におけるコード品質改善 ✤ FindBugs/SpotBugsのクセを理解すれば 大規模開発でもサクサク利用できる ✤ パラメータの変更で実行ルールと対象コードを 絞り込む、差分解析とバッチ実行を分ける 59
  • 58. © Works Applications Co.,Ltd.#ccc_f3 大規模開発におけるコード品質改善 ✤ SpotBugsプラグインを開発すれば社内フレームワーク 固有の問題も静的解析ツールで発見できる ✤ 実装には必ずしもJVMやバイトコードの知識は必要 としない 60
  • 59. © Works Applications Co.,Ltd.#ccc_f3 6. 採用情報 61
  • 60. © Works Applications Co.,Ltd.#ccc_f3 世界を目指すエンジニアを 募集しています 62
  • 61. © Works Applications Co.,Ltd.#ccc_f3 具体的な話を聞きたい方へ ✤ 発表後に私に聞きに来てください! ✤ CI、MSA、マイグレーション、開発プロセス、 多拠点開発は専門なので色々お話できます. 63
  • 62. © Works Applications Co.,Ltd.#ccc_f3 Thank you! ご清聴ありがとうございました! 64
  • 63. © Works Applications Co.,Ltd.#ccc_f3 7. 参考資料 65
  • 64. © Works Applications Co.,Ltd.#ccc_f3 参考情報  ソースコードの品質向上のための効果的で効率的な コードレビュー  https://www.slideshare.net/MoriharuOhzu/ss- 9224836 66
  • 65. © Works Applications Co.,Ltd.#ccc_f3 参考情報  ラムダ式やストリーム API や新しい日時 API だけじゃない! Java8 のタイプ・アノテーションあの手この手  http://waman.hatenablog.com/entry/2014/05/08/063959 67
  • 66. © Works Applications Co.,Ltd.#ccc_f3 参考情報  Type Annotation for Static Program Analysis  https://www.slideshare.net/skrb/type-annotation- for-static-program-analysis 68
  • 67. © Works Applications Co.,Ltd.#ccc_f3 参考情報 ✤ G1: from garbage collector to waste management consultant ✤ https://blogs.oracle.com/java-platform- group/g1%3a-from-garbage-collector-to-waste- management-consultant 69
  • 68. © Works Applications Co.,Ltd.#ccc_f3 参考情報 ✤ G1 GC おさらいと #jjug_ccc で発表した話 ✤ http://cco.hatenablog.jp/entry/2015/12/01/011223 70
  • 69. © Works Applications Co.,Ltd.#ccc_f3 参考情報 ✤ The Google FindBugs fixit ✤ http://dl.acm.org/citation.cfm?id=1831738 71