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

◼︎ 目次

  1. 概要
  2. 静的コード解析について
  3. PHPMD
  4. Cppcheck
  5. 参考

◼︎ 概要

静的コード解析である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)
 

◼︎ 参考


Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です