ํด๋น ์คํ ๊ธฐ๋ฅ์ด ์ ๋๋ก ๋์๊ฐ๋์ง๋ฅผ ํ
์คํธํ๋ ์ฝ๋. ๋ณดํต 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์ ํตํ ๊ฐ๋ฐ์ ๊ฑฐ์ ํ์ค์ฑ์ด ์๊ฑฐ๋ ๋งค์ฐ ๋นํจ์จ์ ์
๋๋ค. --๊น์ฐฝ์ค