WWDC ์์์ ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํด์ฃผ์ธ์ ('-' ั )ะญ
ํด๋น ์ธ์ ์์๋ ํฌ๊ฒ Introduction To XCTest, Test plans, Continuous integration workflows ์ด๋ ๊ฒ 3๊ฐ์ง ํ ํฝ์ ๋ํด ์๊ธฐํ๊ณ ์์ต๋๋ค. ๋ธ๋ก๊ทธ์์๋ ๋ง์ง๋ง ํ ํฝ์ ์ ์ธํ ์์ ๋ ๊ฐ์ง ๋ด์ฉ์ ๋ํด์๋ง ๋ค๋ฃจ๊ณ ์ ํ๋ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค! (CI๋ ... ๋์ค์.. ์ปค๋ฐ์จ ε( ε ห³ห)ะท โº )
Test plan
Test plan์ Xcode 11์์ ๋ฑ์ฅํ ์ ๊ธฐ๋ฅ์ผ๋ก ํ ์คํธ๋ฅผ ์ต๋ํ ํ์ฉํ๋๋ฐ ๋์์ด ๋๋ ๊ธฐ๋ฅ์.
์๋ฅผ ๋ค์ด ...
Localization์ด ์ ์ฉ๋ผ์๋ ์ฑ์ ๋ํ UI ํ ์คํธ๋ฅผ ์งํํ๊ณ ์ ํ๋๋ฐ
ํน์ ์ธ์ด์ ๋ํ localization์ด ๋๋ฝ๋์ด ์๋์ ๊ฐ์ด UI๊ฐ ๊นจ์ง๋ ํ์์ด ๋ฐ์ํ ์ ์์
์ด๋ฐ ํ์์ ์์ ํ ํ ํด๋น ์ธ์ด๋ก UI ํ ์คํธ๋ฅผ ์งํํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ, ๋ฌผ๋ก ์๋์ผ๋ก Xcode ์ค์ ์ ๋ณ๊ฒฝํ์ฌ ํ ์คํธํ๋ ๊ฒ๋ ๊ฐ๋ฅํ ์๋๋ฆฌ์ค์. (Different localizations)
ํน์ ๋งค๋ฒ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ํ ์คํธ๋ฅผ ๋ ๋ฒ ์ด์ ์คํํด์ผ๋ง ๋ฐ๊ฒฌํ ์ ์๋ ๋ฒ๊ทธ๊ฐ ์์ ์๋ ์์. (๋๋ค ์์๋ก ์คํํ์ ๋ ์ฐ์ฐํ๊ฒ ๋ฐ๊ฒฌํ ์ ์๋ ์ข ์์ฑ ๊ด๋ จ ์ค๋ฅ ๋ฑ..) (Random order)
๊ทธ๋ฆฌ๊ณ address sanitizer, thread sanitizer ๋ฑ ๋ ๊ฐ ์ด์์ sanitizer๋ฅผ ์ฌ์ฉํด์ ํ ์คํธ ํ๋ ๊ฒ๋ ๊ฐ๋ฅํจ. (Using sanitizers)
๋๋ ์น ์๋ฒ์ ํ ์คํธ ๋ฒ์ ์ด๋ ๋ชจ์ ๋ฐ์ดํฐ ์ ์ ์ฌ์ฉํด์ผ๋๋ ๋ฑ ์์์ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ณ๊ฒฝํด์ ํ ์คํธ ํด์ผํ๋ ๊ฒฝ์ฐ๋ ์กด์ฌํจ. (Arguments or environment variables)
์ด๋ฌํ ์ํฉ๋ค์ ๋ํด ๋งค๋ฒ ๋ค๋ฅธ ์คํด์ผ๋ก ๋ณ๊ฒฝํ์ฌ ํ ์คํธ๋ฅผ ์งํํ ์ ๋ ์์ง๋ง test plan์ ์ ๊ทน ํ์ฉํ๋ค๋ฉด ๋ค์ํ ์ค์ ์ผ๋ก ์ฌ๋ฌ ๋ฒ์ ํ ์คํธ๋ฅผ ์คํํ ์ ์์ !! ๋ํ testing variances๋ฅผ ํ ๋ฒ ์ ์ํ๊ณ ์ฌ๋ฌ test plan์์ ๊ณต์ ํ ์ ์์.
์ด์ ์ ํ ์คํธ๋ฅผ ์ฌ๋ฌ๋ฒ ์คํํ๊ธฐ ์ํด ์คํด์ ๋ณต์ ํ๋ ๊ฒ์ ์ด์ ์คํด ๋ณต์ ํ๋ ๊ฒ ์์ด ํ๋์ ์คํค๋ง๋ก ์ฌ๋ฌ ์ค์ ์ ํ ์คํธ๋ฅผ ์งํํ ์ ์์! เดฆเตเดฆเดฟหถˆ๊ณˆหต)
Demo
- ์ ์ฒด ๋ชฉ๋ก ํ์ธ ๊ฐ๋ฅ
- ํน์ ํ ์คํธ๋ฅผ ์ฐพ๊ธฐ ์ํด ํํฐ๋ง ๊ฐ๋ฅ
- ์ํ๋ ํน์ ํ ์คํธ ์ผ์์ ์ผ๋ก ๋นํ์ฑํ ๊ฐ๋ฅ
- ๋ชจ๋ test plan์ด ๊ณต์ ํ๋ shared ์ค์ ๊ณผ ๊ฐ ํ๋ ๋ณ ์ค์ ์์ ๊ฐ๋ฅ(ex. UI ํ ์คํธ์ ๊ฒฝ์ฐ ํ ์คํธ๋ฅผ ๋ณ๋ ฌ์ ์ผ๋ก ์คํํ๋ฉด ํจ์ฌ ๋น ๋ฅธ ์๋ ์ ์ง ๊ฐ๋ฅ -> ๋ณ๋ ฌ ์คํ์ผ๋ก ์ค์ ๋ณ๊ฒฝ)
์์์ ์ธ๊ธ๋๋ localization ๊ด๋ จ ํ ์คํธ๋ฅผ ์ค์ ํ๊ธฐ ์ํด์๋ ์๋ก์ด test configuration์ ์ถ๊ฐํ๊ณ ์ธ์ด์ ์ง์ญ ์ค์ ์ ๋ณ๊ฒฝํด์ฃผ๋ฉด ์ํ๋ ์ง์ญ/์ธ์ด๋ก ํ ์คํธ๊ฐ ๋์์ ์งํ ๊ฐ๋ฅํจ.
์ด๋ ๊ฒ test configuration์ ๋ ๊ฐ ์ด์์ผ๋ก ์์ฑํ ์ํ์์ ํ ์คํธ๋ฅผ ์งํํ๋ฉด ์์ฑ๋ configuration์ ๊ฐ์๋งํผ ํ ์คํธ๊ฐ ์คํ๋จ. configuration ์ค ์ํ๋ configuration๋ง ์ ํํ์ฌ ํด๋น ์ค์ ์ผ๋ก๋ง ํ ์คํธ๋ฅผ ์งํํ ์๋ ์์.
Test plan file
test plan file์ ์ค์ ๋ก ํ์ฅ์๊ฐ .xctestplan ํ์ผ ํ์ฅ์๋ฅผ ๊ฐ์ง JSON ํ์ผ
์คํํ ๋ชจ๋ ํ ์คํธ์ ํ ์คํธ ์คํ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ ๋ชจ๋ ํ ์คํธ ๊ตฌ์ฑ์ด ํฌํจ๋ผ์์.
test plan file์ ์ผ๋ฐ ํ๋ก์ ํธ ๊ตฌ์กฐ์ ํฌํจ๋๋ฉฐ ํ๋ ์ด์์ ๊ณํ์์ ์ฐธ์กฐํ ์ ์์.
ํ ์คํธ ์คํ ํ์ ๋ฉ๋ด ๋ฐ ํ ์คํธ ๋ณด๊ณ ์์ ๊ฐ์ ๊ณณ์์ test plan์ ์ด๋ฆ์ ๋ณผ ์ ์์ผ๋ฏ๋ก ๊ฐ ํ ์คํธ ๊ตฌ์ฑ์ ์๋ฏธ ์๋ ์ด๋ฆ์ ์ง์ ํ๋ ๊ฒ์ด ์ข์.
Potential Use Cases
๐ค test plan์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋ฉด ์ข์๊น ?!
Different sanitizers
Sanitizer์ ์ฝ๋๋ฅผ ๊ณ์ธกํ๊ณ ์๋์ผ๋ก ์ฌํํ๊ธฐ ์ด๋ ค์ด ๋ฒ๊ทธ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด ๋๋ Xcode์ ๋ด์ฅ๋ ๋๊ตฌ์. ๊ทธ๋ฆฌ๊ณ ์ผ๋ถ ์๋ํ์ด์ ๋ ์๋ก ๊ฒฐํฉํ ์ ์์.
์ฒซ ๋ฒ์งธ ์์์๋ address sanitizer๊ฐ ํ์ฑํ๋์ด ์๊ณ ๋ค๋ฅธ ์์์๋ thread sanitizer๊ฐ ํ์ฑํ๋์ด ์์.
ํ๋ก์ ํธ์ C ๋๋ Objective-C ์ฝ๋๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ๊ฐ ๊ตฌ์ฑ์์ undefined behavior sanitizer๋ฅผ ํ์ฑํํ์ฌ ๊ณํ์ ํ์ฅํ ์ ์์.
ํด๋น ์ค์ ์ ์๊ธ์ ์ ๊ณต์ ์ค์ ์์ ์์ ํ๋๊ฒ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์. ๊ทธ๋ฌ๋ฉด ์๊ธ์ ์ ๋ชจ๋ ๊ตฌ์ฑ์ ์๋์ผ๋ก ์์๋จ. ์ด์ ํ ๊ฐ์ง ์ฃผ์ํด์ผ ํ ์ ์ ์ํธ ํธํ๋์ง ์๋ ์๋ํ์ด์ ๋ก ์ด์ ๊ฐ์ ํ ์คํธ ๊ณํ์ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ ๊ณํ์์ ๋ ๊ฐ์ง ๊ตฌ์ฑ์ ๋ชจ๋ ์คํํ๋ฉด Xcode๊ฐ ๊ฐ ์๋ํ์ด์ ์ธํธ์ ๋ํด ํ ๋ฒ์ฉ ํ๋ก์ ํธ๋ฅผ ๋ ๋ฒ ๋น๋ํด์ผ ํ๋ค๋ ๊ฒ. ์ด๋ ๋ณด๋ค ์ฒ ์ ํ ํ ์คํธ๋ฅผ ์ํํ๊ธฐ ๋๋ฌธ์ ํ ์คํธ ๋น๋์ ์๊ฐ์ด ์กฐ๊ธ ๋ ๊ฑธ๋ฆฌ๋๋ผ๋ ์๊ด์๋ ์ง์์ ํตํฉ ํ๊ฒฝ์ ์ด์์ ์.
Simulated languages, locations, locales
๋ค์ํ ์ธ์ด, ์ง์ญ์ ๋ํ ํ ์คํธ ์ค์ ๋ํ ๊ฐ๋ฅํจ.
shared ์ค์ ์์ localization screenshot ๊ธฐ๋ฅ์ ํ์ฑํ์ํจ๋ค๋ฉด UI ํ ์คํธ ์ ์ธ์ด๋ณ ์คํฌ๋ฆฐ์ท์ ์์งํจ. ์ฑ์คํ ์ด ๋ชฉ๋ก์์ ์คํฌ๋ฆฐ์ท ํ์ฉ๋ ๊ฐ๋ฅํจ.
Mix-and-match(ํผํฉ ๊ฐ๋ฅ)
test plan์์ ์ด๋ฌํ ์ค์ ์ ํ๋ก์ ํธ์ ๋ง๊ฒ ํผํฉํ์ฌ ์ฌ์ฉํ ์ ์์
์๋ฅผ ๋ค์ด, ์ด์ ๊ฐ์ ํ ์คํธ ๊ณํ์ ์ธ ๊ฐ์ง ๊ตฌ์ฑ์ผ๋ก ๊ตฌ์ฑํ ์ ์์.
์ฒซ ๋ฒ์งธ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ด์ ์ ๋ง์ถ ๊ฒ์ผ๋ก, Address Sanitizer์ Zombie Objects ๋ฉ๋ชจ๋ฆฌ ์ค์ .
๋ ๋ฒ์งธ ๊ตฌ์ฑ์ ๋์์ฑ์ ์ด์ ์ ๋ง์ถ ๊ตฌ์ฑ์ผ๋ก thread sanitizer, undefined behavior sanitizer๊ฐ ์์ผ๋ฉฐ ๋งค๋ฒ ๋ฌด์์ ์์๋ก ํ ์คํธ๋ฅผ ์คํ.
๋ง์ง๋ง ๊ตฌ์ฑ์ ํ ์คํธ๋ฅผ ์คํํ๋ ๋์ ์ถ๊ฐ ์ง๋จ์ ์์งํ๋๋ก ์ค์ ํจ. ๋ ๋ง์ ๋ก๊ทธ ์์ง์ ํธ๋ฆฌ๊ฑฐํ๊ธฐ ์ํด ํ ์คํธ ์ค์ธ ์ฝ๋๊ฐ ์๊ณ ์๋ ์ฌ์ฉ์ ์ง์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ์ฌ ์ด๋ฅผ ์ํํจ. ๋ํ ํ ์คํธ๊ฐ ์ฑ๊ณตํ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ์ฌ์ฉ์ ์ง์ ํ์ผ ์ฒจ๋ถ ํ์ผ์ ์ ์งํ๋ ์ต์ ์ ์ฌ์ฉํ ์ ์์.
์ด๋ฐ ์์ผ๋ก ํ ์คํธ๋ฅผ ํ๋ ๋ชฉ์ ์ ์กฐ๊ธ ๋ ์ธ๋ถํํ์ฌ ๊ทธ์ ๋ง๋ Plan์ ์์ฑ ๋ฐ ์ค์ ํด์ค ์ ์๋ ๊ฒ์ด test plan์ ์ฅ์ ! เดฆเตเดฆเดฟ๏ฝฅω๏ฝฅ`)
๋์ค์ ํ ์คํธ ํ๊ณ ์ ํ๋ ํ๊ฒฝ์ด ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๊ธด๋ค๋ฉด test plan์ ํ์ฉํ์ฌ ๋ฏธ๋ฆฌ ์ค์ ํด์ ํธํ๊ฒ ํ ์คํธํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค ูฉ(ใแ)ู
'๐ WWDC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[WWDC] Testing in Xcode: Introduction to XCTest (2) | 2024.01.16 |
---|