静的解析系の備忘メモ
はじめに
現在アジャイルの皮をかぶったWF*1の仕事をやってまして、どうもレビューをそれ程重視していないから
- レビューを自動化しようぜ
- 静的解析で自動レビューを
な風潮が有るみたい。普通の開発現場とかではありえない感じなんだけど
日本企業らしいといえばらしいので、その時に調べたことをメモっておく
AIで自動コードレビューっていうのは
— close_yutori (@kimukou2628) 2018年4月9日
大企業系上流設計(企画)だと
[コード障るのは卑業](コーダ=工場作業員
な感覚が未だあって
* jenkins経由のCheckStyleやFindBugsやPMDでチェキしとけばよか。
* あとはコメントと関数名変数名クラス名だけ指摘しとけば十分
な意識だから(今のとこもそう
ここでandroid lintとかKotlin lintが出てこないのは
— close_yutori (@kimukou2628) 2018年4月10日
今の大手さんの新人研修でレポート書かされるらしい
* Redmineタスクマネージメント管理
とかの本で紹介されない(日本語解説書がない)からみたい
なかなか厳しいですわ
(ここは特に<儲からん?androidごときで>テストコード不要とか言ってるし
まあSI系の仕事は下記になりがちなんで微妙なんだけどね。日本でありがちの事なかれ主義なお仕事が多い
動作環境
- Windows 10
- 8G
- AS 3.0.1 /AS 3.1.1
- gradle plugin 3.0.1 / 3.1.1
- gradle runtime 3.5.1
ツール一覧
CheckStyle
やたらと更新が速いPlugin(サイズも数十Mでデカい)
半閉鎖環境のネットが遅い環境だとIDEが固まるのでzipで落としてきてzip installが推奨
android studio
— close_yutori (@kimukou2628) 2017年11月16日
静的解析系のプラグインがエラーになる件
どうもproxy経由で入れるとバイナリが壊れて動かないっぽい。
一応proxy設定はしてるんだけどな(日本固有?
zip落としてlocalインストールなら問題ない
(AS3.0で
Checkstyle Idea,
FindBugs Idea,
PMD Plugin
まで確認
※jenkins pluginもあって、お客さんのbuild職人にエラーレポートで指摘されるからピリピリ
除外設定
- checkstyle.xmlに除外設定を書く
- その checkstyle.xml を指定後、//CHECKSTYLE:OFF コメントで対象箇所を囲む
https://qiita.com/ponsuke0531/items/effcdbf890f850030ba3
でもこの手の除外xml設定をgit管理するの嫌がるのはなんでなんだろ。
.ideaフォルダとかは平気でgit管理してたりするのになー*2
FindBugs
スコープカスタマイズで自分が担当したpackageだけ指定できるので便利では有る。
ただproject open時の除外設定毎回聞いてくるのは、いつも微妙に思ってる
FindBugsの設定ってASのPreferencesのOther Settings下にあるやん?てことはASグローバルな設定やと思うんだけど、何度設定してもAS起動するとFindBugsの設定がされてないんじゃぁって言われる現象に名前をつけておくれ😓
— さきちゃんの中の人、カピバラになりたい🐁 (@serenegiant) 2018年5月11日
あー。やっぱりそれあるんですね。自分も凄くウザイと思ってました(^^;;
— close_yutori (@kimukou2628) 2018年5月11日
AS3.xになってからなのでどっちか…たぶんASが設定を破壊してるんじゃないじゃなぁと。プロジェクト毎の設定と言うならそれはそれでいいんだけど同じプロジェクトに何度も設定しないといけないのがウザイのでし😖
— さきちゃんの中の人、カピバラになりたい🐁 (@serenegiant) 2018年5月11日
メソッドの返り値にNonNullをくっつけるとFいつの頃からかFindBugsが大量に「nullでないことがわかっている値xxxの冗長なnullチェックがあります」って出すんだけど💫
— さきちゃんの中の人、カピバラになりたい🐁 (@serenegiant) 2018年5月29日
えぇーそれは本末転倒な気が😵少なくともエディタのインスペクションではちゃんとチェックしてくれるのになぁ🤔自分もそんなに新しいスタイルでは書かないけど😅
— さきちゃんの中の人、カピバラになりたい🐁 (@serenegiant) 2018年5月29日
他にもNonNull付けてる引数をnullかもしれんのんじゃぁってケチつけてくるしぃ💩Java8のプロジェクトだけな気もするなぁ🤔
— さきちゃんの中の人、カピバラになりたい🐁 (@serenegiant) 2018年5月29日
※jenkins pluginもあって、お客さんのbuild職人にエラーレポートで指摘されるからピリピリ
除外設定
- build.gradle
dependencies { compileOnly 'com.google.code.findbugs:annotations:3.0.1' compileOnly 'com.google.code.findbugs:jsr305:3.0.1' }
- dependenciesにjarを追加して
- SuppressFBWarnings annotation で除外記述をする。
除外方法としてはErrorPhoneと同じく一番スマートかも
誤検知対応に関する考察
自分もこれ悩んでた話。
お客さんのJenkins職人オジサンがエラーログレポートを送ってくると仕事場大騒ぎになるんだよねー
もしかしてAS3ってFindBugsのプラグインと相性悪い?💔起動時に毎回インデックスが壊れてエディタが真っ赤になるようになったんやけど😖
— さきちゃんの中の人、カピバラになりたい🐁 (@serenegiant) 2018年3月13日
FindBugsが誤検知した時はどうするんがいいんかな?まぁルール決めるのは自分やから最終的には放置なんやけど😶
— さきちゃんの中の人、カピバラになりたい🐁 (@serenegiant) 2018年3月19日
static final boolean DEBUG = false;
— さきちゃんの中の人、カピバラになりたい🐁 (@serenegiant) 2018年3月20日
...
if (DEBUG) Log.v(...)
みたいにしているとFindBugsがチョッカイかけてくるのってうざい💩
PMD
android:lintとPMDは、指摘が英語なので
— close_yutori (@kimukou2628) 2017年11月17日
指摘事項0でなくてもOKは言われてるが
(出来ない箇所をExcelに貼って提出するから、日本語でないと駄目らしい。
だからその手のソフトは元から書けてないことにするよう
まあだからCheckStyleとFindBugs指定な訳だけと(日本語で指摘事項が表示されるので
な話が出てくるので正直かける意味あるのかわかんない。後述のandroid lintと同じポジション的な感じの位置づけ
除外設定
- 行末に "//NOPMD" とコメントを入れる
これ調べなおしてみるまで知らなかったので勉強になった
android Lint
AS標準でついているんだけど
開発者の嗜み的にセルフチェックは当然だろ?JK
みたいな扱いされてる。
チェックで引っかかる場所は、前述3個と重複することが多いなー
あと build.gradleのLint除外もココの仕事だとかけないので、ウザくなってしまう感じもある*3
- build.graleの改変に 稟議書スタンプラリーが必要らしいので
- AS3.0ベースにするのに compile指定が残ってる
- 技術に自信がないから的確な形に修正提案すらできないんだろうな・・・
開発内容以外のことを気にしすぎてて色々とおかしい
除外設定
ErrorPhone
Googleが推奨している奴。
以前まとめていて、これが一番まともな指摘をしてくれている気がする
警告除外設定もURLで表示してくれて便利
ただ
状況があってすごく残念
除外設定
- SuppresWarningsで記載する。エラーURLが表示されているので簡単
2018/5/25備忘
最新版のgradle-plugin 3.2-alpha15 あたりだとアノテーション除外が効かなくなってる
IDEA標準機能
IDEサポートの恩恵があまり受けられず補完あまりでなかったり静的解析ちゃんとできなかったりすると「ははは、今は21世紀ですよ?w」みたいな感情になります
— 俺九番 (@orekyuu) 2018年5月27日
Java & IntelliJでAnalyze > Inspect Code走らせるとこんなのできて流石だなーになってる pic.twitter.com/IzSkFGsO1Y
— 俺九番 (@orekyuu) 2018年5月27日
これ実は結構頭いいんだけど*4 知らない人多いから評価されないんだよなー
ココらへんは布教本次第なのかねー
静的解析系のツールをかけて品質って本当に上がるの??
本日の進捗が草
— close_yutori (@kimukou2628) 2017年11月16日
*静的解析かける(checkStyle,FindBugs等
*動作仕様的に変更駄目な箇所が引っかかる
*ignoreする方法検証する
*対処方法をドキュメント書いて、環境変更していいですか?お伺いメール
*上が見てくれない(イマココ
後は、お客さんがgit管理してるideaファイル無視な対処ポチポチと
昨日checkstyleやFindBugsとかのignoreの申請の件、
— close_yutori (@kimukou2628) 2017年11月17日
上長の許可、お客さんの許可もらうのに1週間はかかるらしい。
で、上記の検出項目0にして再コミットをハヨ!
言われる訳ですが矛盾してないかな~(苦笑
android:lintも遣ってるけど、こっちのignoreアノテーションが効かないので今調査中
な状況はあって、結局人の運用次第なんだよなー。
昨今はAIで自動コード作成、自動QAができるはずと言ってるけど
今日の朝礼)
— close_yutori (@kimukou2628) 2018年5月23日
* AIでプログラム自動生成の第二段で
* AIでQAテストを自動化(海外企業の話
な話をしてて、この二本柱で上流工程に専念できればウハウハ
な話を聞いてた。
でもこの二本柱?もオレオレで内製で作るって話になるんだろうな~(遠い目
運用方針が固まってないから無理っしょ(苦笑*5
に尽きるからなーと。
よくIBMの業務パッケージ等をお役所に納品する案件で、日本だけよく裁判で賠償金ウンチャラで揉めてるよなー
海外だとありえないらしいんだけど*7
ともあれ、昔からfindbugsみたいな静的解析ツールとかは有力視されてるわけで、それの仕組みがAIになったとしても基本的な思想としては変わらないかな
— なぎせ ゆうき (@nagise) 2017年11月29日
現場の作業はマシにはなるよ。それはそれとして設計の問題はあるがね :-P
Fは関連子会社の場所によりけりですね。一枚岩ではないですよ。酷いところは酷い。僕が関わったプロジェクトでは静的解析やってましたしね
— なぎせ ゆうき (@nagise) 2017年11月29日
あー。
— なぎせ ゆうき (@nagise) 2017年11月29日
最近だとどうなんですかね。アノテーションで回避とか出来そうなもんですが
チェックの加減を調整するのがまた難しいからなあ……
— なぎせ ゆうき (@nagise) 2017年11月29日
静的解析は神なのか?
ロジック適正か辺りのレビューはレビューアがその言語の玄人じゃないと無理だとは思うんだけどね
うーん。GW前なのに3末予定物対応中で
— close_yutori (@kimukou2628) 2018年4月11日
毎週こまめにリリース良いんだけど
* CheckStyleやFindBugs設定ファイルがGitマージ
*compileエラー
*実行時ヌルポエラー
*一つのクラスに複数クラス書いてる奴
とか平気でbaseにマージされてて辛
リリース前日午後からレビュー始めてるのも可笑しいが、、
SI系の仕事って久しなんだけど
— close_yutori (@kimukou2628) 2018年3月20日
>お客様にリリースするgit brunch名を決める会議(2h)
なの見ちゃうと開発バリバリな処との意識格差激しいな~と
(未レビューコードに対してgit rebaseすると、CheckStyleやFindBug警告バリバリ&下手するとcompileエラー有なんだけど、これ雰囲気でレビューしてる?