2012-02-19 17 views
1

こんにちは私は、Javaソースコードの静的解析を使い始めることにしました。まず、ソースツリーを直接解析するのが最も簡単ですが、そこにはAPIがあると仮定します。特に、このようなコード許可API持っていいだろう。もちろんJava静的解析:はじめに

for (MetaClass m : mySourcePackage.getClasses()) 
{ 
     System.out.println(m.getMethods().size()); 
     ... 
} 

を、任意のクラスのために、あなたは、リフレクションを使用してこれを行うことができます - しかし、私は静的全体を分析することで、より興味ソースコードパッケージをゼロから作成し、クラスを1つずつ繰り返します(たとえば、テストカバレッジ、最大行などの評価など)。

このようなメタアナリシスを行うための高品質のオープンソースフレームワークはありますか(または、特定のクラスパスでJVMを起動し、そのような分析をJVM内で行うことは可能でしょうか)。

私は特にDIやリフレクションのような悪夢を心配していません(少なくともこの時点ではそうではありません)。

+0

* Javaソースを解析する* ANTLRには既成の[文法]があります(http://openjdk.java.net/projects/compiler-grammar /antlrworks/Java.g)そのために。また、バイトコードを分析することを検討してください。驚くほど簡単に見つけることができます。 –

+0

JAva - > Java ..タイトルを修正してください;) – h3xStream

答えて

3

Findbugsは、静的解析のフレームワークと考えることができます。特定の目的を持った新しい検出器を実装することができます。

More tools/libraries

0

コードのテストカバレッジの静的解析に興味がある場合は、Eclipse IDEのCobertura - eCoberturaプラグインを使用できます。

+1

Coberaturaは*静的解析をしていますか?私はそれがテストカバレッジデータのランタイムデータ収集を行ったと思った。 –

1

Javalib/Sawjaは、Java用の静的アナライザーをCamlに書き込むためのライブラリーです。

それがプリミティブを含む静的解析のために必要なビルディングブロックの多くを提供します:個々の命令、メソッド、クラス、および全体を操作

  • 中間表現を作成および操作
  • Javaバイトコード解析し

    • プログラム
    • ハンドルクラス階層と制御フローアルゴリズム

    ドキュメンテーションはかなり良いです。私が正しくリコールすれば、あなたにはいくつかの例があります。

    あなたが記述する種類のソースコードのメトリックを実装するのはすばやく簡単です。例えば、下記のクラスのメソッドの数をカウントすることを目的と短い、テストされていない断片である:それは、Googleによって使用さ

    open Sawja_pack 
    open Javalib_pack 
    
    let size methodmap = 
        JBasics.MethodMap.fold (fun _ _ count -> count+1) methodmap 0 
    
    let main classname classpath = 
        let interface_or_class = Javalib.get_class classpath (JBasics.make_cn classname) in 
        let all_concrete_methods= Javalib.get_concrete_methods interface_or_class in 
        print_int (size all_concrete_methods); 
        exit 0 
    
  • 2

    エラープローンを見て別の優れたツールであり、非常に低い比率を有していますコードは非常によく構造化されて

    https://github.com/google/error-prone

    、偽陽性

    例えばあなたはhere配列等価チェックがどのように実装されているかを見ることができます

    関連する問題