Code Coverage

2020. 3. 28. 16:15코드 품질 관리

Black Box Test

Black Box Test는 테스트시 객체 내부에 무엇이 들어 있는지 알 수 없거나 알지 않아도 된다는 것을 가정하여 테스트하는 방법입니다. 객체 내부가 어떻게 변하던 상관없이 입력을 주었을 때 원하는 결과값이 나오면 테스트는 통과하게 됩니다.

White Box Test

White Box Test는 객체 내부를 확인하고 검증하는 테스트입니다. 쓰이지 않은 변수는 없는지, 특정 범위만 받는 함수가 있는지 등등 이러한 부분들을 확인하는 과정입니다. Code Coverage는 White Box Test의 일부입니다.

Code Coverage

Code Coverage의 개념

Code Coverage란 소프트웨어 테스트를 논할 때 얼마나 테스트가 충분한가를 나타내는 지표 중 하나입니다. 소프트웨어 테스트를 진행했을 때 코드 자체가 얼마나 실행되었는지 숫자로 볼 수 있습니다. 즉, 소프트웨어를 구성하는 소스 코드 중 테스트를 통해 실행된 코드의 비율을 말하는 것입니다.

Code Coeverage 기준

함수 호출(Function Call Coverage)

코드 내에 정의된 Function이 호출되는 정도

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

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

구문(Statement Coverage)

코드 내에 작성된 실행 코드라인이 호출되는 정도

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%가 됩니다. */

조건(Condition Coverage)

코드 내에 기술된 조건문에서 사용되는 개별 조건이 참/거짓 모두 수행되는 정도

if ( a & b){
;
}

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

결정(Decision Coverage)

코드 내에 기술된 각 분기문의 결과가 참/거짓 조건이 모두 테스트되는 정도

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

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

MC/DC(Modified Condition / Decision Coverage)

Condition과 Decision Coverage를 보완해서 만든 Coverage입니다. 다른 상태들의 변동이 없고 자신의 상태가 변경되었을 때 결과 값에 영향을 미치는 경우 해당 상태는 MC/DC를 만족한다고 할 수 있습니다.

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

/* 아래의 테스트 케이스들을 모두 만족하면 MC/DC 커버리지가 100%가 됩니다. 
1. a = true    b = true        c = true
2. a = false    b = true        c = true
3. a = true    b = false        c = true
4. a = true    b = true        c = false
*/

Multiple Condition Coverage
각 조건에 대해서 모든 조건들의 가능한 조합을 Cover할 수 있는지 측정

Code Coverage의 장단점

장점

  • Code Coverage를 통해 누락된 부분을 확인하여 Test Case를 작성하는데 도움이 됩니다.
  • 프로그램에서 실행되지 않은 코드 부분을 확인할 수 있습니다.
  • 소프트웨어의 품질적인 측정시 정량적으로 결정하는데 도움을 줍니다.

단점

  • Code Coverage 측정은 사용된 code 범위에서만 측정을 합니다. 만약 사용하지 않는 소스 코드가 있다면 측정을 할 수 없습니다.
  • Code Coverage는 프로그램을 실행하여 측정하기 때문에 만약 구현이 완료되지 않은 소스코드나 개발 스펙에 기능이 빠져 있는 코드의 경우는 측정이 힘듭니다.
728x90

'코드 품질 관리' 카테고리의 다른 글

TDD  (0) 2020.04.01
System Test  (0) 2020.03.29
Integration Test  (0) 2020.03.29
Unit Test  (0) 2020.03.27
PMD / CheckStyle / Findbugs  (0) 2020.03.27