コード解析ツールまとめ(PHPMD,Cppcheck)

Published: 2016年2月9日 by tomsato

◼︎ 概要

静的コード解析である
PHPMDとCppcheckについて調べます

◼︎ 静的コード解析について

コンピュータソフトウェアの解析手法の一種であり
実行ファイルを実行することなくソース解析を行う
機械的にチェックを行うことによって文法スタイルの謝りやパターン化されたバグを検出したりする

◼︎ PHPMD

PHPMDはPHP Mess Ditectorの略で、コードを解析してバグになりそうな箇所を検出するツール
例えば未使用変数の警告、命名規則についての警告、サイクロマティック複雑度(複雑度)、コードをシンプルに書くための指摘など色々わかる

// 使い方
$ phpmd aaa.php text cleancode,codesize,controversial,design,naming,unusedcode
/home/tomsato/aaa.php:3 The property $_publicUnused is not named in camelCase.
/home/tomsato/aaa.php:3 The property $_protectedUnused is not named in camelCase.
/home/tomsato/aaa.php:3 The property $_privateUnused is not named in camelCase.
/home/tomsato/aaa.php:7 Avoid unused private fields such as '$_privateUnused'.
/home/tomsato/aaa.php:11    Avoid unused local variables such as '$localUnused'.
/home/tomsato/aaa.php:16    Avoid unused parameters such as '$unused'.
/home/tomsato/aaa.php:20    Avoid unused private methods such as 'privateUnusedFunction'.

// 出力されたhtmlをブラウザで確認できる
$ phpmd aaa.php html cleancode,codesize,controversial,design,naming,unusedcode
 

◼︎ Cppcheck

C/C++用の静的解析ツール
cppcheckは構文エラーを検出しないしかし通常コンパイルが検出しないタイプのバグの種を検出する
例えばメモリリーク、アロケーション(確保と解放)のミスマッチ、バッファオーバーラン、さらに多くのチェックを行なってくれる

$ cppcheck --enable=all ./testdir/
Checking testdir/test.cc...
[testdir/test.cc:110]: (portability) scanf without field width limits can crash with huge input data on some versions of libc.
[testdir/test.cc:153]: (portability) scanf without field width limits can crash with huge input data on some versions of libc.
1/2 files checked 77% done
Checking testdir/aiuoe.cc...
2/2 files checked 100% done
Checking usage of global functions..
[testdir/aiuoe.cc:319]: (style) The function 'test1' is never used.
[testdir/aiuoe.cc:332]: (style) The function 'test2' is never used.
(information) Cppcheck cannot find all the include files (use --check-config for details)
 

◼︎ 参考

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧