E D R , A S I H C RSS

Test Driven Development

1. TDD

1.1. TDD๋ฅผ ํ•˜๋ฉด์„œ ์–ธ์ œ ์ƒ๊ฐ์„ ๋งŽ์ด ํ•ด์•ผํ•˜๋Š”์ง€?

ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ์ธ๊ฐ€? ํ…Œ์ŠคํŠธ์— ๋งž๊ฒŒ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ์ธ๊ฐ€? --Leonardong
์‚ฌ๋žŒ๋งˆ๋‹ค ๋‹ค๋ฅผ๊ฒƒ ๊ฐ™๊ธด ํ•˜์ง€๋งŒ, ๋‚˜์˜ ๊ฒฝ์šฐ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „ TODO List ๋ฅผ ์ž‘์„ฑํ• ๋•Œ ๊ฐ€์žฅ ๊ณ ๋ฏผ์„ ํ•˜๊ณ  ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค. ๋ญ˜ ๋งŒ๋“ค๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ๋Š” ๋„๋Œ€์ฒด '๋ญ˜ ํ•ด์•ผ ํ• ์ง€, ์–ด๋–ค ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋Œ€ํ•ด์•ผ ํ• ์ง€'๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ. :) ํ•œํŽธ, ๋งŒ์ผ TODO ๋ฆฌ์ŠคํŠธ ์ž‘์„ฑ์‹œ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์ง€์ฒด๋œ๋‹ค ์‹ถ์œผ๋ฉด ๋นจ๋ฆฌ '์–ด๋–ค ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋Œ€ํ•ด์•ผ ํ•˜๋‚˜(Test ๋””์ž์ธ)' ์ด๋ž€ ์งˆ๋ฌธ์„ ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๋Š” ๋ฐฉ๋ฒ•์„ ์ถ”์ฒœ. ์ € ์งˆ๋ฌธ์ด ์•ž์—์„œ์˜ '๋ญ˜ ํ• ๊นŒ?'๋ผ๋Š” ์งˆ๋ฌธ์˜ ๋ชจํ˜ธํ•จ์„ ๋ณด์™„ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ. ๋ฌด์—‡์„ ํ•ด์•ผ ํ• ์ง€ ๊ฐ์ด ์•ˆ์˜ฌ๋•Œ๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ Input-Output ์„ ์„œ์ˆ ํ•ด๋ด„์œผ๋กœ์„œ ์กฐ๊ธˆ์”ฉ ๊ตฌ์ฒดํ™”์‹œ์ผœ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Œ. '์˜ˆ์ œ์— ์˜ํ•œ ๊ตฌ์ฒดํ™”'๋ž€ ๋ฐฉ๋ฒ•์€ ์ฐธ ์œ ์šฉํ•จ. --1002
{{|
...์ „๋žต...
ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ• ๋•Œ์—” '์ด๋ฏธ ์™„์„ฑ๋˜์–ด์žˆ๋Š” ์ž˜ ๋œ 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;
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:12
Processing time 0.0046 sec