2010-01-14 5 views
0

저는 Apache Ant (버전 1.1 ~ 1.6)의 순환 적 복잡성을 찾아야하는 프로젝트를 진행하고 있습니다. 이 목적으로 jar 파일을 사용하도록 요청 받았습니다. 결과를 살펴보기 위해 몇 가지 도구 (Xdepend 평가판과 Cyvis)를 사용했습니다. 그런 다음 Ant Ver1.6 소스 코드의 결과로 결과를 검증하려고했습니다. 소스를 분석하기 위해 Netbeans 플러그인을 사용했으며 일부 메소드의 CC를 수동으로 찾았습니다.jar 파일을 사용하는 순환 적 복잡성

대부분의 경우 jar 파일의 CC는 거의 동일하지만 일부에서는 많은 불일치가있었습니다. 나는 그런 방법 중 하나를 시험해 보았다. 내 질문은 다음과 같습니다.

  1. Java 컴파일러는 CC 값에 중대한 영향을 줄 수있는 최적화 (예 : 루프 되감기)를 수행합니까? 그러한 분석을 위해 jar 파일을 사용하는 것이 좋습니다.
  2. try 및 catch 블록과 관련하여 특정 문제가 있습니까? 그렇다면 다른 분석 방법을 고려할 수 있습니까?
  3. 이러한 분석을위한 더 나은 (더 정확한) 도구가 있습니까?

이 주제에 대한 경험을 공유하십시오. 미리 감사드립니다.

건배

+1

소스 파일을 사용하고 http://www.kclee.de/clemens/java/javancss/를 실행하는 것이 좋습니다. 그 (것)들에. 그것은 훨씬 더 간단합니다. –

답변

1

이 질문에 대한 전체 답변을하지 않습니다 ..

자바 컴파일러는 다른 좋은 컴파일러처럼 많은 최적화를 수행 할 것입니다. 이들 중 일부는 루프 불변 코드 모션, 공통 서브 표현식 제거, 강도 감소 및 변수 할당을 포함합니다.

그러나 Java hotspot 은 Java 바이트 코드 실행 엔진이며, 런타임시 동적으로 바이트 코드를 컴파일하여 컴파일합니다.

src 코드 CC를 바이트 코드 CC로 왜곡하는 많은 요인이 있지만 이는 CC 개선이 중요한 작업이 아니라는 것을 의미하지는 않습니다. src 코드의 CC 평가는 유지 보수 가능한 코드에 필수적입니다.

2

cyclomatic과 같은 복잡성 측정의 목적은 프로그래머가 코드베이스를 이해하는 능력에 영향을 미치기 때문에 프로그램의 구조를 측정하는 것입니다. 예 : 그것을 유지하기 위해. 프로그래머는 소스 레벨에서 코드를 볼 수 있기 때문에 소스 코드의 복잡성을 측정하는 것이 중요합니다.

바이트 코드 파일을 분석하여 얻는 측정 값이 일반적인 소스 코드 값과 다르면 그 값은 쓸모 없으므로 그 아이디어를 포기해야합니다.

(바이트 코드 파일에서 CC 측정 값이 다르다면 놀라지 않을 것입니다. 한편으로는 컴파일러가 코드를 재구성하여 루프를 풀는 것과 같은 방법으로 코드를 재구성 할 수 있습니다. 반면에 컴파일러는 단순히 바이트 코드가 표현할 수있는 한계로 인해 간단한 언어 구조를위한 복잡한 바이트 코드 시퀀스를 생성 할 수 있습니다.