1.1. TDD๋ฅผ ํ๋ฉด์ ์ธ์ ์๊ฐ์ ๋ง์ด ํด์ผํ๋์ง? ¶
ํ
์คํธ๋ฅผ ๋ง๋ค ๋์ธ๊ฐ? ํ
์คํธ์ ๋ง๊ฒ ๋์์ ์ํํ๋ ์ฝ๋๋ฅผ ์์ฑํ ๋์ธ๊ฐ? --Leonardong
...์ ๋ต...
์ฌ๋๋ง๋ค ๋ค๋ฅผ๊ฒ ๊ฐ๊ธด ํ์ง๋ง, ๋์ ๊ฒฝ์ฐ๋ ํ
์คํธ๋ฅผ ์์ฑํ๊ธฐ ์ TODO List ๋ฅผ ์์ฑํ ๋ ๊ฐ์ฅ ๊ณ ๋ฏผ์ ํ๊ณ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฐ ๊ฒ ๊ฐ๋ค. ๋ญ ๋ง๋ค๊ฒ์ธ์ง์ ๋ํ ์ดํด๊ฐ ์ ๋๋ก ๋์ง ์์ ์ํ์์๋ ๋๋์ฒด '๋ญ ํด์ผ ํ ์ง, ์ด๋ค ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ํด์ผ ํ ์ง'๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ.
ํํธ, ๋ง์ผ TODO ๋ฆฌ์คํธ ์์ฑ์ ์๊ฐ์ด ๋๋ฌด ์ง์ฒด๋๋ค ์ถ์ผ๋ฉด ๋นจ๋ฆฌ '์ด๋ค ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ํด์ผ ํ๋(Test ๋์์ธ)' ์ด๋ ์ง๋ฌธ์ ํ๊ณ ํ
์คํธ๋ฅผ ์์ฑํด๋ณด๋ ๋ฐฉ๋ฒ์ ์ถ์ฒ. ์ ์ง๋ฌธ์ด ์์์์ '๋ญ ํ ๊น?'๋ผ๋ ์ง๋ฌธ์ ๋ชจํธํจ์ ๋ณด์ํด์ฃผ๊ธฐ ๋๋ฌธ. ๋ฌด์์ ํด์ผ ํ ์ง ๊ฐ์ด ์์ฌ๋๋ ๊ฐ์ฅ ๊ฐ๋จํ Input-Output ์ ์์ ํด๋ด์ผ๋ก์ ์กฐ๊ธ์ฉ ๊ตฌ์ฒดํ์์ผ๋๊ฐ ์ ์์. '์์ ์ ์ํ ๊ตฌ์ฒดํ'๋ ๋ฐฉ๋ฒ์ ์ฐธ ์ ์ฉํจ. --1002
{{|
.png)
ํ ์คํธ๋ฅผ ์์ฑํ ๋์ '์ด๋ฏธ ์์ฑ๋์ด์๋ ์ ๋ API' ๋ฅผ ์์ํ๋ฉฐ ์์ฑํ๋ค. ์ ๋ง๋ค์ด์ง API๋ ๊ฐ์ ์ผ์ ํ๋๋ผ๋ ์ง์ ํธ์ถํด์ค์ผ ํ๋ ํจ์์ ๊ฐฏ์๊ฐ ์ ๊ณ ์ดํดํ๊ธฐ ํธํ๋ฉฐ '๋ฌด์'์ ํด์ฃผ๋์ง ๊ทธ ๋ฉ์๋๊ฐ ๋งํด์ค๋ค. ์ ๊ฒ ์ฝ๋๋ฅผ ์จ๋ ๋ง์ ์ผ์ ํด์ฃผ๋๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ , ํ ์คํธ๋ก์ ์ปดํจํฐ์ ์ปดํ์ผ๋ฌ์๊ฒ ์ฝ๋์์ฑ์ ์ํด ํด์ผ ํ ์ผ๋ค์ ๋ฌป๊ณ , ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ณ . ๊ทธ๋ฆฌ๊ณ ๊ตฌํํ๊ณ , ๋ค์ ๊ตฌํ๋ ์ฝ๋๋ฅผ Refactoring ํ๋ค.
...ํ๋ต... -TestDrivenDevelopment์์
|}}
1.2. ๊ฐ๋จํ C++ ์์์ TDD ์ฐธ๊ณ ํจ์ ¶
~cpp int gNumTests = 0; int gNumFailures = 0; void Assert(bool condition) { ++gNumTests; if(!condition) { ++gNumFailures; } } #define Assert(cond) AssertImpl(cond, #cond, __LINE__, __FILE__) void AssertImpl( bool condition, const char* condStr, int lineNum, const char* fileName) { ++gNumTests; if(!condition) { ++gNumFailures; printf("file %s', line %d, assert '%s' failed\n", fileName, (int)lineNum, condStr); } } void printTestResult() { printf("%d tests run, %d tests failed\n", (int)gNumTests,(int)gNumFailures); } int main(int argc, char* argv[]) { Assert(1==2); printTestResult(); return 0; }