ํด๋น ๊ธ์ Kent-Beck์ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ By Example ์ด๋ผ๋ ์ฑ ์ ์ฝ๊ณ ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌ ๋ฐ ํ๊ณ ํ๋ ๊ธ ์ ๋๋ค. ์์ธํ ์ฌํญ์ YES 24 ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ ์์ ํ์ธํด์ฃผ์ธ์.
ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ - Test Driven Development By Example (Kent-Beck)
- ์ธ์ฌ์ดํธ(insight)
- ์ง์์ด: Kent-Beck
- ์ฎ์์ด: ๊น์ฐฝ์ค, ๊ฐ๊ท์ญ
- ์ถ๊ฐ์ผ: 2014.02.15
TDD ์์
- Red ์ฌ์ดํด
- Green ์ฌ์ดํด
- ์ค๋ณต ์ ๊ฑฐ(๋ฆฌํฉํ ๋ง ์ฌ์ดํ)
TDD ์์
- ๋นจ๊ฐ : ์คํจํ๋ ์์ ํ ์คํธ
- ์ด๋ก : ํ ์คํธ๊ฐ ํต๊ณผํ๋ ๋จ๊ณ, ์ด๋ฅผ ์ํด์ ์์ฃผ ๋นํจ์จ์ ์ด๊ณ ์ฐ๋๊ธฐ๊ฐ์ ์ฝ๋๋ฅผ ๋ง๋ค์ด๋ ๋๋ค.
- ๋ฆฌํฉํ ๋ง : ์ด๋ก ๋จ๊ณ์์ ํ ์คํธ๊ฐ ํต๊ณผํ๊ฒ ํ๊ธฐ์ํด ์์ฐํด๋๋ ์ฐ๋๊ธฐ๋ค์ ์ค๊ณ ์ค๋ณต๋ค์ ์ ๊ฑฐํ๋ ๋ฑ ์ด์ ์ฝ๋๋ฅผ ์์ฑ
Red ์ฌ์ดํด
public void testMultiplication() {
Dollar five = Dollar(5);
five.times(2);
assertEquals(10, five.amount);
}
๋ฅผ ๋ง๋ค์.
๊ทธ๋ผ ์ค๋ฅ๊ฐ ๋๋ค.
์ปดํ์ผ ์กฐ์ฐจ ์๋๋ค.
์ฐ๋ฆฌ๋ Green ์ฌ์ดํด๋ก ๊ฐ๊ธฐ ์ํด์ ์ฐ์ ์ปดํ์ผ์ด ๋๊ฒ ํด์ผํ๋ค.
Red ๋จ๊ณ์์๋ ๊ฐ์ฅ ์ฐ์ ์ ์ผ๋ก ์ด๋ป๊ฒ ํ๋ฉด ํ ์คํธ๋ฅผ ํต๊ณผํ ์ ์์๊น๋ฅผ ์๊ฐํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฅ ์ผ๋จ ์คํ๋ง ๋๋ฉด ๋๋ค. ์ข์ ์ฝ๋๋ฅผ ์ง๋ ค๊ณ ํ์ฐ์ง ๋ง์
๊ทธ๋ฌ๊ธฐ ์ํด์ ํ์ํ 4๊ฐ์ง ์กฐ๊ฑด
- Dollar ํด๋์ค ์์ฑ
- Dollar ํด๋์ค์ ์์ฑ์ ์ถ๊ฐ
- times ๋ฉ์๋ ์์ฑ
- amount ํ๋ ์์ฑ
์ด์ ์ 4๊ฐ์ง ๊ฒ๋ค์ ์ํํด์ ๋นจ๋ฆฌ Red ์ฌ์ดํด์ ๋ฒ์ด๋์.
Green ์ฌ์ดํด
์์ ๋ดค๋ 4๊ฐ์ง ๊ฒ๋ค์ ์ฐจ๋ก๋๋ก ์ํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋๋ค.
public class Test {
public void testMultiplication() {
Test five = Dollar(5);
five.times(2);
assertEquals(10, five.amount);
}
}
class Dollar {
int amount;
Dollar(int amount) { }
void times(int multiplier){}
}
์ด๋ ๊ฒ ํ๋ฉด ์ฐ์ ๊ธํ ๋ถ์ ๊ป๋ค.
ํ์ง๋ง Junit์ AssertEquals๊ฐ ๊ธฐ๋ํ๋ ๊ฐ์ 10์ธ๋ฐ, ์ฐ๋ฆฌ๋ int amount
์ ๋ํด์ ์๋ฌด ๊ฐ๋ ๋ฃ์ด์ฃผ์ง ์์์ผ๋ฏ๋ก ์คํจํ๋ค.
์ฌ๊ธฐ์๋ ์ฑ๊ณตํ๊ธฐ ์ํ ์ฐ๋๊ธฐ๋ฅผ ์ง์ด ๋ฃ์ผ๋ฉด
class Dollar {
int amount = 10;
Dollar(int amount) {};
void times(int multiplier){}
}
๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ ๊ฒฐ๊ตญ ๋์ํ๋ ์ฝ๋๊ฐ ๋๋ค.
์ด์ Red ์ฌ์ดํด์ ๋ฒ์ด๋ ๊ฒ
์ค๋ณต ์ ๊ฑฐ
์ค๋ณต์ด๋ผ ํจ์ ์ค์ ๋ก ์ฝ๋๊ฐ ์ค๋ณต๋๋ ๊ฒฝ์ฐ๋ ์กด์ฌํ์ง๋ง, ๋ ผ๋ฆฌ์ ์ธ ์ค๋ณต๋ ์กด์ฌํ๋ค.
์ฌ๊ธฐ์๋ 10์ด๋ค.
์๋กญ๊ฒ ๊ณ์ ํด๋์ค ๋ณ์๋ฅผ ์ถ๊ฐํด๋ ์ค๋ 10์ด๋ผ๋ ์๊ฐ ์ค๋ณต๋ ๊ฒ์ด๋ค.
์ค๋ณต์ ์ ๊ฑฐํ๊ธฐ ์ํด์ amount๊ฐ ์ด๋ป๊ฒ 10์ด๋ผ๋ ์๊ฐ ๋์๋์ง ์๊ฐํด๋ณด์.
- amount * times;
class Dollar {
int amount;
Dollar(int amount) {
this.amount = amount;
};
void times(int multiplier){
amount *= multiplier
}
}
๋๊ธ