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를 달성하는지 계산해준다.
'ComputerScience > Software Engineering' 카테고리의 다른 글
소프트웨어공학 - 22. Exception Handling (0) | 2022.06.03 |
---|---|
소프트웨어공학 - 20. Verification and Validation (V&V) (0) | 2022.06.01 |
소프트웨어공학 - 19. Test-Driven Development (0) | 2022.05.29 |
소프트웨어공학 - 18. SOLID (0) | 2022.05.19 |
소프트웨어공학 - 17. GRASP (0) | 2022.05.12 |