2009-06-24 3 views
4

Java 용 정적 분석 도구 중 가장 쉬운 확장 메커니즘이 있습니다. 나는 체크했다 PMD 그러나 주문 규칙을 작성하는 과정은 매우 복잡해 보인다. 구체적으로 말해서, 흥미로운 코드 영역을 선택하는 구문과 같은 AspectJ을 제공하는 도구가 있는지 알고 싶습니다. 나는 AspectJ의 declare warning을 알고 있지만 그것이 할 수있는 일이 제한적으로 보인다.어떤 Java 용 정적 분석 도구가 가장 쉽게 확장 할 수 있습니까?

관련 질문이 있습니다 :

Java 용 정적 분석 도구 권장 사항? Static Analysis tool recommendation for Java?

답변에는 여러 가지 도구가 나와 있습니다. 그러나 나는 사용자 정의 규칙 작성을위한 가장 쉬운 옵션을 제공하는 것이 무엇인지 찾고 싶습니다.

편집 : 지금까지 Guillaume이 제안한 PMD의 XPath 표현식은 내가 찾고있는 것으로 가장 근접한 것처럼 보입니다. 나는 그것을 곧 탐구 할 것이다.

답변

4

"확장"와 진짜 문제는 정적 분석 도구입니다 "정적 분석 "파싱, 트리 작성, 제어 흐름 그래프 추출, 데이터 흐름 추출, 포인트 - 투 - 분석, 프로 시저 간 분석, 범위 분석과 같은 많은 기계가 필요하다는 광범위한 주제입니다. , 프로그램 분석에 관한 수많은 컴파일러 관련 자료를 참조하십시오.

일부 구문 코드의 패턴 일치를 사용하여 일부 프로그램 코드에 도구의주의를 집중시킬 수 있지만 을 도구에 설명하여 해당 지점에서 "정적으로 분석"할 수 있도록 설명합니다. 분석 [points-to]과 같은 분석을 수행하려면 먼저 을 분석하고 원하는 부분을 선택해야합니다.

모럴 : 임의의 분석을 쉽게 수행 할 수 있도록 도구를 확장 할 것을 기대하지 마십시오. 기본적으로 어떤 종류의 분석을 신경 써야합니까? (오염 된 입력? 첨자 범위 검사? API 남용?) 이 이미 그런 종류의 것을 지원하는 도구를 찾으십시오. 적어도 당신의 "확장 기능"은 도구가 이미하는 것과 비슷하기 때문에 이 단순 할 수 있습니다.

우리의 DMS 소프트웨어 리엔지니어링 툴킷은 많은 응용 프로그램과 언어를 통해 모든 종류의 분석 기계를 구축하는 비용을 상각하려는 시도입니다. C, C++, Java 및 COBOL의 구문 분석, 제어/데이터 흐름 분석 및 포인트 - 투 - 분석 을 다양한 수준으로 제공합니다.그리고 그것은 "point"를 돕기 위해 surface-syntax 패턴 매칭을 가지고 있습니다. http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html

+1

감사합니다. DMS 툴킷은 꽤 재미있을 것 같습니다. –

1

Findbugs 사용자 지정 감지기를 쓰는 것은 quite simple입니다.

그냥 here과 같이 FindBugs 설치의 플러그인 디렉토리에 놓습니다.

+0

감사합니다. 내가 처음 거기를 보았을 때, 바이트 코드 스캐닝의 사용은 너무 낮은 수준으로 보였다. AspectJ 구문에 필적 할만한 것이 없다면 다시 살펴볼 것이다. –

+1

나는 여기에 탐지기를 추가하여 나의 경험을 적었 다. http://dschneller.blogspot.com/2007/04/findbugs-writing-custom-detectors-part.html –

5

실제로 PMD에 대한 사용자 지정 규칙을 작성하는 것은 꽤 쉽습니다. PMD는 코드의 흥미로운 부분을 찾을 수있는 xPath와 유사한 구문을 제공하므로 XML에 대해 최소한의 경험이 있으면 즉시 시작할 수 있습니다. PMD 또는 Findbugs에 1-2 시간을 투자하고 구체적인 질문이있는 경우 여기로 돌아 오는 것이 좋습니다.

우리는 당신이 작성하려고하는 규칙의 정확히 어떤 종류의 우리를 말한다면 당신에게 좋은 대답을 줄 수있을 ...

+0

좋아, 나는 PMD 규칙을 작성하는 AST Visitor 스타일을 보았다. . 선언적 특성 때문에 XPath 스타일이 더 좋아 보인다. 확실히 보일 것입니다. 감사합니다. –