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.0165 sec