본문 바로가기

ComputerScience/Software Engineering

소프트웨어공학 - 21. Code coverages for white box testing

728x90

1. Code coverage

- test suite을 사용해서 테스트를 했을때 소스 코드의 어느정도까지 커버가 가능한가?

2. function coverage

- test suite을 실행했을때, 프로그램을 구성하는 모든 function들의 실행을 커버하는가?

3. statement coverage

- 코드의 각 line들이 다 한번씩 실행 되었는가?

- node coverage라고도 불린다.

- 위같은 소스코드에 대해 statement coverage를 수행해보자.

- 두개의 test case로 test suite이 구성되어 있을때, TC1은 s1,s2,s3까지밖에 커버를 못한다. 반대로 TC2는 모든 statement의 실행을 수행했다.

- 하지만 두 테스트 케이스로 구성된 test suite은 모든 line을 한번씩 실행했다.

- 또 다른 예시이다. 실행될 수 있는 모든 line에 대해서 coverage 점수를 매긴다.

- 두 테스트 케이스는 11개 라인중에 8개의 라인을 커버하는 test suite이다.

4. branch coverage

- edge coverage, decision coverage라고도 불린다.

- 코드의 분기문들이 최소한 T/F 한번씩 다 실행 되었는가?

- T,F로 분기되는 decision 경로들을 얼마나 커버하는지 계산한다. 각 test케이스는 절반만 cover하지만 종합적으로는 모든 분기를 커버한다.

- for, if문 하나당 하나의 branch로 생각한다

- branch를 다 커버했다는 뜻은 모든 statement를 다 커버했다는 뜻과 같다.

- 따라서 branch coverage는 statement coverage를 포함한다.

5. condition coverage

- predicate coverage

- 조건문 각각의 조건에 대해 실행 되었는가?

- 즉 조건문 하나를 구성하는 모든 조건 상태들에 대해서 테스트가 수행됐는지를 살펴본다.

- 독립적으로 나눠지는 조건에 대해 어디로 분기하였는지 체크한다. 

- TC1은 모든 조건에 대해 T들은 수행되었다. 즉 F의 경우는 커버하지 못한다.

- condition coverage는 branch coverage와 분명한 차이가 존재한다.

- 동일한 테스트 케이스에 대해서 각각 coverage를 계산했지만 결과는 다르다. 즉 서로 반드시 포함하는 관계는 아니다

6. Multiple condtion coverage

- 위의 예시들에서는 각 condition만을 독립적으로 고려했지만 condition에서 발생할 수 있는 모든 조합을 고려할수도 있다. (Multiple condition coverage)

- multiple condition coverage는 모든 조건 조합을 다 고려하기 때문에 100퍼센트 달성했다면 모든 condition coverage, decision coverage를 달성했다고 볼 수 있다.

7. condition/decision coverage

- condition, branch coverage의 합한 버전

- condition, branch가 둘이 서로 완전히 포함하는 관계가 아니기 때문에 둘다 고려하는 방법이다.

- 최종 결과를 구할때 분모끼리, 분자끼리 더하면 된다.

- condition/decision coverage를 100퍼센트 달성 했다 = branch, condition, statement 전부다 커버한다.

8. Modified condition/decision coverage

- multiple condition coverage만 100퍼센트 만족하면 모든 종류의 coverage를 달성할 수 있었다. (강력함)

- 그런데 딱하나 단점이 있다면 모든 조합을 커버해야하기 때문에 test case수가 매우 많아진다는 것이다. (2^n개)

- 따라서 절충안으로 MCDC가 고안되었다. (n+1개 ~ 2n개)

- 조건 A, B가 있다면 combination은 총 2^2 = 4가지가 생긴다.

- MCDC를 활용하면 테스트 케이스 수를 줄일 수 있다.

- 잘 보면 A가 T일때 A and B의 결과를 좌우하는건 B에게 달렸다.

- 마찬가지로 B가 T일때 A and B의 결과를 좌우하는건 A에게 달렸다.

- 즉 A가 바뀌었을때 결과를 주는 경우, B가 바뀌었을때 결과를 주는 경우에만 주목한다.

 

- A or B의 경우도 마찬가지다.

- A가 바뀌었을때 결과가 달라지는 케이스, B가 바뀌었을때 결과가 달라지는 케이스에 집중한다.

 

- 이렇게 하면 3개의 테스트 케이스만으로도 의미있는 coverage가 가능하다.

- 즉 하나의 condition이 decision에 영향을 미치는 pair들을 찾고 그것들을 검증하기 위한 test case를 만든다.

A and B and C

- 1,2번째 row를 살펴보자. outcome의 T/F를 좌우하는건 C에게 달려있다.

- 1,3번 row를 살펴보자. outcome의 T/F를 좌우하는건 B에게 달려있다.

- 1,5번 row를 살펴보자. outcome의 T/F를 좌우하는건 A에게 달려있다.

- 총 8개의 조합을 4개로 줄일 수 있다.

 

A or B or C

- 4,8번째 row를 살펴보자. outcome의 T/F를 좌우하는건 A에게 달려있다.

- 6,8번 row를 살펴보자. outcome의 T/F를 좌우하는건 B에게 달려있다.

- 7,8번 row를 살펴보자. outcome의 T/F를 좌우하는건 C에게 달려있다.

- 총 8개의 조합을 4개로 줄일 수 있다.

- pair는 여러 쌍이 선택될 수 있다. A는 2,6을 골라도 되지만 3,7을 골라도 된다. 혹은 4,8을 골라도 된다. 이 선택에 따라 모아진 test case 조합이 달라진다.

9. Tool 

- 많은 ide에서 자동으로 코드에서 coverage를 계산해준다.

- test suite에 대해서 얼마나 coverage를 달성하는지 계산해준다.

728x90
반응형