2010-05-27 7 views
1

직장에서 우리는 몇 가지 측정 도구 (주로 순환 복잡성 및 LCOM)를 수집하기 위해 여러 도구를 사용하고 있습니다. 우리는 경고 플래그를 얻고 선제 리팩토링 노력을 안내하기 위해 이들을 사용합니다. 코드 품질을 높이는 데 매우 도움이되었습니다.순환 복잡도 및 LCOM 제한 적용을위한 주석

그러나 프로세스는 빌드 프로세스와 관련이 없습니다. 그것은 별도로 실시됩니다. 게다가, 나는 소스 코드에 내재 되어질 수있는 것을 찾고있다. (외부 프로세스가 실행되는 것과는 대조적이다.)

누군가가 주석 집합과 구성 가능한 주석 처리기를 인식 할 수 있는가? 컴파일러에서 실행해야하며 코드가 임계 순환/LCOM 메트릭을 준수하지 않으면 빌드가 실패하게됩니다.

maven/ant에서 ckjm, checkstyle 및 pmd를 실행할 수 있지만 소스 코드에서 일부 작업을하고 다른 바이트 코드에서 작업 할 수 있다고 생각합니다. 컴파일이 시작되기 전에 소스 코드에서 작동하는 하나의 통합 도구를 갖는 것이 좋을 것입니다.

다른 것은이 드라이브 수 주석의 집합이 있다면 그것은 좋은 것이다 (필연적으로 코너의 경우에 필요합니다 사용자 정의 할 수 있도록이.)

@LCOM3(Threshold=1.5) 
public class SomeDumbPojo {... buch of gets/sets...} 

// by default would be measured against a strict LCOM3 
public class ActualBizClass 
{ 
    @CYCLOMATIC_COMPLEXITY(Threshold=15) 
    public void someFatIrreducibleMethod(){...} 
} 

그런 때 이 도구를 실행하면 기본적으로 엄격하게 (구성 가능한) 메트릭 임계 값이 적용됩니다 (예외가 있으면 문서화되고 합법적 인) 완화 된 임계 값으로 주석 처리 된 아티팩트는 예외입니다. 감소시킬 수 없거나 줄일 수없는 일부 방법의 경우, 완화 된 순환 복잡성이 의미가 있습니다. 일반적인 POJO의 경우, LCOM은 완화되어야하고 ... 등등.

내가보기에, 내가 찾은 것, 나는 아무것도 찾을 수 없었습니다 (희망적으로 오픈 소스). 그러나 누군가가 그런 종류의 것을 알고있는 경우에 대비하여 여기에 물어볼 수도 있습니다.

감사합니다.

답변

3

컴파일이 시작되기 전에 소스 코드에서 작동하는 하나의 통합 도구가 있으면 좋을 것입니다.

나는 코드 정적 분석이 작동하기 위해서는 뭔가로 컴파일되어야로이게 무슨 뜻인지 확실히 모르겠어요. 이러한 모든 도구는 코드를 바이트 코드 또는 일종의 구문 트리로 컴파일 할 수 있어야합니다.

간단하게 유지하는 것이 좋습니다. Cyclomatic Complexity 또는 다른 메트릭에 대한 경고가 주어진 임계 값을 넘으면 PMD가 빌드를 실패하도록 구성하십시오. 허용 가능한 복잡성으로 메소드에 주석을 달지 않고 (예 : 허용 된 값을 어떻게 유도 할 것인가? 실수로 복잡성을 12에서 15로 늘린 사람이 주석을 부 풀리는 것을 막으려면) 주석을 달아 경고를 완전히 표시하지 않도록합니다.

@SuppressWarnings("PMD.CyclomaticComplexity") 
public void someFatIrreducibleMethod() { ... } 

그런 다음 주기적으로 제거하고 리팩터링하려는 경고가 표시되지 않는 메소드를 코드베이스에서 검색 할 수 있습니다.

또는 PMD는 특정 구문의 코드에 주석을 남겨 두어 누가 감사를 감사했는지 추적 할 수 있도록 지원합니다.

+0

"컴파일"이란 말은 javac이 바이트 코드를 뱉어내는 단계를 의미합니다. 우리는 Java 소스 코드를 스캔하고 그로부터 메트릭을 추출하는 독점 도구를 사용합니다 (컴파일은 필요하지 않음). 그러나이 도구는 빌드 프로세스의 일부로 사용할 수 없습니다. 어노테이션을 사용하여 주어진 임계 값을 추가하는 아이디어는 프로세스의 결과물입니다. 클래스가 순환 적 복잡성 (예 : 10)을 넘는 메소드를 가지고있는 경우, 제안, 검토 및 승인 된 문서화 된 케이스를 제외하고 빌드가 중단됩니다 (따라서 빌드 진행을 위해 주석을 달았습니다). –

1

도구는 가장 기본적인 메트릭 (LCOM이 아니지만 확실히 Cyclomatic 복잡성)을 계산하고 명령 줄에서 실행됩니다.

위의 계층 구조 (클래스, 패키지, 서브 시스템)에 대한 메소드 및 롤업 요약에 대한 자세한 메트릭과 함께 XML 출력 파일을 생성합니다. XLST (또는 awk 또는 perl 또는 ...) 사용 전체 요약 또는 개별 메소드에 대해 원하는 메트릭을 추출하고 임계 값을 확인하는 것이 매우 쉽습니다.

+0

흥미 롭습니다! 고마워요! –