E D R , A S I H C RSS

Unit Test

ํ•ด๋‹น ์‹คํ–‰ ๊ธฐ๋Šฅ์ด ์ œ๋Œ€๋กœ ๋Œ์•„๊ฐ€๋Š”์ง€๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ฝ”๋“œ. ๋ณดํ†ต SE์—์„œ๋Š” ๋ชจ๋“ˆ๋‹จ์œ„์˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ง€์นญํ•œ๋‹ค.

ExtremeProgramming ์—์„œ๋Š” TestFirstProgramming ์„ ํ•œ๋‹ค. TestFirstProgramming ์—์„œ๋Š” ํ•ด๋‹น ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ํ”„๋กœ๊ทธ๋žจ์„ ๋จผ์ € ๋งŒ๋“ค๊ณ , ์‹ค์ œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•œ๋‹ค.

TestFirstProgramming ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด ๋‚˜๊ฐ€๋Š” ๊ณผ์ •์ด UnitTest ์ž‘์„ฑ์ค‘ ๋‚จ๊ฒŒ ๋œ๋‹ค. ์ด๋Š” ์ผ์ข…์˜ WhiteBoxTesting ์ด ๋œ๋‹ค. ๋˜ํ•œ, ํ•ด๋‹น ๋ชจ๋“ˆ์ด ์ œ๋Œ€๋กœ ๋Œ์•„๊ฐ€๋Š”์ง€์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋„ ์ฒดํฌํ•˜๋ฏ€๋กœ BlackBoxTesting ์˜ ์—ญํ• ์„ ํ•œ๋‹ค. ์ฆ‰, ExtremeProgramming ์—์„œ์˜ UnitTest ๋Š” ๋‘๊ฐ€์ง€ ํ…Œ์ŠคํŠธ์˜ ์„ฑ๊ฒฉ์„ ๊ฐ™์ด ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. (Gray Box Testing)

๋ณดํ†ต ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ• ๋•Œ๋Š” UnitTestFramework Library๋“ค์„ ์ด์šฉํ•œ๋‹ค. ๊ฐ Language ๋ณ„๋กœ ๋‹ค์–‘ํ•œ๋ฐ, C++ ์‚ฌ์šฉ์ž๋Š” CppUnit, Java ๋Š” JUnit, Python ์€ PyUnit ๋“ฑ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. PyUnit ์˜ ๊ฒฝ์šฐ๋Š” 2.1๋ถ€ํ„ฐ ๊ธฐ๋ณธ ๋ชจ๋“ˆ์— ํฌํ•จ๋˜์–ด์žˆ๋‹ค.


SoftwareEngineering ์— ์žˆ์–ด์„œ UnitTest ๋Š” '๋‹จ์œ„ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ' ์ด๋‹ค. ์ฆ‰, ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ์ œ๋Œ€๋กœ ๋Œ์•„๊ฐ์„ ํ™•์ธํ•˜๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ UnitTest ์ด๋‹ค.

์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š” ์ค‘๊ฐ„์ค‘๊ฐ„์— ๊ฒฐ๊ณผ๊ฐ’์„ ์ถœ๋ ฅํ•ด๋ด„์œผ๋กœ์„œ ์ œ๋Œ€๋กœ ๋Œ์•„๊ฐ์„ ํ™•์ธํ•œ๋‹ค. ์ด ๋˜ํ•œ UnitTest ๋ผ ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค. (๋‹จ, Manual Test ๋กœ ๋ถ„๋ฅ˜ํ•ด์•ผ ํ•˜๊ฒ ๋‹ค.) ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ๊ฐ’์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ ์ฝ”๋“œ๋กœ์„œ ๋งŒ๋“ค์–ด ๋„ฃ๋Š”๋‹ค๋ฉด ์ด ํ…Œ์ŠคํŠธ๋Š” ์ž๋™ํ™”์‹œํ‚ฌ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด UnitTest Code ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.
void testFactorial ()
{
	expected = 3 * 2 * 1;
	actual = factorial (3);
	if (expected == actual) printf ("okok!\n");
	else printf ("error!\n");
}

์ด๋ฅผ assert ๋ฌธ์œผ๋กœ ๋ฐ”๊พธ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ฒฐ๊ณผ๊ฐ’์ด ๊ฐ™์ง€ ์•Š์œผ๋ฉด 'abnormal program termination' ์ด ์ผ์–ด๋‚œ๋‹ค.
 
void testFactorial ()
{
	expected = 3 * 2 * 1;
	actual = factorial (3);
	assert (actual == expected);
}
C ์—์„œ์˜ UnitTest Code ์ž‘์„ฑ์‹œ์—๋Š” assert ๋ฌธ์œผ๋กœ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋‹ค.


Thread

Q: ํ•œ๊ฐ€์ง€ ์˜๋ฌธ๋‚˜๋Š” ์ ์ด ์žˆ์–ด์„œ , ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋Š”(์˜ˆ๋ฅผ๋“ค๋ฉด Socket๊ณผ ๊ฐ™์€ ์‹œ์Šคํ…œ์ด ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋ฐ์ดํƒ€ ํƒ€์ž…) ๋ฐ์ดํƒ€ ํ˜•์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์žˆ์„ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ์š”?

A: Socket ์ด๋‚˜ Database๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜๊ฒ ์ฃ . ๊ทธ๋Ÿด๋•Œ MockObjects๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ๋˜๊ฑธ๋กœ ๊ธฐ์–ตํ•˜๋Š”๋ฐ, ์•„์ง ์‹ค์ œ๋กœ ์ œ๊ฐ€ ํ•ด๋ณด์ง€๋Š” ์•Š์•„์„œ์š”. ๋Œ€๊ฐ• ๊ฐœ๋…์„ ๋ณด๋ฉด MockObjects๋Š” ์ผ์ข…์˜ ๊ฐ€์งœ ๊ฐ์ฒด๋กœ ์‹ค์ œ ๊ฐ์ฒด๊ฐ€ ํ•˜๋Š” ์ผ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•ด์ฃผ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ MockObjects ๋ฅผ ์…‹ํŒ…์„ ํ•ด๋‘๊ณ  ํ•ด๋‹น ํ•จ์ˆ˜๊ฒฐ๊ณผ์˜ ๋ฆฌํ„ด ์š”๊ตฌ์‹œ์—๋Š” ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌํ„ดํ•˜๊ฒŒ๋” ํ•˜๋Š” ๊ฒƒ์ด์ง€์š”. ๋‚˜์ค‘์— ๋ณธ ํ”„๋กœ๊ทธ๋žจ์—์„œ MockObjects๋“ค์„ ํ† ๋Œ€๋กœ ์‹ค์ œ์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค.. ์‹์˜ ๊ฐœ๋…์œผ๋กœ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๊ธด ํ•œ๋ฐ, ์ €์˜ ๊ฒฝ์šฐ๋Š” ๊ณต๋ถ€๋งŒ ํ•˜๊ณ  ์ ์šฉํ•ด๋ณธ ์ ์€ ์—†์Šต๋‹ˆ๋‹ค. --์„์ฒœ

A: MockObjects๊ฐ€ ์ตœ์ ์ž…๋‹ˆ๋‹ค. Socket์ด๋‚˜ Database Connection๊ณผ ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค์˜ "๊ฐ€์งœ ๊ฐ์ฒด"๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๊ฒ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Socket ์—๋Ÿฌ ๊ฐ™์€ ๊ฒƒ๋„ ์ž„์˜๋กœ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ๊ณ , ์ „์ฒด ํ…Œ์ŠคํŒ… ์‹œ๊ฐ„๋„ ํ›จ์”ฌ ์งง์•„์ง‘๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ "์ง„์งœ ๊ฐ์ฒด"๋ฅผ ํ†ตํ•œ ํ…Œ์ŠคํŠธ๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, Socket ์—ฐ๊ฒฐ์ด ์ œ๋Œ€๋กœ ๋˜๋Š”๊ฐ€ ํ•˜๋Š” ์ •๋„๋งŒ(์ตœ์†Œํ•œ๋„๋กœ) "์ง„์งœ ๊ฐ์ฒด"๋กœ ํ…Œ์ŠคํŒ…์„ ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” "๊ฐ€์งœ ๊ฐ์ฒด"๋กœ ํ…Œ์ŠคํŒ…์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ด๋Ÿฐ ๊ฒฝ์šฐ, MockObjects๋ฅผ ์“ฐ์ง€ ์•Š์œผ๋ฉด Test Code Cycle์„ ํ†ตํ•œ ๊ฐœ๋ฐœ์€ ๊ฑฐ์˜ ํ˜„์‹ค์„ฑ์ด ์—†๊ฑฐ๋‚˜ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. --๊น€์ฐฝ์ค€

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:20
Processing time 0.0047 sec