Computer Science
IntelliJ๋ก Code Coverage ํ์ธํ๊ธฐ
9/21/2024

Code Coverage
Code Coverage๋ ์ํํธ์จ์ด ํ ์คํธ๋ฅผ ์ํํ์ ๋ ์์ค ์ฝ๋๊ฐ ์ผ๋ง๋ ์ ๋ฐํ๊ฒ ํ ์คํธ์ ์ํด ์คํ๋์๋๊ฐ์ ๊ด๋ จ๋ ์ฒ๋์ ๋๋ค. ์ด ์ฒ๋์๋ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ์ค์ด ์์ด์ ๋ค์ํ ๊ด์ ์ผ๋ก ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ํ๊ฐํ ์ ์์ต๋๋ค.
1. Function Coverage
Function Coverage๋ ์์ค์ฝ๋ ๋ด์ ์๋ function๋ค์ ๊ฐ์๋ฅผ ํ ๋๋ก ํ ์คํธ๋ฅผ ํ๊ฐํฉ๋๋ค. 100์ค์ ์์ค์ฝ๋ ๋ด์์ ํจ์๊ฐ 5๊ฐ๊ฐ ์กด์ฌํ๊ณ , ๊ทธ ์ค 3๊ฐ๋ง ํ ์คํธ ๋์ค ํธ์ถ๋์๋ค๋ฉด Function Coverage๋ 60%์ ๋๋ค.
2. Line Coverage
Line Coverage๋ ํ ์คํธ์ ์ํด์ ์์ค์ฝ๋์ ํ ์ค ํ ์ค์ด ์คํ๋์๋๊ฐ ์๋์๋๊ฐ๋ฅผ ํํํฉ๋๋ค. ์ ์ฒด ์์ค์ฝ๋๊ฐ 100์ค์ด๊ณ , ํ ์คํธ๋ฅผ ํตํด ๊ทธ ์ค 80๊ฐ์ ๋ผ์ธ์ด ์คํ๋์์ผ๋ฉด Line Coverage๋ 80%์ ๋๋ค.
3. Branch Coverage
Branch Coverage๋ if ๋ฌธ๊ณผ ๊ฐ์ ๋ถ๊ธฐ๋ฌธ์์ ๊ฐ๊ฐ์ ๋ถ๊ธฐ ๊ฒฝ๋ก๊ฐ ํ ์คํธ๋ฅผ ํตํด ์คํ๋์๋์ง๋ฅผ ํ๊ฐํ๋ ๊ธฐ์ค์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฝ๋ ๋ด์ if - else ๋ฌธ์ด 10๊ฐ ์๋ค๋ฉด, ๊ฐ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฐ๋ฅํ ๋ถ๊ธฐ ๊ฒฝ๋ก๋ ์ด 20๊ฐ๊ฐ ๋ฉ๋๋ค. Branch Coverage๋ โ์คํ๋ ๋ถ๊ธฐ ๊ฒฝ๋ก์ ์ / ์ ์ฒด ๋ถ๊ธฐ ๊ฒฝ๋ก์ ์โ๋ก ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๊ณ์ฐํฉ๋๋ค.
4. Condition Coverage
ํ๋์ ์กฐ๊ฑด๋ฌธ์ ์ฌ๋ฌ ๊ฐ์ ์กฐ๊ฑด์ผ๋ก ์ด๋ฃจ์ด์ง ์ ์์ต๋๋ค. Branch Coverage๋ ์กฐ๊ฑด๋ฌธ์ ๊ฒฐ๊ณผ๊ฐ true ๋๋ false๊ฐ ๋์๋์ง๋ง ํ์ธํ๋ ๋ฐ๋ฉด, Condition Coverage๋ (a < 5 && b > 3)๊ณผ ๊ฐ์ ๋ณตํฉ ์กฐ๊ฑด์์์ ๊ฐ ์กฐ๊ฑด์ด true์ false๋ฅผ ๋ชจ๋ ๊ฒฝํํ๋์ง๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์์ ๊ฐ์ ๋ณตํฉ ์กฐ๊ฑด์์์๋ a < 5์ b > 3 ๊ฐ๊ฐ์ด true์ false์ ๊ฐ์ ๊ฐ์ง ์ ์์ผ๋ฏ๋ก, ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋ 4๊ฐ์ง์ ๋๋ค: true-true, true-false, false-true, false-false. ์ด ๋ค ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ๋ชจ๋ ํ ์คํธ๋์์ ๋, Condition Coverage๋ 100%๊ฐ ๋ฉ๋๋ค.
Code Coverage Tool
ํ ์คํธ์ ๋ํ ์์ ๊ฐ์ ์ฒ๋๋ ์ฝ๋ ํ์ง์ ์ํด ์ ์ ํ ์์ค์ ์ ์งํด์ผํ๋ ์์ ์ค ํ๋์ ๋๋ค. ๋ฌผ๋ก ์ง๋์น๊ฒ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๊ฐ ๋์ ํ์๋ ์์ง๋ง, ํ ๋ด์์ ์ฝ์ํ ์ ๋นํ ์์ค์ ์ ์งํ๋ ์์ผ๋ก ํ์ง ๊ด๋ฆฌ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
Jacoco๋ ์ด๋ฌํ ๊ด๋ฆฌ๋ฅผ ๋์์ฃผ๋ ์๋ฐ ์ง์์ ๋๊ตฌ์ ๋๋ค. ๋ค์ํ ์ฒ๋์ Coverage๋ฅผ ์ธก์ ํด์ฃผ๊ณ ์ด๋ฅผ ๋ถ์ํด์ฃผ๋ ๋ฌธ์๋ฅผ ๋ง๋ค์ด์ค ๋ฟ ๋ง ์๋๋ผ, ๋น๋ ์์ ์ Coverage๊ฐ ๋ฎ๋ค๋ฉด ๋น๋๋ฅผ ์คํจ์ํฌ ์๋ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ ๋ด์์ ๊ฐ์ ์ ์ผ๋ก ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ ์งํ๋๋ก ๋ง๋ค ์ ์์ต๋๋ค.
Intellij์์๋ ๊ฐ๋จํ๊ฒ ๋ณผ ์ ์๋ค
Jacoco์ ๊ฐ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ ํ์ง ์๊ณ ๋ Intellij๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๊ฐ๋จํ๊ฒ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋ณผ ์๋ ์์ต๋๋ค. ์ํ๋ Test Suite์์ More Run/Debug -> Run Test in ... With Coverage๋ฅผ ํตํด ์คํํด์ฃผ๋ฉด ๋ฉ๋๋ค.


ํ ์คํธ๊ฐ ์ข ๋ฃ๋๊ณ ๋๋ฉด ํญ์ด ํ๋๊ฐ ๋จ๋๋ฐ, ๊ทธ ๊ณณ์์ Class Coverage, Method Coverage, Line Coverage๋ฅผ ๋ณผ ์ ์์ด์ ๋ณ๋์ ์ค์ ์์ด ๊ฐ๋จํ๊ฒ ํ์ธํ๊ธฐ์ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.