MC/DC 커버리지란 무엇인가요?

수정일 Thu, 20 Apr 2023 시간: 01:03 PM

 

  • MC/DC( modified condition/decision coverage ) : 조건 커버리지(Condition Coverage)분기 커버리지(Decision Coverage) 를 보완해서 만든 커버리지입니다. MC/DC란 각 개별 조건식이 다른 개별 조건식에 영향을 받지 않고 전체 조건식의 결과에 독립적으로 영향을 주도록 함으로써 조건/결정 커버리지를 향상시킨 것으로 결정 커버리지, 조건/결정 커버리지 보다 강력합니다.다른 상태(condition)들의 변동이 없고 자신의 상태가 변경 되었을 때 결과 값에 영향을 미치는 경우 해당 상태는 MC/DC를 만족한다 할 수 있습니다.

    • 일반적으로 개별조건식 수 + 1개의 테스트 케이스가 필요합니다.

    

if ( a && b && c) {
;
}else{
;
}


/* 아래 MC/DC 결정 테이블에서 MC/DC를 만족하는 1,2,3,5 케이스를 
모두 만족하면 MC/DC 커버리지가 100%가 됩니다. */

     

테스트 케이스abc결과
1TrueTrueTrueTrue
2TrueTrueFalseFalse
3TrueFalseTrueFalse
4TrueFalseFalseFalse
5FalseTrueTrueFalse
6FalseTrueFalseFalse
7FalseFalseTrueFalse
8FalseFalseFalseFalse

 

 

a 조건을 기준으로 MC/DC를 만족하는 경우는 (1, 5) 테스트 케이스

b 조건을 기준으로 MC/DC를 만족하는 경우는 (1, 3) 테스트 케이스

c 조건을 기준으로 MC/DC를 만족하는 경우는 (1, 2) 테스트 케이스

 ※ 참고 해당 결과는 Short-circuit evaluation 를 고려하지 않음 ( 2018년 12월 10일 추가됨)
   
  • 구문 커버리지(statement coverage) : 소스 코드 라인 수 기준으로 수행된(Covered) 라인 수 비율입니다.

    • (수행된 라인 수 / 전체 라인 수) * 100 (%)

 

     

int func(int arg){
int a = 0;
int b = 0;
a = a+1;
b = b+1;
return a+b;
}

/* 위 5개의 구문에서 5개 구문 모두 수행이 되면 5 / 5 * 100(%) 로 
구문 커버리지가 100%가 됩니다. */

     

 

 
  • 분기 커버리지(Decision Coverage) : 각 분기문의 결과가 True 또는 False가 되는 조건이 모두 테스트되는 정도를 측정하는 커버리지로 전체 분기 수 기준으로 수행된(Covered) 분기 수 비율입니다.( 2019년 2월 14일 추가됨) 

    • (수행된 분기 수 / 전체 분기 수) * 100 (%)
    • 대상 분기문 : if, switch, for, while, do-while 그 외 3항 연산자 수식과 boolean 연산자 수식은 옵션입니다.

 

    

if( a > 0 ){
;
}
if( b >0) {
;
}

/* 위 2개의 분기문(if) 에서 1번 if 의 True, False 와 
2번 분기의 True, False 가 모두 수행되면 
4 / 4 * 100(%) = 100 % 가 됩니다. */

    

 

 

 

     

if ( a & b){
;
}

/* 위 a 와 b 2개의 조건에서 a 가 True, False 와 b가 True, False 를
모두 만족하면 4 / 4 * 100(%) = 100% 가 됩니다. */

     

 

 
  • 함수 호출 커버리지(Function Call Coverage) :전체 함수 호출 수 기준으로 수행된(Covered) 함수 호출 수 비율입니다.

    • (수행된 함수 호출 수 / 전체 함수 호출 수) * 100 (%)

 

  

int func(void){
funcCall1();
funcCall2();
funcCall3();
funcCall4();
funcCall5();
}

/* 위 5 개의 함수 호출 부분이 모두 호출되면 5 / 5 * 100(%) = 100% 가 됩니다. */

  

 

 
  • 함수 커버리지(Function Coverage) : 프로젝트 내 모든 함수를 기준으로 수행된(Covered) 함수 비율입니다. 일반적으로 함수 커버리지는 시스템 레벨의 테스트에서 측정해야 의미가 있습니다.

    • (수행된 함수 수 / 전체 함수 수) * 100 (%)

 

    

void func1(void){
;
}
void func2(void){
;
}

/* 위 2개의 함수가 모두 수행되면 2 / 2 * 100(%) = 100% 가 됩니다. */

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.