MCP๋กœ ์—ฐ๊ฒฐ โ†’

๊ณ„์‚ฐ ์ž…๋ ฅ

๊ณต์‹

๊ด‘๊ณ 

๊ฒฐ๊ณผ

๊ฒฐํ•จ ๋ฐ€๋„ (KLOC๋‹น)
2.5
bugs/KLOC
ํ…Œ์ŠคํŠธ ๋ฐ€๋„ (LOC๋‹น) 0.05 tests/LOC
ํ…Œ์ŠคํŠธ ๋ฐ€๋„ (KLOC๋‹น) 50 tests/KLOC
๊ฒฐํ•จ ๋ฐ€๋„ (LOC๋‹น) 0.0025 bugs/LOC
๊ฒฐํ•จ ๋ฐ€๋„ (KLOC๋‹น) 2.5 bugs/KLOC
ํ™˜์‚ฐ๋œ ์ฝ”๋“œ ๊ทœ๋ชจ 10,000 LOC

์ด ๊ณ„์‚ฐ๊ธฐ๋กœ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋‚˜์š”

์ด ๋„๊ตฌ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง์—์„œ ๋„๋ฆฌ ์“ฐ์ด๋Š” ๋‘ ๊ฐ€์ง€ ํ’ˆ์งˆ ์ง€ํ‘œ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ํ…Œ์ŠคํŠธ ๋ฐ€๋„(์ฝ”๋“œ ๊ทœ๋ชจ ๋Œ€๋น„ ๋ณด์œ ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ˆ˜)์ด๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๊ฒฐํ•จ ๋ฐ€๋„(์ฝ”๋“œ ๊ทœ๋ชจ ๋Œ€๋น„ ๋ฐœ๊ฒฌ๋œ ๋ฒ„๊ทธ์˜ ์ˆ˜)์ž…๋‹ˆ๋‹ค. ๋‘ ์ง€ํ‘œ ๋ชจ๋‘ 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์„ ๊ณฑํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ˆ˜์™€ ๋ฒ„๊ทธ ์ˆ˜๋Š” ์ •์ˆ˜ ๊ฐœ์ˆ˜์ด๋ฏ€๋กœ ๋ณ„๋„๋กœ ํ™˜์‚ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ์ค„ ์ˆ˜์— ๋Œ€ํ•œ ๋น„์œจ๋กœ ํ‘œํ˜„ํ•œ ๋ฒ„๊ทธ ๋ฐ€๋„์™€ ํ…Œ์ŠคํŠธ ๋ฐ€๋„ ๋‹ค์ด์–ด๊ทธ๋žจ
๋‘ ์ง€ํ‘œ ๋ชจ๋‘ ๊ฐœ์ˆ˜(๋ฒ„๊ทธ ๋˜๋Š” ํ…Œ์ŠคํŠธ)๋ฅผ ์ฝ”๋“œ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆ„๊ณ  KLOC๋‹น ๋‹จ์œ„๋กœ ํ™˜์‚ฐํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ๋กœ ์‚ดํŽด๋ณด๊ธฐ

ํ…Œ์ŠคํŠธ๋ฅผ 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๋ฅผ ์„ธ๋Š” ๊ธฐ์ค€์ด ์„œ๋กœ ๊ฐ™์„ ๋•Œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์„ ์ค„๊ณผ ๋นˆ ์ค„์„ ํฌํ•จํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ ํƒ์— ๋”ฐ๋ผ ๋ฐ€๋„ ๊ฐ’์ด ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ตœ์ข… ์—…๋ฐ์ดํŠธ: