program tip

PHP로 계산 된 CRAP 인덱스를 읽고 개선하는 방법

radiobox 2020. 11. 7. 09:11
반응형

PHP로 계산 된 CRAP 인덱스를 읽고 개선하는 방법


방금 PHPUnit과 다채로운 코드 커버리지 보고서 작업을 시작했습니다. 나는 모든 숫자와 비율이 CRAP 지수를 제외하고는 것을 이해합니다. 누구든지 그것이 의미하는 바, 분석 방법 및 낮추는 방법에 대한 확실한 설명을 제공 할 수 있습니까?


@Toader Mihai는 확실한 설명을 제공했습니다. (나에게서 +1)

낮추는 방법 :

덜 복잡한 코드를 작성하거나 더 잘 테스트 된 코드를 작성하십시오. (아래 그래프 참조)

더 나은 테스트 코드?

이 맥락에서 이것은 단지 다음을 의미합니다 : 더 높은 코드 커버리지와 일반적으로 더 많은 테스트를 작성하게됩니다.

덜 복잡한 코드?

예 : 메서드를 더 작은 메서드로 리팩터링합니다.

// Complex
function doSomething() {
    if($a) {
        if($b) {
        }
        if($c) {
        }
    } else {
        if($b) {
        }
        if($c) {
        }
    }
}

// 3 less complex functions
function doSomething() {
    if($a) {
        doA();
    } else {
        doNotA();
    }
}

function doA() {
    if($b) {
    }
    if($c) {
    }
}

function doNotA() {
    if($b) {
    }
    if($c) {
    }
}

(사소한 예일 뿐이며 더 많은 리소스를 찾을 수있을 것입니다.)

추가 리소스 :

먼저 몇 가지 추가 리소스를 제공하겠습니다.

크랩 인덱스에 대한 크리에이터 블로그 게시물

경우에 따라 : 순환 적 복잡성이 설명되었습니다 . PHP_CodeSniffer 및 PHPMD와 같은 도구는 알고 싶은 경우 해당 번호를 알려줍니다.

그리고 어떤 숫자가 "정상"인지 결정하는 것이지만, 자주 제안되는 숫자 (즉, 높은 imho)는 쓰레기 지수가 30 인 결과 다음과 같은 그래프가됩니다.

대체 텍스트(여기에서 .ods 파일을받을 수 있습니다 : https://www.dropbox.com/s/3bihb9thlp2fyg8/crap.ods?dl=1 )


기본적으로 방법 변경 위험의 예측자가되기를 원합니다.

여기에는 두 가지 요소가 있습니다.

  • 방법의 코드 복잡성 ( cyclomatic complexity) 일명 해당 방법에 얼마나 많은 결정 경로가 존재하는지 : comp(m).
  • how testable is that method (via automated tests, provided by a code coverage tool). Basically this measures how many decisions in said code are automatically testable.

If the method has 100% coverage than the risk of change is considered to be equivalent only with the complexity of the method: C.R.A.P.(m) = comp(m).

If the method has 0% coverage than the risk of change is considered to be a second degree polinomial in the complexity measure (reasoning being that if you can't test a code path changing it increases risk of breakage): C.R.A.P.(m) = comp(m)^2 + comp(m)

Hopefully this will help you.

I just noticed that I only provide the half answer (the read part). The how to improve it should be pretty clear if you understand the reasoning of the index. But a much more clear explanation is given in @edorian's answer.

짧은 이야기는 100 %에 가까운 범위가 될 때까지 테스트를 작성하고 그 후에 순환 복잡성을 줄이기 위해 메서드를 리팩토링하는 것입니다. 테스트를하기 전에 리팩토링을 시도 할 수 있지만 실제 메서드 복잡성에 따라 수행중인 변경의 모든 결과를 추론 할 수없는 경우 (관련된 복잡성으로 인해) 파손될 위험이 있습니다.

참고 URL : https://stackoverflow.com/questions/4731774/how-to-read-improve-crap-index-calculated-by-php

반응형