2015/10/24

[nrf51]意外ッ! それはAdLint対応

来月から、家でお仕事になる。
すごく怯えている・・・。
仕事内容はともかく、どうやって品質を保てばよいか、というところなのだ。

[c]静的解析ツールAdLintを試す
以前、といっても今月なのだが、AdLintを試そうとしていた。
そしてそのまま忘れていたのだが、そろそろちゃんとせんといかんということで、仕事とは全然関係の無いnRF51822で遊んでいるソースで試した。

前回はWindows環境でやったけれども、nRF51はどっちかというとgcc系で使っている(Keilはバイナリ制限があるので)。
なので、やはりcygwinくらいでやろうとしたが、当時と同じくうまく動かず。
あれこれ考えたが、純粋に「adlint」コマンドの実行パスがWindows側にインストールしたadlintを読んでいることがわかった。
パスの問題であれば、.bashrcにcygwin側のrubyでインストールしたadlintのパスを先に追加した。
パスは、「gem which adlint」で確認し、ここではlib/adlint.rbが出てきたので、bin/adlintをPATHに追加だ。
それで、cygwinでも動かすことができた。
(あっさり書いているが、すごく時間がかかってしまった・・・)

通った後は、AdLintに対応していくだけなのだが、これはこれで時間がかかった。
やはり静的解析なので、ヘッダファイルはすべて読み込めるようにしておかないといけない。
やり方は書いてあったのだが、こちらの「ユーザ独自の環境設定をする場合はどうすればいいの?」が役立った。
まあ、こういうのはツールを購入しても発生するから、慣れておくしかないだろう。
どうしようもないところは、YAMLのファイルを編集して逃げるみたいだ。

https://github.com/hirokuma/nrf51822_adctest
ここの、nrf51822/s110/armgcc/adlintに、AdLintの設定ファイルを置いている。
adlint_traits.ymlファイルは、gccへの絶対パスをL.145辺りに書いているので、修正が必要だ。

 

と、書いてはいるが、単にこれはAdLintに対応しただけで、AdLintの指摘に対応したわけではない。
実際にAdLintを通すとわかるが、たくさーん出てくる。
main.cだけd、600行以上も指摘があるのだ。
どういう指摘かは、ふふ、実際にやってみた人だけのお楽しみだ。


いちおう言っておくと、もったいぶってるわけでもなんでも無く、この辺りを気にする人は私が書かなくても気にするだろうし、気にしない人は私が書いても気にしないだろうから、わざわざ載せないだけだ。
これを気にし出すと、プロジェクトの人間関係が悪くなりやすいから、プロジェクト管理の人が「ごめん、やって!」とお願いするようなやり方がいいんじゃないかと思っている。
品質には問題が無いのに、ツールの指摘を消すだけのために変更してもらわんといかんからだ。

static関数のNULLチェックなんか、私はassert()で止めてしまいたいタイプなんだけど(どうせNULLだったとしてもバグ以外ないし)、再起動させればひとまず対応できるというのも間違った考え方ではない。
では、それを誰が決めるかというと、プロジェクトリーダー(PL)になるだろう。
PLは会社の方針とかで決めるかもしれないが、プロジェクトのことはプロジェクトで決めるのが筋だと思う。
曖昧な指示に対しては、曖昧な結果しか返ってこない。

 

などと、ごにょごにょ考えてしまうが、今回はこのくらいにしておこう。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。