일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 큐
- 정렬 알고리즘
- ftz level13
- 자료구조
- Java
- HTML
- War Game
- LoB
- 시간복잡도
- 암호수학
- pwnable.kr
- ftz
- 파일 시스템
- level13
- Stack
- PHP
- System
- 두근두근 자료구조
- web
- 미로 탐색 알고리즘
- 재귀
- C
- windosws wbcs
- c언어
- SWiFT
- windosw 문자열
- 백준
- 스택
- 파이썬
- OSI
Archives
- Today
- Total
나의 기록, 현진록
iOS에서 TDD(Test-Driven-Development, 테스트 주도 개발) 본문
반응형
🙋♂️ TDD(테스트 주도 개발)이란?
- 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다.
- 1. 개발자는 먼저 요구사항을 검증하는 자동화된 테스트 케이스를 작성한다.
- 2. 테스트 케이스를 통과하기 위한 최소한의 코드를 생성한다.
- 3. 작성한 코드를 표준에 맞도록 리팩토링한다.
테스트가 주가 되어 개발을 이끌어간다.
테스트를 작성하면서 메서드를 완성시킨다.
- Red : 실패하는 테스트를 작성하는 구간
- Green : 실패한 테스트를 통과하기 위해 최소한의 변경을 하여 테스트에 성공하는 구간
- Refactor : 테스트의 성공을 유지하면서 코드를 더 나은 방향으로 개선해나가는 구간
🙋♂️ TDD(테스트 주도 개발)의 장점
- 테스트를 통과하는 코드를 작성하기 위해 재사용성과 의존성에 대해 고민하여 보다 의존성이 낮은 코드를 작성할 수 있다.
- 테스트를 통과하는 코드를 작성해나가면 안전한 코드를 작성할 수 있다.
- 유지 보수가 용이하다.
🙋♂️ TDD(테스트 주도 개발)의 단점
- 개발 속도
🙋♂️ TDD 실습
struct StrangeCalculator {
func addNumbers(of numbers: [Int]) -> Int {
return numbers.reduce(0, +)
}
// for TDD
func addOddNumbers(of numbers: [Int]) -> Int {
return 0
}
func addEvenNumbers(of numbers: [Int]) -> Int {
return 0
}
}
위 코드로 실습을 해보자.
🙋♂️ addOddNumbers
- 배열 중에서 모든 홀수의 합을 반환하도록 동작하는 메서드이다.
- TDD에서는 메서드의 기능보다 테스트를 먼저 작성해야한다.
func test_빈배열을전달했을때_0이나오는지(){
// given
let numbers : [Int] = []
// when
let result = sut.addOddNumbers(of: numbers)
// then
XCTAssertEqual(result, 0)
}
실제 메서드에서는 동작없이 0을 리턴하고 있으니 테스트가 통과한다.
🟥 Red
func test_3을전달했을때_3이나오는지(){
// given
let numbers = [3]
// when
let result = sut.addOddNumbers(of: numbers)
// then
XCTAssertEqual(result, 3)
}
Red 상태이다. 이제 테스트를 Green으로 만들어주기 위해 코드를 수정해보자.
🟩 Green
func addOddNumbers(of numbers: [Int]) -> Int {
if numbers.isEmpty { return 0 }
return numbers.filter{$0 % 2 != 0}.reduce(0, +)
}
테스트에 정상적으로 통과한다.
추가적으로 테스트 코드를 작성해보자
테스트를 완료했으면 메서드를 리팩토링해야 하는데 처음부터 저렇게 코딩해서 리팩토링은 생략......
반응형
'iOS' 카테고리의 다른 글
[iOS] SceneDelegate에 대해서 (0) | 2023.04.04 |
---|---|
[iOS] AppDelegate에 대해서 (0) | 2023.03.29 |
iOS에서의 유닛 테스트(Unit Test)에 대해 알아보자 (0) | 2023.03.15 |
[Swift/iOS] UITextView 세로 가운데 정렬 vertical center (0) | 2022.07.26 |
[Swift/iOS] AVPlayer에 Observer 추가하여 재생시간 탐지하기, UISlider을 이용하여 AVPlayer 영상 시점 이동하기, Control View 숨기기/보이기 (0) | 2022.07.19 |