MC/DC( modified condition/decision coverage ) : 조건 커버리지(Condition Coverage)와 분기 커버리지(Decision Coverage) 를 보완해서 만든 커버리지입니다. MC/DC란 각 개별 조건식이 다른 개별 조건식에 영향을 받지 않고 전체 조건식의 결과에 독립적으로 영향을 주도록 함으로써 조건/결정 커버리지를 향상시킨 것으로 결정 커버리지, 조건/결정 커버리지 보다 강력합니다.다른 상태(condition)들의 변동이 없고 자신의 상태가 변경 되었을 때 결과 값에 영향을 미치는 경우 해당 상태는 MC/DC를 만족한다 할 수 있습니다.
- ( MC/DC를 만족한 분기문 수 / 전체 분기문 수) * 100 (%)
if ( a && b && c) { ; }else{ ; } /* 아래 MC/DC 결정 테이블에서 MC/DC를 만족하는 1,2,3,5 케이스를 모두 만족하면 MC/DC 커버리지가 100%가 됩니다. */
테스트 케이스 | a | b | c | 결과 |
1 | True | True | True | True |
2 | True | True | False | False |
3 | True | False | True | False |
4 | True | False | False | False |
5 | False | True | True | False |
6 | False | True | False | False |
7 | False | False | True | False |
8 | False | False | False | False |
a 조건을 기준으로 MC/DC를 만족하는 경우는 (1, 5) 테스트 케이스
b 조건을 기준으로 MC/DC를 만족하는 경우는 (1, 3) 테스트 케이스
c 조건을 기준으로 MC/DC를 만족하는 경우는 (1, 2) 테스트 케이스
구문 커버리지(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 % 가 됩니다. */
- 조건 커버리지(Condition Coverage) :분기문 안의 각 조건 수 기준으로 수행된(Covered) 조건 수 비율입니다.
- (수행된 조건 수 / 전체 조건 수) * 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% 가 됩니다. */
아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.