Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- uiscrollview
- swiftUI
- Protocol
- RxCocoa
- UITextView
- Clean Code
- rxswift
- ios
- Xcode
- HIG
- swift documentation
- 클린 코드
- UICollectionView
- combine
- ribs
- Refactoring
- map
- Observable
- 리팩토링
- tableView
- uitableview
- SWIFT
- 리펙토링
- collectionview
- MVVM
- Human interface guide
- 스위프트
- 애니메이션
- 리펙터링
- clean architecture
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 테스트 커버리지, 코드 커버리지, 라인 커버리지, 조건 커버리지, 브랜치 커버리지 (Test Coverage, Code 본문
iOS 응용 (swift)
[iOS - swift] 테스트 커버리지, 코드 커버리지, 라인 커버리지, 조건 커버리지, 브랜치 커버리지 (Test Coverage, Code
jake-kim 2023. 5. 31. 23:05테스트 커버리지란?
* Coverage: 적용 범위
- 테스트 커버리지(Test Coverage): 테스트가 적용된 범위, 즉 전체 코드 중 얼마나 많은 부분이 테스트되었는지를 나타냄
코드 커버리지란?
- 코드 커버리지 (Code Coverage): 테스트 케이스가 얼마나 충족되었는지를 나타냄
- 코드 커버리지 측정 방법?
- 소스 코드를 기반으로 화이트 박스 테스트를 통해 구함
* 화이트 박스 테스트: 내부 구조와 동작을 테스트 (개발자 관점 테스트)
* 블랙 박스 테스트: 내부 구조와 동작을 모르는 상태에서 입력이 주어졌을때 올바른 결과를 테스트하는 것 (사용자 관점 테스트)
- 코드 커버리지를 수행하는이유?
- 코드가 얼마나 몇% 실행되었는지 파악하여, 테스트 코드를 짤 때 케이스를 나누거나 빠진 커버리지가 있는지 파악할때 사용
코드 커버리지 측정 방법
- 코드의 구조를 분석해야하므로, 구조 하나하나에 용어를 붙임
- 3가지 모두 모든 가능한 조건을 테스트하는 정도를 측정하는 지표를 의미
- 구문(Statement)
- 조건(Condition)
- 결정(Decision)
- 구문(Statement)
- 소스코드에서의 한줄한줄, 라인을 의미
- 라인의 개수를 카운트하여 전체 라인의 개수로 나누면 됨
- = 라인 커버리지
- 모든 가능한 조건을 테스트하는 정도를 측정하는 지표
ex) 아래 코드에서 input을 -100을 주게되면 코드 커버리지는 2 / 3이므로 66%
func printSome(input: Int) {
guard 0 < input else { // 1
return // 2
}
print("프린트") // 3
}
- 조건(Condition)
- = 조건 커버리지
- 조건식 안에 있는 조건들 각각을 모두 테스트하는 커버리지
ex) 아래 테스트 케이스 2개는 조건식 안에 있는 조건문 0 < number1, number2 < 0 결과값이 각 (true, false), (false, true)인 케이스 모두 다루기 때문에 조건 커버리지 100%
- 주의) 조건 커버리지는 조건식만을 대상으로하고, 조건문 안 block은 무관심
// 조건 커버리지 사용될 코드
func isPositive(number1: Int, number2: Int) -> Bool {
if 0 < number1, number2 < 0 {
return true
}
}
// 테스트 케이스
print(isPositive(number1: 5, number2: 5)) // 테스트 케이스 1
print(isPositive(number1: -1, number2: -1)) // 테스트 케이스 2
- 결정(Decision)
- = 브랜치 커버리지 (branch coverage)
- 모든 가능한 조건문 안의 block을 테스트하는지 측정하는 지표
ex) 아래 코드에서 조건문 안의 block인, 4가지 분기문을 모두 다루고 있으므로 브랜치 커버리지 100%
// 브랜치 커버리지 예시 코드
func getGrade(score: Int) -> String {
var grade = ""
if score >= 90 {
grade = "A"
} else if score >= 80 {
grade = "B"
} else if score >= 70 {
grade = "C"
} else {
grade = "F"
}
return grade
}
// 테스트 케이스
print(getGrade(score: 95)) // 테스트 케이스 1: A 학점
print(getGrade(score: 85)) // 테스트 케이스 2: B 학점
print(getGrade(score: 75)) // 테스트 케이스 3: C 학점
print(getGrade(score: 60)) // 테스트 케이스 4: F 학점
* 참고
https://ko.wikipedia.org/wiki/%EC%BD%94%EB%93%9C_%EC%BB%A4%EB%B2%84%EB%A6%AC%EC%A7%80
https://blog.naver.com/PostView.nhn?blogId=suresofttech&logNo=221833396343&parentCategoryNo=&categoryNo=155&viewDate=&isShowPopularPosts=false&from=postView
https://kkhipp.tistory.com/158
https://tecoble.techcourse.co.kr/post/2020-10-24-code-coverage/
'iOS 응용 (swift)' 카테고리의 다른 글
Comments