2013-08-28 3 views
1

나는지점 범위는

if (x == y) { 
    foobar++; 
} else { 
    if (x == z) { 
    foobar++; 
    } 
} 

... 그래서 같은 경우 문이있는 경우 100 % 분기 커버리지를 얻기 위해 통과하는 4 가지가있을 것이라는 점을 알고있다. 2는 바깥 쪽에서 if - else, 안쪽 if 문에서 1, 안쪽 if 문으로 들어 가지 않으면 다른 하나.

그러나 ...이 같은 뭔가를

if (x == y) { 
    foobar++; 
} else { 
    while (x < z) { 
    x++; 
    } 
} 

100 % 분기 커버리지에 필요한 4 가지 아직도 있습니까? 즉, 별도의 분기로 else 문 계산에서 while 루프로 들어가지 않습니까?

감사합니다.

답변

5

우선 : if-loops가 없습니다. if 문이라고합니다.

질문 사항 : 첫 번째 예는 3 개의 분기 만 있습니다. 첫 번째 if은 두 개의 분기를 만듭니다. else 내부에 두 개의 분기가 추가로 생성되지만이 분기는 사용자의 하위 분기 else이므로 최대 4 개까지 추가되지 않습니다.

if 
/\ 
1 else 
    | 
    if 
    /\ 
    2 3 

while 루프의 분기 적용 범위는 약간 복잡합니다. 이론적으로 루프는 얼마나 자주 또는 실행할 수 있는지 모르기 때문에 가능한 많은 수의 분기를 만듭니다. 루프 적용 범위를 측정하는 몇 가지 실용적인 방법이 있습니다. 가장 간단한 것은 두 개의 가지를 갖는 것입니다. 루프 블록이 실행되는 위치, 루프 블록이 실행되지 않는 위치. 이 경우에도 예제에는 3 개의 분기가 있습니다. 또한 실행을하지 않고 한 번 실행하고 두 번 이상 실행하는 루프에 대해 세 가지 분기를 고려할 수도 있습니다. 이러한 범위 측정을 사용하는 경우 두 번째 예제에서는 4 개의 분기가 있습니다.

+1

@Clay 번호 지점 커버리지는 기술적으로 잘 정의 된 용어입니다 (http://en.wikipedia.org/wiki/Code_coverage 참조). 분기 커버리지와 경로 커버리지를 혼동스럽게합니다 (다르지만 아주 잘 정의 된 기술 용어). 사람들이 100+ 유형의 "적용 범위"를 정의했음을 알게되어서는 안 될지 모르지만, 다른 것들에 비해 어떤 이점을 제공 할 수는 있습니다. 라인 적용 범위는 관리자조차도 정의를 이해할 수 있기 때문에 개념적으로 유용합니다. 지점 범위는 실제 도구에서 매우 일반적입니다. 경로 적용 범위는 내가 아는 많은 도구 (없음)에 존재하지 않습니다. –