[์ฝ๋๋ถ์ ๋๊ตฌ]# 1 ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋?
by JiwonDev* ์ธ๋ค์ผ ์ด๋ฏธ์ง๋ ๋ง๋ ํ๊ฒ ์์ด์ ์ ํจ์ค๋ฅผ ๊ฐ์ด ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
# ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง(Code Coverage)๋?
์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ ์ํํธ์จ์ด์ ํ ์คํธ ์ผ์ด์ค๊ฐ ์ผ๋ง๋ ์ถฉ์กฑ๋์๋์ง๋ฅผ ๋ํ๋ด๋ ์งํ ์ค ํ๋.
ํ ์คํธ๋ฅผ ์งํํ์์ ๋ '์ฝ๋ ์์ฒด๊ฐ ์ผ๋ง๋ ์คํ๋์๋๊ฐ' ์ ๋ํ ์์น.
@ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ ์ด๋ป๊ฒ ์ธก์ ํ ๊น?
- ๋ธ๋๋ฐ์ค ํ
์คํธ
- ์ํํธ์จ์ด์ ๋ด๋ถ ๊ตฌ์กฐ, ์๋ฆฌ๋ฅผ ๋ชจ๋ฅด๋ ์ํ์์ ๋์์ ๊ฒ์ฌํ๋ ๋ฐฉ์
- ์ฌ์ฉ์ ๊ด์ ์ ํ ์คํธ. ์ด์ํ ๊ฐ์ ์ ๋ ฅํ์ ๋ ์ฌ๋ฐ๋ฅธ ์ถ๋ ฅ์ด ๋์ค๋๊ฐ? - ํ์ดํธ๋ฐ์ค ํ
์คํธ
- ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ด๋ถ ๊ตฌ์กฐ์ ๋์์ ๊ฒ์ฌํ๋ ํ ์คํธ ๋ฐฉ์.
- ๊ฐ๋ฐ์์ ๊ด์ ์์ ์ํํธ์จ์ด ๋ด๋ถ์ ์์ค์ฝ๋๋ฅผ ํ ์คํธ
@ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ธก์ ํ๋ ๊ธฐ์ค๊ฐ์ ์ด๋ค๊ฒ์ด ์์๊น?
- ๊ตฌ๋ฌธ(Statement) ๋๋ ๋ผ์ธ(Line) ์ปค๋ฒ๋ฆฌ์ง
- ์กฐ๊ฑด์ ๋ฐ๋ฅธ ๋ก์ง(์๋๋ฆฌ์ค)๋ฅผ ํ์ธํ ์๋ ์์ง๋ง, ๋ชจ๋ ์ฝ๋๊ฐ ์คํ๋๋์ง๋ ํ์ธ ๊ฐ๋ฅํ ์งํ
- ํ์ง๋ง ์์ค์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ก๊ฒ๋๋ฉด ์ปจ๋ฒค์ ์ ์ํฅ์ ๋ฐ๋๋ค -> ๋ฐ์ดํธ์ฝ๋ ๊ตฌ๋ฌธ ์ปค๋ฒ๋ฆฌ์ง ์ฌ์ฉ
// ํ
์คํธ์์ ์ ์ฒด(100%) ์ฝ๋ ์ค, ๋ช ๋ผ์ธ์ด ์คํ๋๋๊ฐ?
// 4๊ฐ์ ๋ผ์ธ์ค 3๊ฐ๊ฐ ์คํ๋ฌ๋ค๋ฉด ๊ตฌ๋ฌธ ์ปค๋ฒ๋ฆฌ์ง๋ 75% (3/4)
void foo (int x) {
system.out("start line"); // ํ
์คํธ 1๋ฒ
if (x > 0) { // ํ
์คํธ 2๋ฒ
system.out("middle line"); // ํ
์คํธ 3๋ฒ
}
system.out("last line"); // ํ
์คํธ 4๋ฒ
}
- ์กฐ๊ฑด(Condition) ์ปค๋ฒ๋ฆฌ์ง
- ์กฐ๊ฑด๋ฌธ์ ๋ด๋ถ์กฐ๊ฑด(if)๊ฐ ์ด์ํ ๊ฐ์ด ์๋ true, false๋ฅผ ๋ฐํํ๋์ง ํ์ธํ๋ ์งํ
// ๋ชจ๋ ์กฐ๊ฑด์์ ๋ด๋ถ์กฐ๊ฑด(if)์ ๋ํด ์ปจ๋์
๊ฐ์ด true ๋๋ false๋ฅผ ๋ฐํํ๋์ง ํ
์คํธ
// ๋จ, ์กฐ๊ฑด์ด ์๋ฏธ์๋ ๊ฒฝ์ฐ(๋ฌด์กฐ๊ฑด true)๋ ํ
์คํธ ์ฑ๊ณต์ผ๋ก ํ๊ธฐํ๋ค๋ ๋จ์ ์ด ์์.
void foo (int x, int y) {
system.out("start line");
if (x > 0 && y < 0) { // ํ
์คํธ. x,y ์ฌ๋ฌ๊ฐ์ ๋์
ํ๋ฉฐ true or false๊ฐ ๋์ค๋์ง ํ์ธ
system.out("middle line");
}
system.out("last line");
}
- ๊ฒฐ์ (Decision) ์ปค๋ฒ๋ฆฌ์ง ๋๋ ๋ธ๋ ์น(Branch) ์ปค๋ฒ๋ฆฌ์ง
- ํ ์คํธ์ ๋ํด์ ๋ชจ๋ ์กฐ๊ฑด์์ด true, false๋ฅผ ๋ ๋ค ๊ฐ์ ธ์ผํจ. ์ฆ ๋ก์ง์ ๋ฐ๋ผ ์คํํ๋ฆ์ด ๋ณํ๋์ง ํ์ธํ๋ ์งํ
- ๋จ ์กฐ๊ฑด๋ฌธ์ด ์์ผ๋ฉด ์์ ํ ์คํธ๋ฅผ ํ์ง ์๋๋ค๋ ๋จ์ ์ด ์์. => ๊ทธ๋์ ๋ผ์ธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ฃผ๋ก ์ฌ์ฉ.
@ ์ด๊ฒ ์ ์ค์ํ์ฃ ?
ํ ์คํธ ์ฝ๋๋ ๋ฐ์ํ ์ ์๋ ๋ชจ๋ ์๋๋ฆฌ์ค์ ๋ํด ์์ฑ๋์ด์ผํ๋ค. ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ํตํ ํ ์คํธ์ ์์นํ๋ ๊ฐ๋ฐ์๊ฐ ๋์น ๋ก์ง์ ํ๋ฆ์ด๋ ์ฝ๋๋ฅผ ๋ณด์ํ ์ ์๊ฒ ๋ง๋ค์ด์ค๋ค.
์ค์ ํ์ ์์๋ ํ ์คํธ ์ฝ๋์ ์ค์์ฑ์ ์ธ์งํ๊ณ , ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๋ค. ๋ํ์ ์ผ๋ก ์๋ํ๋ธ(SonarQube)์ ๊ฐ์ ์ ์ ์ฝ๋ ๋ถ์๋๊ตฌ๋ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๊ฐ์ด ๊ธฐ์กด๋ณด๋ค ๋จ์ด์ง๋ ๊ฒฝ์ฐ ์ปค๋ฐ ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅํ๊ฒ ์ ํํ ์ ์๋ค.
๋ค์์๊ฐ์๋ Jacoco์ SonarQube๋ฅผ ์๋ฐ ์คํ๋ง ํ๋ก์ ํธ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด์
'๐ฑBackend > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝ๋๋ถ์๋๊ตฌ]# 3 SonarLint, SonarQube (0) | 2021.08.21 |
---|---|
[์ฝ๋๋ถ์๋๊ตฌ]#2 Jacoco ์ ์ฉํ๊ธฐ (0) | 2021.08.21 |
#22 ์๋ฐ ์ฑ ๋ฐฐํฌ (JAR, WAR) (0) | 2021.07.21 |
#21 Servlet Context Listener (0) | 2021.07.21 |
#20 JDBC ํธ๋์ญ์ (Spring -@Transaction) (0) | 2021.07.21 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev