티스토리 뷰
TDD 공부하다가 정리한 내용을 써보려고합니다.
코드 커버리지(Code Coverage)란
테스트가 소프웨어를 충분히 검증할 수 있는지 나타내는 지표입니다.
즉, 테스트 케이스가 소스코드를 얼마나 커버하고 있는지를 나타냅니다.
백분율로 나타내며, 100%라고 해서 완벽한 소프트웨어라고 검증되는 것은 아닙니다.
보통 80%를 목표로 한다고 합니다.
실제 소스 코드를 알고 테스트하는 화이트박스 테스트를 통해 측정됩니다.
장점
코드 커버리지를 측정하면 다음과 같은 장점이 있습니다.
- 리팩토링 시에 기존 테스트가 얼마나 새로운 코드를 커버하는지 알 수 있어, 테스트 코드 관리가 편해집니다.
- 불필요한 코드가 사라집니다. 높은 커버리지를 위해서는 필요없는 코드를 정리해야하기 때문입니다.
측정 기준
함수(Function) 커버리지
전체 함수 중 몇개의 함수가 호출되었는지 측정합니다.
함수 커버리지 = (실행된 함수의 수 / 전체 함수의 수) * 100
구문(Statement, Line) 커버리지
전체 구문 중 몇줄의 구문이 실행되었는지 측정합니다.
구문 커버리지=(실행된 구문의 수/전체 구문의 수)∗100
결정(Decision, Branches) 커버리지
조건문의 분기가 모두 실행되었는지를 기준으로 합니다. 전체 조건문이 True, False 각각 한번씩 실행되면 충족된다.
여러 조건문을 논리 연산자로 연결했을 때 각각의 조건의 결과가 아니라 최종적으로 도출되는 결과를 기준으로 합니다.
ex) 조건문이 x > 0 && y < 0 일 때 전체 조건문이 True, False인 경우만 확인한다.
조건(Condition) 커버리지
결정 커버리지와 다르게 개별 조건식을 기준으로 합니다. 개별 조건문이 각 한번씩 True, False가 되도록 합니다.
전체 조건문이 x > 0 && y < 0 라고 하면 x > 0 이 True, False 일때, y < 0 이 True, False일 때를 각각 확인합니다.
조건/결정 커버리지
전체 조건문과 개별 조건문의 True, False를 모두 확인하는 것을 말합니다.
커버리지 툴
코드 커버리지 툴을 이용하면 코드 커버리지를 측정할 수 있습니다.
각 언어나 프레임워크별로 코드 커버리지 툴이 있으니 찾아 사용하면 됩니다.
Swift에서는 Xcode에서 기본적으로 제공하는 Code Coverage 기능 활성화를 통해 측정할 수 있습니다.
혹은 Codecov라는 솔루션을 사용할 수도 있습니다.
Codecov는 Xcode기반으로 로컬 측정도 가능하고, 깃허브 Action을 통해 커밋이나 PR할때 서포트를 받을 수도 있습니다.
감사합니다.
Ref.
https://lazyowl.tistory.com/entry/Xcode-Code-Coverage-정복하기 (Xcode-Code-Coverage-정복하기)
https://www.atlassian.com/continuous-delivery/software-testing/code-coverage (What is code coverage?)
https://err0rcode7.github.io/backend/2021/05/11/테스트커버리지.html (테스트 커버리지(Test Coverage))
'기타' 카테고리의 다른 글
클라이언트 MVC에 대해서 + MV* 아키텍처 (0) | 2023.04.24 |
---|---|
[CS] 동기/비동기, 블로킹/논블로킹, 동시성/순차성, 싱글 스레드/멀티 스레드 총 정리 (0) | 2023.04.09 |
자주 쓰이는 주요 HTTP Status code 정리 (0) | 2022.12.06 |
클라이언트의 리액티브 프로그래밍(Reactive programming) - 데이터 바인딩과 Rx (0) | 2022.12.03 |
[SOMA] 소프트웨어마에스트로 13기 수료 후기 (2) | 2022.12.01 |
- Total
- Today
- Yesterday
- 아키텍쳐 패턴
- 소프트웨어마에스트로
- MVVM
- 프로그래머스
- DocC
- MVC
- TestCode
- swift
- SwiftUI
- design pattern
- Flutter
- combine
- reactive programming
- programmers
- 비동기/동기
- GetX
- notion
- RX
- Architecture Pattern
- Bloking/Non-bloking
- MVI
- 리액티브 프로그래밍
- 노션
- healthkit
- SWM
- coordinator pattern
- Swift Concurrency
- 코디네이터 패턴
- ios
- Flux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |