PHPで品質の高いプログラムを作製するのが、私の夢として持ちつづけている。プログラマの個人能力に影響されず品質を高めるにはどうすべきか? システマチックに自動で品質をチェックして、問題点(既存bug)を指摘してくれるツールがないかと、探してみた。 PSAT(the PHP static analysis tool)というツールを発見したが、ネットで利用している人は殆ど発見できず、とりあえず実験してみた。下記がセットアップ&検証までの情報である
導入方法
rpmのダウンロード
Linux(Cent OS4.4)にインストール
rpm -ivh aterm-2.4.2-1.i586.rpm rpm -ivh sdf2-bundle-2.3.4pre15345-1.i586.rpm rpm -ivh strategoxt-0.17M2pre15559-1.i586.rpm rpm -ivh psat-0.1pre154-1.i386.rpm
解析方法
psat -i ***.php
オプション一覧 -l 解析するターゲットとなるPHPファイルの指定 -o 解析結果を標準出力ではなく、ファイル出力先 -r バージョンの指定(PHP4:4、PHP5:5)
解析結果内容
解析結果内容(クラスの場合)
psat-0.1pre154-1.i386.rpm
依存関係のある下記パッケージもダウンロードしておく
aterm-2.4.2-1.i586.rpm sdf2-bundle-2.3.4pre15345-1.i586.rpm strategoxt-0.17M2pre15559-1.i586.rpm
target.phpというサンプルを使用
psat -i target.php
1. if ($a) {
2. //何らかの処理を行う
3. }
4.
5. if (isset($a)) {
6. //何らかの処理を行う
7. }
/**
* PSAT check (Correctness)
* If(variable) to check
* the initialization of a variable
*/
if ($a){ }
if (isset($a)){ }
処理結果から分かるように、 問題の箇所があった場合(脆弱)にその箇所の直前にコメント分で 問題内容が挿入されるようだ。 ライン1のifは変数の正負判断しかしてないために、 ライン5のifと比べて、チェックが甘いといったところだろうか
targetClass.phpというサンプルを使用
psat -r 4 -i targetClass.php
1. class targetClass
2. {
3. public function test()
4. {
5. //何らかの処理を行う
6. }
7. }
[ psat | error ]
targetClass.php: character 'p'
unexpected at line 5, column 5
[ psat | error ] {
[ psat | error ]
public function test()
[ psat | error ]
今回あえて、PHP4では実装されていない、メソッドの アクセス属性"public"をつけ実行してみたが、 今回の処理結果はツールのエラーで終わってしまった。 ためしに、rオプションをPHP5を指し示す-r 5で 行ってみたが同じくツールのエラーで終わってしまった
結論
psatに関して、まだ実務レベルでは利用するのは難しそうだ、今後に期待しよう
Trackback URL
http://blog.fukaoi.org/2009/03/03/php-psat?tb=y&entry_id=1
XML