์ด ๊ณ์ฐ๊ธฐ๋ก ๋ฌด์์ ํ ์ ์๋์
์ด ๋๊ตฌ๋ ์ํํธ์จ์ด ์์ง๋์ด๋ง์์ ๋๋ฆฌ ์ฐ์ด๋ ๋ ๊ฐ์ง ํ์ง ์งํ๋ฅผ ๊ณ์ฐํฉ๋๋ค. ํ๋๋ ํ ์คํธ ๋ฐ๋(์ฝ๋ ๊ท๋ชจ ๋๋น ๋ณด์ ํ ํ ์คํธ ์ผ์ด์ค์ ์)์ด๊ณ , ๋ค๋ฅธ ํ๋๋ ๊ฒฐํจ ๋ฐ๋(์ฝ๋ ๊ท๋ชจ ๋๋น ๋ฐ๊ฒฌ๋ ๋ฒ๊ทธ์ ์)์ ๋๋ค. ๋ ์งํ ๋ชจ๋ LOC(์ฝ๋ ๋ผ์ธ ์, Lines Of Code)๋น ๊ฐ๊ณผ KLOC(์ฝ๋ ๋ผ์ธ ์ 1,000์ค ๋จ์)๋น ๊ฐ์ผ๋ก ํจ๊ป ์ ๊ณต๋ฉ๋๋ค. ์ ๊ณ์์๋ ๋ณดํต KLOC๋ฅผ ํ์ค ๋ณด๊ณ ๋จ์๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ํน์ ๊ตญ๊ฐ์ ๊ท์ ๊ณผ ๋ฌด๊ดํ ๋ฒ์ฉ ์งํ์ ๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
์คํํ ํ ์คํธ ์ผ์ด์ค ์, ๋ฐ๊ฒฌํ ๋ฒ๊ทธ ์, ์์ค ์ฝ๋ ๊ท๋ชจ๋ฅผ ์ ๋ ฅํ์ธ์. ์ฝ๋ ๊ท๋ชจ๋ฅผ ์ ๋ ฅํ ๋๋ ๊ทธ ๊ฐ์ด ์์ ๋ผ์ธ ์(LOC)์ธ์ง, ์๋๋ฉด 1,000์ค ๋จ์(KLOC)์ธ์ง ์ ํํ๋ฉด ๋ฉ๋๋ค. ๊ณ์ฐ๊ธฐ๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ด๋ฅผ ์์ LOC๋ก ํ์ฐํ ๋ค ๋ชจ๋ ๋ฐ๋ ๊ฐ์ ์๋์ผ๋ก ์ฐ์ถํฉ๋๋ค.
๊ณต์ ํ์ด
๋จผ์ ์ฝ๋ ๊ท๋ชจ๋ฅผ ํ์ฐํฉ๋๋ค.
$$\text{locLines} = \text{loc} \times \text{factor}$$์ด๋ฉฐ, factor๋ LOC์ผ ๋ 1, KLOC์ผ ๋ 1000์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ LOC๋น ํ ์คํธ ๋ฐ๋ = ํ ์คํธ ์ / locLines, LOC๋น ๊ฒฐํจ ๋ฐ๋ = ๋ฒ๊ทธ ์ / locLines๋ก ๊ณ์ฐํฉ๋๋ค.
$$\text{Test Density} = \frac{\text{Test Count}}{L} \times 1000, \qquad \text{Bug Density} = \frac{\text{Bug Count}}{L} \times 1000$$KLOC๋น ๊ฐ์ ๋จ์ํ LOC๋น ๊ฐ์ 1000์ ๊ณฑํ ๊ฒ์ ๋๋ค. ํ ์คํธ ์์ ๋ฒ๊ทธ ์๋ ์ ์ ๊ฐ์์ด๋ฏ๋ก ๋ณ๋๋ก ํ์ฐํ์ง ์์ต๋๋ค.
์์ ๋ก ์ดํด๋ณด๊ธฐ
ํ ์คํธ๋ฅผ 500๊ฑด ์คํํ๊ณ , ๋ฒ๊ทธ๋ฅผ 25๊ฐ ๋ฐ๊ฒฌํ์ผ๋ฉฐ, ์ฝ๋๋ฒ ์ด์ค๊ฐ 10 KLOC๋ผ๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ํ์ฐ๋ ๊ท๋ชจ๋ \(10 \times 1000 = 10{,}000\) LOC์ ๋๋ค. ํ ์คํธ ๋ฐ๋ \(= 500 / 10{,}000 = 0.05\) tests/LOC, ์ฆ 50 tests/KLOC์ ๋๋ค. ๊ฒฐํจ ๋ฐ๋ \(= 25 / 10{,}000 = 0.0025\) bugs/LOC, ์ฆ 2.5 bugs/KLOC์ ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
์ LOC๋น ๊ฐ๊ณผ KLOC๋น ๊ฐ์ ๋ชจ๋ ๋ณด์ฌ์ฃผ๋์? LOC๋น ๊ฐ์ ์ซ์๊ฐ ๋๋ฌด ์์ ์ฝ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์, ์ ๊ณ์์๋ ๊ด๋ก์ ์ผ๋ก KLOC ๋จ์๋ก ๋ณด๊ณ ํฉ๋๋ค. ๋ ๊ฐ์ ๋๊ฐ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ผ๋ฉฐ, ํ์ชฝ์ด ๋ค๋ฅธ ์ชฝ์ 1000์ ๊ณฑํ ๊ฐ์ผ ๋ฟ์ ๋๋ค.
๊ฒฐ๊ณผ๊ฐ ๋น์ด ์๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์? LOC๊ฐ 0์ด๋ฉด ๋ฐ๋๋ ์ํ์ ์ผ๋ก ์ ์๋์ง ์์ต๋๋ค(0์ผ๋ก ๋๋๊ธฐ). ๋ฐ๋ผ์ ๊ณ์ฐ๊ธฐ๋ ๋ฌดํ๋ ๊ฐ ๋์ ์ค๋ฅ๋ฅผ ํ์ํฉ๋๋ค.
์ด ์์น๋ฅผ ํ๋ก์ ํธ๋ผ๋ฆฌ ๋น๊ตํ ์ ์๋์? LOC๋ฅผ ์ธ๋ ๊ธฐ์ค์ด ์๋ก ๊ฐ์ ๋๋ง ๊ฐ๋ฅํฉ๋๋ค. ์ฃผ์ ์ค๊ณผ ๋น ์ค์ ํฌํจํ ์ง ์ฌ๋ถ๋ฅผ ์ผ๊ด๋๊ฒ ์ ํด์ผ ํฉ๋๋ค. ์ด ์ ํ์ ๋ฐ๋ผ ๋ฐ๋ ๊ฐ์ด ํฌ๊ฒ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ๋๋ค.