blog


あくなき追求、深追いこそ永遠の目標

PHPのソースコードを解析するツールをつかってみた 

PHP

PHPで品質の高いプログラムを作製するのが、私の夢として持ちつづけています。
プログラマの個人能力に影響されず品質を高めるにはどうすべきか? システマチックに自動で品質をチェックして、問題点(既存bug)を指摘してくれるツールがないかと、探しはじめました。 PSAT(the PHP static analysis tool)というツールを発見しましたが、ネットで利用している人は殆ど発見できず、とりあえず実験してみることにしました。下記がセットアップ&検証までの情報です。
  1. rpmのダウンロード
    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
  2. 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
  3. 解析方法
    psat -i ***.php

    オプション一覧
    -l解析するターゲットとなるPHPファイルの指定
    -o解析結果を標準出力ではなく、ファイルに吐き出す場合の吐き出し先
    -rバージョンの指定(PHP4:4、PHP5:5)
  4. 解析結果内容
    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と比べて、チェックが甘いといったところでしょうか 
    

  5. 解析結果内容
    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で
    行ってみましたが同じくツールのエラーで終わってしまいました
    
  6. 結論-psatに関して、まだ実務レベルでは利用するのは難しそうです、今後に期待しましょう
 
投稿日:2007/04/03 | カテゴリ:PHP | コメント:(0)