TDD(Test-Driven Development)
ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(Test-driven development TDD)์ด๋, ๋ฐ๋ณต ํ ์คํธ๋ฅผ ์ด์ฉํ ์ํํธ์จ์ด ๋ฐฉ๋ฒ๋ก ์ผ๋ก,
๋งค์ฐ ์งง์ ๊ฐ๋ฐ ์ฌ์ดํด์ ๋ฐ๋ณตํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค ์ค ํ๋์ ๋๋ค.
TDD ๊ฐ๋ฐ์ฃผ๊ธฐ
- Red: ์คํจํ๋ ํ ์คํธ ์ฝ๋ ์์ฑ
- Green: ์คํจํ ํ ์คํธ๋ฅผ ํต๊ณผํ๊ธฐ ์ํ ์ต์ํ์ ์ฝ๋ ๋ณ๊ฒฝ (ํ ์คํธ์ ์ฑ๊ณต)
- Refactor: ํ ์คํธ์ ์ฑ๊ณต์ ์ ์งํ๋ฉด์ ์ฝ๋๋ฅผ ๋ ๋์ ๋ฐฉํฅ์ผ๋ก ๊ฐ์
์ผ๋ฐ ๊ฐ๋ฐ ๋ฐฉ์ vs. TDD ๊ฐ๋ฐ ๋ฐฉ์
์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ ๋ฐฉ์์ ์๊ตฌ์ฌํญ ๋ถ์ → ์ค๊ณ → ๊ฐ๋ฐ → ํ ์คํธ → ๋ฐฐํฌ์ ํํ์ ๊ฐ๋ฐ ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ต๋๋ค.
ํด๋น ๋ฐฉ์์์๋ ์ค๊ณ์ ๋ฐ๋ผ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์๋ฃํ ํ ๋ฐฐํฌํ๊ธฐ ์ , ํด๋น ์ฝ๋์ ์์ ์ฑ์ด๋ ๋ฒ๊ทธ๊ฐ ์๋์ง๋ฅผ ๊ฒ์ฌํ๊ธฐ ์ํด ํ ์คํธํ๋ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค.
๋ง์ฝ ๊ฐ๋ฐ ์๋ฃ ํ ์๋น์์ ์๊ตฌ์ฌํญ์ด ๋ณ๊ฒฝ๋์ด ์ค๊ณ๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด?
์์ ๋ถ๋ถ์ ๊ธฐ๋ฅ ์์ ์๋ ๋ชจ๋ ๋ถ๋ถ์ ๋ค์ ํ ์คํธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ฒด์ ์ธ ๋ฒ๊ทธ๋ฅผ ๊ฒ์ถํ๊ธฐ ์ด๋ ค์์ง ์ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์ฒด ๋ฒ๊ทธ ๊ฒ์ถ ๋ฅ๋ ฅ์ด ์ ํ๋๊ณ ์์ค์ฝ๋์ ํ์ง ๋ํ ์ ํ๋ ์ ์์ต๋๋ค. ์์ ์ด ๋ฐ๋ณต๋๋ค ๋ณด๋ฉด ์ฌ์ฌ์ฉ๊ณผ ๊ด๋ฆฌ๊ฐ ์ด๋ ค์ด ์ฝ๋๋ค์ด ๋ง์์ง๊ณ ๊ฒฐ๊ตญ ํ๋ก์ ํธ์ ์ ์ง๋ณด์๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
TDD ๊ฐ๋ฐ ๋ฐฉ์์ ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ ๋ฐฉ์๊ณผ ๋ฐ๋๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ์ค์ ์ฝ๋๋ฅผ ์์ฑ์์ผ ๋๊ฐ๋๋ค.
ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋์ค ์์ธ ์ฌํญ(๋ฒ๊ทธ ๋ฐ ์์ ์ฌํญ)์ด ๋ฐ์ํ๋๋ผ๋ ํ ์คํธ ์ผ์ด์ค์ ์ถ๊ฐํ๊ณ ์ค๊ณ๋ฅผ ๊ฐ์ ํฉ๋๋ค. ํ ์คํธ๊ฐ ํต๊ณผ๋ ์ฝ๋๋ง์ ์ค์ ์ฝ๋๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ ์์ฐ์ค๋ฝ๊ฒ ์ฝ๋์ ๋ฒ๊ทธ๊ฐ ์ค์ด๋ค๊ณ ์์ค์ฝ๋๋ ๊ฐ๊ฒฐํด์ง ์ ์์ต๋๋ค. ์ด๋ ์ฌ์ค๊ณ ์๊ฐ ์ ๊ฐ์ผ๋ก ์ด์ด์ง๋๋ค. ๊ฒฐ๊ตญ, TDD๋ฅผ ํตํด ์์ ํ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ณด๋ฉด ์์กด์ฑ์ด ๋ฎ์ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๊ณ , ์ ์ฒด ์ฝ๋์ ์ ์ง ๋ณด์๊ฐ ์ฉ์ดํ๋๋ก ํ ์ ์์ต๋๋ค!
์ด๋ ๊ฒ๋ง ๋ณด๋ฉด TDD๊ฐ ์ฅ๊ธฐ์ ์ธ ๊ด์ ์์ ํจ์ฌ ์ข์ ๊ฒ ๊ฐ์๋ฐ ์ TDD ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐํ์ง ์์๊น์??
TDD์ ์น๋ช ์ ์ธ ๋จ์ ์ ๊ฐ๋ฐ ์๋์ ๋๋ค.
ํ ์คํธ๋ฅผ ํ๋ฉด์ ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ณผ์ ์์ ์์ ํจ์ ๋ณด์ฅ๋๊ฒ ์ง๋ง ๋งค๋ฒ ๊ทธ ๊ณผ์ ์ ๊ฑฐ์น๋ค๋ฉด ๋น์ฐํ ์งํ ์๋๊ฐ ์ ํ๋ฉ๋๋ค.
Unit Test
TDD ๊ฐ๋ฐ ๋ฐฉ์์์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์๋ ๋ช๊ฐ์ง๊ฐ ์๋๋ฐ, ๊ทธ์ค Unit Test(๋จ์ ํ ์คํธ)์ ๋ํด ์์๋ด ์๋ค.
์ ๋ ํ ์คํธ(Unit Test)๋ ๋ค๋ฅธ ๋ง๋ก ๋จ์ ํ ์คํธ๋ผ๊ณ ๋ ํฉ๋๋ค.
ํ๋์ ํจ์, ๋ฉ์๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์งํ๋๋ ๊ฐ์ฅ ์์ ๋จ์์ ํ ์คํธ๋ก, ๋ฉ์๋๋ฅผ ํ๋ํ๋ ํ ์คํธํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋งฅ๋ฝ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
Unit Test์ ์ฅ์
- ํด๋น ๋ถ๋ถ(๋ฉ์๋)์ ๋ํด์ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ๋ฆฌํฉํ ๋ง ๋ฐ์๊ณผ ๋น ๋ฅธ ํ ์คํธ๋ฅผ ์งํํ ์ ์๊ฒ ๋ฉ๋๋ค.
- ์ฝ๋์ ํ์ฅ์ด๋ ๋ฆฌํฉํ ๋ง ์์๋ ์์ ์ฑ์ ํ๋ณดํ ์ฑ๋ก ๋น ๋ฅด๊ฒ ๋์ํ ์ ์๊ฒ ๋ฉ๋๋ค.
FIRST ์์น
์ข์ ์ ๋ ํ ์คํธ๋ฅผ ์ํด ์ง์ผ์ผ ํ๋ ๊ฒ์ผ๋ก ์๊ฐ๋๋ FIRST๋ผ๋ ์์น์ด ์์ต๋๋ค. (๊ผญ ์ง์ผ์ผ๋ง ํ๋ค!๋ ๊ฒ์ ์๋์ง๋ง ์ด๋ฌํ ์์น๋ค์ ์ผ๋์ ๋๊ณ ํ ์คํธ๋ฅผ ์์ฑํ๋ฉด ์ข์ ์ ๋ ํ ์คํธ๋ฅผ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.)
Fast
ํ ์คํธ๋ ๋น ๋ฅด๊ฒ ๋์ํ ์ ์์ด์ผ ํฉ๋๋ค.
ํ ์คํธ์ ๋๋ฌด ๋ง์ด ๋ค์ด๋ ๊ฒ์ ์ข์ง ์๋ค๋ ์๋ฏธ์ ๋๋ค.
Independent/Isolated
๊ฐ๊ฐ์ ํ ์คํธ๋ ์๋ก ๋ ๋ฆฝ์ ์ด๋ฉฐ ์๋ก ์์กดํด์๋ ์ ๋ฉ๋๋ค.
์ข์ ๋จ์ ํ ์คํธ๋ ์ต์ํ์ ๋จ์์ ํ ์คํธ์ ์ง์คํ ์ ์๊ฒ ๊ฐ ํ ์คํธ๋ค์ด ์๋ก์๊ฒ ์ํฅ์ ์ฃผ์ด์๋ ์๋ฉ๋๋ค.
Repeatable
ํ ์คํธ๋ ์ธ์ ์ด๋์๋ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋ณต๋์ด์ผ ํฉ๋๋ค.
์ฆ, ๋ชจ๋ ํ๊ฒฝ์ ํต์ ํ์ฌ ๋งค๋ฒ ์์ํ ๊ฒฐ๊ณผ๋๋ก ํ ์คํธ๊ฐ ์งํ๋๊ฒ ํด์ผ ํฉ๋๋ค.
Self-Validating
ํ ์คํธ๋ Bool์ ์ด์ฉํ์ฌ ์ฑ๊ณต/์คํจ์ ๋ํด์ ์ค์ค๋ก ๊ฒ์ฆ์ด ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
ํ ์คํธ ์ฝ๋ ๋ด๋ถ์์ ์ด ํ ์คํธ๊ฐ ์ ๋์ํ๋์ง๋ฅผ ํ๋ณํ ์ ์์ด์ผ ํฉ๋๋ค.
Timely
์ด์์ ์ธ ํ ์คํธ๋ ํ ์คํธํ๋ ค๋ ์ค์ ์ฝ๋๋ฅผ ๊ตฌํํ๊ธฐ ์ง์ ์ ๊ตฌํํด์ผ ํฉ๋๋ค.
Xcode์์ Unit Test ํด๋ณด๊ธฐ
Xcode์์ ์ค์ ๋ก Unit Test๋ฅผ ์ด๋ป๊ฒ ํ ์ ์์๊น์??
ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ํ์ผ ์์ฑํ๊ธฐ
Xcode์์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ํ์ผ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์๋ ๋๊ฐ์ง๊ฐ ์์ต๋๋ค!
์ ์ด๋ฏธ์ง์ฒ๋ผ ์ ํ๋ก์ ํธ ์์ฑ์ Include Tests๋ฅผ ์ฒดํฌํด ์ฒ์๋ถํฐ ํ ์คํธ ํ์ผ์ ์์ฑํด์ฃผ๊ฑฐ๋, ๊ธฐ์กด ํ๋ก์ ํธ์์ + ๋ฒํผ์ ๋๋ฌ ํ์ผ์ ์ถ๊ฐํด์ค ์ ์์ต๋๋ค.
๊ธฐ๋ณธ Unit Test ํด๋์ค
1. ํ๋ก์ ํธ ์ฝ๋์ ์ ๊ทผํ๊ธฐ
@testable import ํ๋ก์ ํธ ์ด๋ฆ ์ด๋ผ๋ ์ฝ๋๋ฅผ ํตํด ๊ธฐ์กด ํ๋ก์ ํธ์ ์ฝ๋์ ์ ๊ทผํด ํ ์คํธ๋ฅผ ์งํํ ์ ์์ต๋๋ค.
2. ๊ธฐ๋ณธ ๋ฉ์๋
ํ ์คํธ ํ์ผ์ ์ด์ด๋ณด๋ฉด ๊ธฐ๋ณธ์ผ๋ก ์์ฑ๋์ด์๋ ๋ฉ์๋๊ฐ ๋ค ๊ฐ์ง ์๋๋ฐ์,
์ด์ฐจํผ ํ ์คํธ ์ฝ๋๋ฅผ ์๋ก ์์ฑํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๋์ ๋ ๊ฐ์ง ๋ฉ์๋๋ ์ญ์ ํด๋ ๋ฌด๋ฐฉํฉ๋๋ค. (์ํ ๋ฉ์๋)
์์ ๋ ๊ฐ์ง ๋ฉ์๋์ ๋ํด์๋ง ์ดํด๋ณผ๊ฒ์!
- setUpWithError(): ํ ์คํธ ๋ฉ์๋๋ฅผ ์คํํ๊ธฐ ์ ๋ชจ๋ ์ํ๋ฅผ ์ด๊ธฐํํ๋ ๋ฉ์๋
- tearDownWithError(): ํ ์คํธ ๋ฉ์๋ ๋์ ํ์ ๋ชจ๋ ์ํ๋ฅผ ํด์ ํ๋ ๋ฉ์๋
๋ชจ๋ ํ ์คํธ ํจ์๊ฐ ์คํ๋๊ธฐ ์ setUpWithError() ๊ฐ, ์คํ ํ tearDownWithError() ๊ฐ ์คํ๋๋๋ฐ์,
์ด๋ ๋ ๋ฆฝ์ ์ธ ํ ์คํธ๋ฅผ ์ํด์ ์คํ๋๋ ๊ฒ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค!
3. ํ ์คํธ ๊ฒฐ๊ณผ ํ์ธ
ํ ์คํธ์ ์ฑ๊ณตํ๋ ๊ฒฝ์ฐ ์ผ์ชฝ ํจ์ ์์ ์์นํ ๋ง๋ฆ๋ชจ๊ฐ ์ด๋ก์์ผ๋ก, ์คํจํ๋ ๊ฒฝ์ฐ ๋นจ๊ฐ์์ผ๋ก ํ์๊ฐ ๋ฉ๋๋ค.
ํ ์คํธ ์ฝ๋ ์์ฑํ๊ธฐ
ํ ์คํธ ์ฝ๋๋ Test Assertion ๋ฉ์๋๋ฅผ ์ด์ฉํด ์์ฑํ ์ ์์ต๋๋ค.
XCTest ๊ณต์ ๋ฌธ์์ ๋ค์ํ ๋ฉ์๋๊ฐ ์์ผ๋ ํ ์คํธํ๋ ค๋ ์ฝ๋์ ๋ง๊ฒ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค!
[์ฐธ๊ณ ์๋ฃ]
+ ํ๋ผ๊ฐ ๊ณต์ ํด์ค ๊ธฐ๊น๋๋ ์ ๋ฆฌ ์๋ฃ (๋ก์คํฌ ํ๋ผ์ ๋ฐฐ)
'๐ iOS > iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] fastlane์ ์ด์ฉํด ๋ฐฐํฌ ์๋ํํ๊ธฐ (6) | 2024.09.06 |
---|---|
[iOS] ์ด๋ฏธ์ง์ ์ํ๋ ๋ชจ์์ ๋ง์คํฌ ์ ์ฉํ๊ธฐ (0) | 2024.05.16 |
[iOS] iOS ํ์ผ ์์คํ (1) | 2023.11.28 |
[iOS] ํค์ฒด์ธ(Keychain)์ ์ด์ฉํ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๊ด๋ฆฌ (0) | 2023.08.06 |
[iOS/Architecture] Coordinator Pattern (2) | 2022.12.11 |