2012-02-19 3 views
1

안녕하세요 저는 자바 소스 코드의 정적 분석을 시작하고 싶었습니다. 시작으로, 내 소스 트리를 직접 파싱하는 것이 가장 간단한 것처럼 보이지만, 여기에는 API가 있다고 가정합니다. 특히이 이와 같은 코드를 허용하는 API가 좋을 것이다 :Java 정적 분석 : 시작하기

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

, 특정 클래스에 대해, 당신은 반사를 사용하여이 작업을 수행 할 수 있습니다 -하지만 난 정적으로 전체를 분석에 더 관심이 있어요 소스 코드 패키지를 처음부터 수정하고 클래스를 하나씩 반복합니다 (예 : 테스트 커버리지, 최대 라인 등을 평가하는 등).

그런 메타 분석을위한 고품질의 오픈 소스 프레임 워크가 있습니까? (또는 특정 클래스 경로로 JVM을 시작하고 JVM 내부에서 그러한 분석을 수행 할 수 있습니까?)

나는 특히 DI와 반사 (적어도 지금 시점이 아님)와 같은 싫어 함을 걱정하지 않는다는 것을 명심하십시오.

+0

* Java 소스를 파싱 * ANTLR에 기성품 [문법] (http://openjdk.java.net/projects/compiler-grammar)이 있습니다. /antlrworks/Java.g). 또한 바이트 코드 분석을 고려하십시오. 놀랍게도 쉽게 찾을 수 있습니다. –

+0

JAva -> Java .. 제목을 수정하십시오;) – h3xStream

답변

0

코드 테스트를위한 정적 분석에 관심이 있으시면 Cobertura - eCobertura 플러그인을 Eclipse IDE에 사용할 수 있습니다.

+1

Coberatura 않습니다 * 정적 * 분석? 필자는 테스트 커버리지 데이터의 런타임 데이터 수집을 수행했다고 생각했습니다. –

1

Javalib/Sawja은 Java 용 정적 분석기를 Caml에 기록하기위한 라이브러리입니다.

그것은에 대한 기본 요소를 포함하여, 정적 분석에 필요한 빌딩 블록의 많은 제공 :

  • 개별 지침, 방법, 클래스를 조작

    • 구문 분석 자바 바이트 코드
    • 만들고 조작 중간 표현하고, 전체 프로그램
    • 핸들 클래스 계층 및 제어 흐름 알고리즘

    문서화가 꽤 좋은데, 올바르게 기억한다면 배포판을 시작하기위한 몇 가지 예제가 포함되어 있습니다.

    여러분이 설명하는 종류의 소스 코드 메트릭을 구현하는 것이 빠르고 쉽습니다.예를 들어, 아래에 주어진 클래스의 메소드의 수를 계산 목표로 짧은, 검증되지 않은 조각이다, 그것은 구글에 의해 사용되는

    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 배열 등호 검사가 구현되는 방법을 볼 수 있습니다