kenback TDD 3๋ถ
25์ฅ. ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ ํจํด
ํ ์คํธ๋ฅผ ํ๋ค๋ ๊ฒ์ ๋ฌด์์ธ๊ฐ?
๋จผ์ , ํ
์คํธ์ ๋ํ ๋ช
์ฌ์ ์๋ฏธ์ ๋์ฌ์ ์๋ฏธ๋ฅผ ๊ตฌ๋ถํด์ผ ํ๋ค.
ํ
์คํธ๋ฅผ ๊ฐ๊ณ ์๋ค ๋ ๊ฒ์ ์๋ํ ํ
์คํธ์ ๋ช
์ฌ์ ์๋ฏธ๋ฅผ ์์ํ๊ณ , ๋ณํ๋ฅผ ํ
์คํธํ๋ค๋ ๊ฒ์ ์๋์ ์ธ ํ
์คํธ์ ๋์ฌ์ ์๋ฏธ๋ฅผ ์์ํ๋ค.
ํ ์คํธ๋ฅผ ์ธ์ ํด์ผ ํ๋๊ฐ?
ํ ์คํธ ๋์์ด ๋๋ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ง์ ์ ์์ฑํ๋ค.
- ์์ฑ ํผ๋๋ฐฑ ๊ณ ๋ฆฌ(positive feedback loop)
- ์์คํ ์์ ์ด๋ค ํ๋์ ๋ ๋ง์ด ํ๋๋ก ๊ฒฉ๋ คํ๊ฒ ๋๋ ๊ฒ. ์ง์ ๊ฐ์ ์์ ์ฐ๊ฒฐ์ด ์๋ค๋ฉด ์์ฑ ํผ๋๋ฐฑ์ด๋ค.
์คํธ๋ ์ค๋ฅผ ๋ง์ด ๋ฐ์ผ๋ฉด ํ
์คํธ๋ฅผ ์ ์ ๋ ๋ธํ๊ฒ ์ํํ๊ณ , ์๋ฌ๋ ์ ์ ๋ง์์ง๋ค. ์์ฐ์ค๋ฝ๊ฒ ์คํธ๋ ์ค๋ ๋ค์ ๋ง์์ง๋ค.
์ด ๊ณ ๋ฆฌ๋ฅผ ๋น ์ ธ๋์ค๋ ค๋ฉด ๋ค์์ ๊ณ ๋ คํ ์ ์๋ค.
- ์๋ก์ด ์์ ๋์ ํ๊ธฐ
- ๊ธฐ์กด ์์๋ฅผ ๋ฐ๊พธ๊ธฐ
- ํ์ดํ๋ฅผ ๋ฐ๊พธ๊ธฐ
๊ธฐ์กด ์์ ๋ฐ๊พธ๊ธฐ: ์๋ํ ํ ์คํธ
์ด ๊ฒฝ์ฐ์ ํ
์คํธ๋ฅผ ์๋ํ๋ ํ
์คํธ๋ก ๋ฐ๊พธ๋ฉด ๋๋ค.
์๋ํ๋ ํ
์คํธ๊ฐ ์๋ค๋ฉด, ์คํธ๋ ์ค๋ฅผ ๋ฐ๊ธฐ ์์ํ ๋ ํ
์คํธ๋ฅผ ์คํํ ๊ฒ์ด๊ณ , ๋๋ ค์์ ์ง๋ฃจํจ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ํจ๊ณผ๊ฐ ์๋ค.
โ์, ์๋ฌด ๋ฌธ์ ์๊ตฐ. ํ ์คํธ๊ฐ ์ฌ์ ํ ์ด๋ก ๋ง๋์ผ.โ
์คํธ๋ ์ค๋ฅผ ๋ ๋ง์ด ๋ฐ์์๋ก ๋ ๋ง์ ํ ์คํธ๋ฅผ ์ํํ๊ฒ ๋๊ณ , ์์ ์ค์ ์๋ฌ๋ฅผ ๋ผ ์ผ์ ์ค์ด๋ค๋ฉด์ ์คํธ๋ ์ค๋ ์์ฐ์ค๋ฝ๊ฒ ์ค์ด๋ ๋ค. ์ฆ, ๊ฐ๋ฐ์์ ๋ฉํ์ ์ํด์๋ผ๋ ํ ์คํธ ์๋ํ๋ ์ค์ํ๋ค.
ํ์ดํ ๋ฐ๊พธ๊ธฐ: ํ ์คํธ ์ฐ์
ํ
์คํธ๋ฅผ ๋จผ์ ํด์ผ ํ๋ค๋ ๊ท์น์ ๋์
ํ๋ค.
ํ
์คํธ๋ฅผ ๋จผ์ ํ๋ฉด ์คํธ๋ ์ค๋ ์ค๊ณ , ๋ ๋ง์ ํ
์คํธ๋ฅผ ํ๊ฒ ๋๋ค.
ํ ์คํธํ ๋ก์ง์ ์ด๋ป๊ฒ ๊ณ ๋ฅผ ๊ฒ์ธ๊ฐ?
๊ฐ๊ฐ์ ํ ์คํธ๋ ์๋ก ์์ ํ ๋ ๋ฆฝ์ ์ด์ด์ผ ํ๋ค.
์ ๋ถ๋ถ์์ ์คํํ ํ
์คํธ๊ฐ ์คํจํ๊ณ , ๊ทธ ์ํฅ์ผ๋ก ๋ค์ ํ
์คํธ๋ถํฐ ์์คํ
์ด ์์ธก ๋ถ๊ฐ๋ฅํด์ง๋ ๊ฒฝ์ฐ๋ ๊ฝค ๋ง๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ ํ
์คํธ ์ฌ์ด์์ ๋งค๋ฒ ์์คํ
์ ์ฌ๋ํ๋ ๋ฐฉ๋ฒ์ ์จ๋ดค์ง๋ง, ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ๋ค. ์ด๋ฅผ ํตํด ํ
์คํธ๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์ ๋์์ผ๋ก ํ๋ ๊ฒ๋ณด๋ค ์ข ๋ ์์ ์ค์ผ์ผ๋ก ํ๋ ๊ฒ์ด ์ข๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
ํ ์คํธ๋ฅผ ๊ฒฉ๋ฆฌํ๊ธฐ ์ํด์๋ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ์์ ๋จ์๋ก ๋ถ๋ฆฌํ๊ณ ๊ฐ ํ ์คํธ๋ฅผ ์คํํ๊ธฐ ์ํ ํ๊ฒฝ์ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ธํ ํ ์ ์๊ฒ ํด์ผ ํ๋ค. ๊ฒฐ๊ตญ ํ ์คํธ๋ฅผ ๊ฒฉ๋ฆฌํ๋ ์์ ์ด ์์คํ ์ ์์ง๋๋ ๋๊ณ ๊ฒฐํฉ๋๋ ๋ฎ์ ๊ฐ์ฒด๋ก ๊ตฌ์ฑํ ์ ์๋๋ก ํ๋ค.
ํ ์คํธ ๋ชฉ๋ก ์์ฑํ๊ธฐ: ์์ ๋ฒ์ ์กฐ์
๋ฌด์์ ํ ์คํธํด์ผ ํ๋๊ฐ?
๊ตฌํํด์ผ ํ ๊ฒ๋ค์ ๋ํ ํ ์คํธ๋ค์ ์๊ฐํด๋ณธ๋ค.
- ์๊ตฌ์ฌํญ์ ๋ํ ์ฌ์ฉ ์๋ค์ ์ ๋๋ค.
- ํด๋น ์๊ตฌ์ฌํญ์ ๊ดํ ๊ธฐ๋ฅ๋ค์ด ์๋ฌด ์ผ๋ ํ์ง ์๋ ๋ฒ์ ์ผ๋ก ํ ์คํธํ ์ ์๋๋ก ํ ์ผ์ ์ ๋๋ค.
- ํด๋ฆฐ์ฝ๋๋ฅผ ์ํด ๋ฐ๋์ ํด์ผ ํ๋ ๋ฆฌํํ ๋ง ๋ชฉ๋ก์ ์ ๋๋ค.
๋ชจ๋ ํ
์คํธ๋ฅผ ํ ๋ฒ์ ์์ฑํ ์๋ ์์ง๋ง, ๋ง๋ค์ด๋ ํ
์คํธ๋ ๋ฆฌํฉํ ๋ง์ ๋ํ ๊ด์ฑ์ ๊ฐ์ง๊ฒ ๋ง๋ จ์ด๊ณ , ์ด๋ก ๋ง๋๋ฅผ ๋น ๋ฅธ ์์ผ ๋ด์ ๋ณด๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ NO!
ํ๋์ ํ
์คํธ๋ฅผ ํต๊ณผํ๊ฒ ํ๋ ๊ณผ์ ์์ ์๋ก์ด ํ
์คํธ๊ฐ ํ์ํด์ง๋ค. ์ด๋ฅผ ํ ์ผ ๋ชฉ๋ก์ ์ ์ด๋๋ฉด ๋๋ค.
์ ๋๋ก ์๋ํ์ง ์๋ ํ ์คํธ ํ๋๋ฅผ ์ฑ๊ณต์ํค๋ ๊ฒ์ด ์ฝ๋๋ฅผ releaseํ๋ ๊ฒ๋ณด๋ค ์ค์ํ๋ค.
๋จ์ธ ์ฐ์
ํ ์คํธ๋ฅผ ์์ฑํ ๋ ๋จ์ธ๋ถํฐ ์์ฑํ๋ค.
- ์์คํ ์ ๊ฐ๋ฐํ ๋ ์๋ฃ๋ ์์คํ ์ด ์ด๋จ๊ฑฐ๋ผ๊ณ ์๋ ค์ฃผ๋ ์ด์ผ๊ธฐ(user story)๋ถํฐ ์์ฑํ๋ค.
- ํน์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ ๋ ๊ธฐ๋ฅ์ด ์๋ฃ๋๋ฉด ํต๊ณผํ ์ ์๋ ํ ์คํธ๋ถํฐ ์์ฑํ๋ค.
- ํ ์คํธ๋ฅผ ๊ฐ๋ฐํ ๋๋ ์๋ฃ๋๋ฉด ํต๊ณผํด์ผ ํ ๋จ์ธ๋ถํฐ ์์ฑํ๋ค.
๋จ์ธ์ ๋จผ์ ์์ฑํ๋ฉด ์์ ์ ๋จ์ํ๊ฒ ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ์์ผ์ ํตํด ๋ค๋ฅธ ์์คํ ๊ณผ ํต์ ํ๋ ๊ฒ์ ํ ์คํธํ๊ณ ์ ํ๋ค. ํต์ ์ ๋ง์น ํ ์์ผ์ ๋ซํ ์๊ณ ์์ผ์์ โabcโ๋ฅผ ์ฝ์ด์ผ ํ๋ค.
TEST(socketTest, transactionTest){
ASSERT_TRUE(reader.isClosed()); //reader์์ socket์ด๋ค.
ASSERT_EQ("abc", reply.contents()); //reply์์ buffer์ ์กด์ฌ๊ฐ ํ์ํ๋ค.
}
TEST(socketTest, transactionTest){
Socket reader = Socket("localhost", defaultPort()); //์๋ฒ ์ ์ ์ ์ ์๋ฒ๋ฅผ ์ด์ด์ผ ํ๋ค.
Buffer reply = reader.contents();
ASSERT_TRUE(reader.isClosed());
ASSERT_EQ("abc", reply.contents());
}
TEST(socketTest, transactionTest){
Server writer = Server(defaultPort(), "abc");
Socket reader = Socket("localhost", defaultPort()); //์๋ฒ ์ ์ ์ ์ ์๋ฒ๋ฅผ ์ด์ด์ผ ํ๋ค.
Buffer reply = reader.contents();
ASSERT_TRUE(reader.isClosed());
ASSERT_EQ("abc", reply.contents());
}
์์ ๋จ๊ณ๋ก ํผ๋๋ฐฑ์ ๋ฐ์ผ๋ฉฐ ํ ์คํธ์ ์์๋ผ์ธ์ ์์ฑํ ์ ์๋ค.
ํ ์คํธํ ๋ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ๊ฐ?
ํ ์คํธ๋ฅผ ์ฝ์ ๋ ๊ฐ๋ ์ฑ ๋์ ๋ฐ์ดํฐ(๋ช ๋ฐฑํ ๋ฐ์ดํฐ)๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- ๋ฐ์ดํฐ ๊ฐ์ ์ฐ๋ฐํ์ง ๋ง์์ผ ํ๋ค.: ๋ฐ์ดํฐ๋ฅผ ๋ฌด์์๋ก ๋ณ๊ฒฝํ๊ฑฐ๋ ์์์น ๋ชปํ ์ํ๋ก ๋ง๋ค์ง ๋ง์์ผ ํ๋ค.
- ๋ฐ์ดํฐ ๊ฐ์ ์ฐจ์ด๊ฐ ์๋ค๋ฉด ์ด๋ค ์๋ฏธ๊ฐ ์์ด์ผ ํ๋ค.
- 1๊ณผ 2 ์ฌ์ด์ ์ด๋ค ๊ฐ๋ ์ ์ฐจ์ด๊ฐ ์๋ค๋ฉด 1์ ์ฌ์ฉํด์ผ ํ๋ค.
- ์ฌ๋ฌ ์๋ฏธ๋ฅผ ๋ด๊ณ ์๋ ์์๋ฅผ ์ฐ์ง ๋ง์์ผ ํ๋ค.
ํ ์คํธ ๋ฐ์ดํฐ์ ๋ํ ๋์์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
(๋ช ๋ฐฑํ) ๋ฐ์ดํฐ์ ์๋๋ฅผ ์ด๋ป๊ฒ ํํํ ๊ฒ์ธ๊ฐ?
ํ
์คํธ ์์ฒด์ ์์๋๋ ๊ฐ๊ณผ ์ค์ ๊ฐ์ ํฌํจํ๊ณ ์ด ๋์ ๊ด๊ณ๋ฅผ ๋๋ฌ๋ด๊ธฐ ์ํด ๋
ธ๋ ฅํด์ผ ํ๋ค.
ํ
์คํธ๋ฅผ ์์ฑํ ๋๋ ๋จผ ํ๋ ์ฝ๋๋ฅผ ์ฝ์ ๊ฐ๋ฐ์๋ค๋ ์๊ฐํด์ผ ํ๋ค.
๋ค์ ์ฝ๋๋ ์ํ์ ํ์ ๊ฑฐ๋ ์ฝ๋์ด๋ค.
ํ์ ํ๋ ค๊ณ ํ๋๋ฐ ์์๋ฃ๋ 1.5%์ด๊ณ USD์ GBP ํ์จ์ 2:1์ด๋ค.
Bank bank = new Bank();
bank.addRate("USD", "GBP", STANDARD_RATE);
bank.commission(STANDARD_COMMISSION);
Money result = bank.convert(new Note(100, "USD"), "GBP");
ASSERT_EQ(new Note(49.25, "GBP"), result);
$100์ ํ์ ํ๋ฉด 50GBP - 1.5% = 49.25GBP์ด๋ค.
์์๋ฃ๋ ํ์จ๊ฐ์ ๊ฒฝ์ฐ, ๋ ๋ช ๋ฐฑํ ๋ฐ์ดํฐ๋ก ๋งค์ง๋๋ฒ๋ฅผ ์ธ ์๋ ์๋ค.
- ๋งค์ง๋๋ฒ
- ์์๋ฅผ ์ง์ ์ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ์ ํ ๊ธฐํธ์์๋ฅผ ์ ์ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
Bank bank = new Bank();
bank.addRate("USD", "GBP", 2); //STANDARD_RATE
bank.commission(0.015); //STANDARD_COMMISSION
Money result = bank.convert(new Note(100, "USD"), "GBP");
assertEquals(new Note(100 / 2 * (1 - 0.015), "GBP"), result);
์ด ํ
์คํธ์์๋ ์
๋ ฅ๊ฐ๊ณผ ์์๊ฐ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ฝ์ ์ ์๊ณ , ๋๋์
๊ณผ ๊ณฑ์
์ ์ํํ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ๊ฒ์ด๋ผ๋ ๊ฒ์ ์๊ฒ ๋๋ค.
๋จ์ผ ๋ฉ์๋ ๋ฒ์๋ผ๋ฉด, ์ด ๋ช
๋ฐฑํ ๋ฐ์ดํฐ๋ ์ฝ๋์ ๋งค์ง๋๋ฒ๋ฅผ ์ฐ์ง ๋ง๋ผ๋ ๋ด์ฉ์ ๋ํ ์์ธ์ ์ธ ๊ท์น์ผ ์๋ ์๋ค.
ํ์ง๋ง, ์ด๋ฏธ ์ ์๋ ๊ธฐํธ ์์๊ฐ ์๋ค๋ฉด, ๊ตณ์ด ์ ๊ฑฐํ์ง ๋ง๊ณ ์ฌ์ฉํ๋๋ก ํ์.
26์ฅ. ๋นจ๊ฐ ๋ง๋ ํจํด
ํ ์คํธ๋ฅผ ์ธ์ ์ด๋์ ์์ฑํ ๊ฒ์ธ์ง, ํ ์คํธ ์์ฑ์ ์ธ์ ๋ฉ์ถ์ง์ ๋ํ ํจํด์ด๋ค.
์์ ํ ์คํธ
์๋ฌด ์ผ๋ ํ์ง ์๋ ๊ฒฝ์ฐ๋ถํฐ ํ ์คํธํ์.
ํ๋์ ๊ธฐ๋ฅ์ ๋ํ ํ์ค์ ์ธ ํ ์คํธ๋ฅผ ํ๋ ์์ฑํ๋ค๋ฉด ํ๊บผ๋ฒ์ ๋ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ค.
- ์ด ๊ธฐ๋ฅ์ ์ด๋์ ๋๋?
- input์?
- output์?
ํ์ค์ ์ธ ํ ์คํธ๋ฅผ ๋ฐ๋ก ๊ตฌํํ๊ณ ์ ํ๋ค๋ฉด, ๋นจ๊ฐ-์ด๋ก-๋ฆฌํฉํ ๋ง ์ฃผ๊ธฐ๋ ๊ธธ์ด์ง๊ฒ ๋๋ค.
๋ค๊ฐํ ์ถ์๊ธฐ๋ฅผ TDD๋ก ๊ตฌํํ๋ค๊ณ ๊ฐ์ ํ์.
์ด ์ถ์๊ธฐ๋ ๋ค๊ฐํ์ ์
๋ ฅํ๋ฉด, ๋ชจ๋ ๊ผญ์ง์ ์ ์ผ์ ๋น์จ๋ก ์ถ์์ํจ ๋ค๊ฐํ ์ค ๊ฐ์ฅ ์ ๊ฒ ๊ผญ์ง์ ์ ๊ฐ์ง๋ ๋ค๊ฐํ์ ์์ฑํด๋ธ๋ค.
- ์ด๋ค ๋ค๊ฐํ์ ๋ ์ถ์ํ ์ ์๋ค.
- ์ ๋ ฅ์ ๊ฐ๋ฅํ ํ ์ ์ด์ผ ํ๋ค.
Reducer r = new Reducer(new Polygon());
ASSERT_EQ(0, r.result().npoints());
ํ ๋จ๊ณ ํ ์คํธ
๋ชฉ๋ก์์ ๋ค์ ํ ์คํธ๋ฅผ ๊ตฌํํ ๋ ๋ฌด์์ ๊ธฐ์ค์ผ๋ก ์ด๋ค ํ ์คํธ๋ฅผ ๊ตฌํํ ์ง ์ ํํ ๊ฒ์ธ๊ฐ?
๋ปํ์ง ์๊ณ , ๊ตฌํํ ์ ์๋ค๋ ํ์ ์ด ๋๋ ํ ์คํธ๋ฅผ ๋ฝ์ ๊ฒ
์ํฅ์, ํํฅ์์ผ๋ก ์์ฑํ๋ ํ๋ก์ธ์ค๋ TDD๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ค๋ช ํ ์ ์๋ค.
- ์ํฅ์(bottom-up)
- ๋ชจ๋๋ถํฐ ์ฐจ๋ก๋ก ๊ตฌํํ๊ณ ํ ์คํธํ๋ฉด์ ๊ธฐ๋ฅ์ ์ถ๊ฐํด๋๊ฐ๋ ๊ฒ
- ํํฅ์(top-down)
- ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ ๋จ์๋ก ์ชผ๊ฐ์ด ๊ตฌํํด๋๊ฐ๋ ๊ฒ. ์ ์ฒด ์ค๊ณ => ํ์ ๊ธฐ๋ฅ ๊ตฌํ
๋ ๋ฐฉ์ ๋ชจ๋ ํ๋ก๊ทธ๋จ์ด ์๊ฐ์ ๋ฐ๋ผ ์ด๋ป๊ฒ ๋ณํ๋์ง์ ๋ํ ์๊ฐ์ผ ๋ฟ์ด๋ค.
๋ฐฉํฅ์ฑ์ ๊ฐ์ง๋ค๋ฉด,
์๋ ๊ฒ์์ ๋ชจ๋ฅด๋ ๊ฒ์ผ๋ก(known-to-unknown) ๋ฐฉ์์ด ์ ์ฉํ๋ค.
๋งํ์๋ฉด, ์ง์์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ์ ๋ณด๋ ํต์ฐฐ๋ ฅ์ ์ป๊ณ , ๊ทธ๋ก ์ธํด ๊ณ์ํด์ ๋ฐ์ ํ๊ณ ์ฑ์ฅํ๊ฒ ๋๋ค.
์ค๋ช ํ ์คํธ
ํ ์คํธ๋ฅผ ํตํด ์ค๋ช ์ ์์ฒญํ๊ณ , ํ ์คํธ๋ฅผ ํตํด ์ค๋ช ํ์.
TDD๋ฅผ ๋๋ฆฌ ์ฐ์ด๊ฒ ๋ง๋๋ ๋ฐฉ๋ฒ ์ค ํ๋์ผ ์ ์๋ค.
์ฌ๋๋ค์๊ฒ โTDD๋ก ๋ฐ๊ฟ์ ํด๋ด!โ๋ผ๊ณ ๋ฐ์ด๋ถ์ด๋ ๊ฒ๋งํผ TDD๊ฐ ํผ์ง๋ ๊ฒ์ ํ์คํ๊ฒ ๋ง๋ ๊ฒ์ ์๋ค.
TDD์ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ ๋๋ฌ๋ด ์์ฐ์ค๋ฝ๊ฒ ๋ฌธํ๋ก ์ ์ฐฉ์์ผ์ผ ํ๋ค.
โFoo๋ฅผ ์ด๋ ๊ฒ ์ค์ ํ๊ณ , Boo๋ฅผ ์ด๋ ๊ฒ ์ค์ ํ๋ฉด 1์ด ๋์์ผ ํฉ๋๋ค. Foo๊ฐ ์ ๋ ๊ณ , Boo๊ฐ ์ ๋ฌ๋ฉด 2์ ๋๋ค.โ
์ข ๋ ์ถ์์ ์ผ๋ก๋ ๊ฐ๋ฅํ๋ค.
๋๊ตฐ๊ฐ sequence diagram์ ์ค๋ช
ํ๋ ค๊ณ ํ๋ค๋ฉด, ์ด ๋ค์ด์ด๊ทธ๋จ์ ๋ํ๋ ๋ชจ๋ ์์๋ฅผ ํฌํจํ๋ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
ํ์ต ํ ์คํธ
์ธ๋ถ์์ ๋ง๋ ์ํํธ์จ์ด์ ๋ํ ํ ์คํธ๋ฅผ ์์ฑํ ๋, ์ฐ๋ฆฌ๊ฐ ์์ํ ๋๋ก API๊ฐ ์คํ๋๋ค๋ ๊ฒ์ ํ์ธํด์ค ๋งํ ์์ ํ ์คํธ๋ฅผ ๋ง๋ค์ด๋ณด์.
๋ง์ฝ API๋ฅผ ์ ๋๋ก ์ดํดํ๋ค๋ฉด, ํ
์คํธ๋ ๋ฐ๋ก ํต๊ณผํ ๊ฒ์ด๋ค.
๋ํ ํจํค์ง์ ์ ๋ฒ์ ์ด ๋์ค๋ฉด, ์ฐ์ ํ
์คํธ๋ฅผ ์คํํด๋ณด๊ณ , Fail
ํ๋ฉด ์ฑ์ ์คํ์์ผ๋ณผ ํ์๋ ์๋ค.
Record store(์ธ๋ถ ํจํค์ง)์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ์ด๋ฅผ ๋ฐ์์จ๋ค๊ณ ๊ฐ์ ํ์.
TEST(PackageTest, RecordStoreTest){
RecordStore store;
store = RecordStore.openRecordStore("testing", true);
int id = store.addRecord(new unsigned char[2] {5, 6}, 0, 2);
unsigned char* buffer = new unsigned char[2];
ASSERT_EQ(2, store.getRecord(id, buffer, 0));
ASSERT_EQ(5, buffer[0]);
ASSERT_EQ(6, buffer[1]);
}
๋ ๋ค๋ฅธ ํ ์คํธ
ํ์ฌ ๊ตฌํํ๊ณ ์๋ ํ ์คํธ์ ๋ฌด๊ดํ ์์ด๋์ด๊ฐ ๋ ์ค๋ฅธ๋ค๋ฉด, ํ ์ผ ๋ชฉ๋ก์ ์ ์ด๋๊ณ ๋ค์ ์ฃผ์ ๋ก ๋์์ค์.
ํ๊ท ํ ์คํธ(regression test)
- ํ๊ท ํ ์คํธ
- ์ํํธ์จ์ด์ ๋ณ๊ฒฝ ์ฌํญ์ด๋ ์์ ์ฌํญ์ ํ ์คํธํจ
- ๊ธฐ์กด์ ์์ฑ๋ ํ ์คํธ๋ฅผ ์ ํํ๋ค.
- ๋ณ๊ฒฝ๋ ์ํํธ์จ์ด ๋ฒ์ ์ ์ ์ฉํ๋ค.
- ์คํ ๊ฒฐ๊ณผ๋ฅผ ์์ ๊ฒฐ๊ณผ์ ๋น๊ตํ๋ค.
- ๋ณ๊ฒฝ ์ฌํญ์ ์ํด ์ํฅ์ ๋ฐ์ ๊ธฐ๋ฅ๋ค์ ์๋ณํ๊ณ , ํด๋น ๋ถ๋ถ์ ์์ ํ๊ณ ์ถ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ค.
- ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค๊ฐ ์์ํ ๋๋ก ์๋ํ ๋๊น์ง ํ๊ท ํ ์คํธ๋ฅผ ๋ฐ๋ณตํ๋ค.
ํ๊ท ํ ์คํธ์ ๊ฐ์น๋,
- ์ฑ ์ฐจ์์์๋ ์์คํ ์ฌ์ฉ์๋ค์ด ์ด๋ค ๊ฒ์ ๊ธฐ๋ํ๊ณ , ์ด๋ค ๊ฒ์ด ํ์ฌ ์๋ชป๋์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
- ํ์ฌ ๊ฐ์ง๊ณ ์๋ ํ
์คํธ๋ฅผ ๊ฐ์ ํ ์ ์๋ค.
- ๋งค์ฐ ํฐ ์์์ ๋ํ ๊ฒฐํจ ๋ณด๊ณ ์๊ฐ ์๋ค๋ฉด, ์ ์ ๋กค์ค๋ฒ๋ฅผ ํ ์คํธํด์ผ ํ๋ค๋ ๊ฒ์ ๋ฐฐ์ธ ์ ์๋ค.
์์คํ ์ฅ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค๋ฉด ๋ฆฌํฉํ ๋งํด์ผ ํ๋ค.
ํด์
์๋ฌด๊ฒ๋ ๋ชจ๋ฅด๊ฒ ์ผ๋ฉด, ์ผ๋จ ์ข ์ฌ์ด๋ ๋๋ค.
๋ฌผ๋ก ๊ณ์ ์ฌ๊ธฐ๋ง ํ๋ฉด ์๋๊ณ , ๋ฌด์์ ํด์ผ ํ ์ง ๊ณ ๋ฏผํ๋ ์๊ฐ์ด ํ์ํ๋ค๋ ๋ป์ด๋ค.
๋ค์ ํ๊ธฐ
์ง์ง ๋ชจ๋ฅด๊ฒ ์ผ๋ฉด, ์ฝ๋๋ฅผ ๋ค ์ง์ฐ๊ณ ์ฒ์๋ถํฐ ๋ค์ ํ์.
์ธ๊ตฌ๋ ค ์ฑ ์, ์ข์ ์์
์์๋ ์ต๊ณ ๊ธ์ผ๋ก ์จ๋ผ.
์ต์คํธ๋ฆผ ํ๋ก๊ทธ๋๋ฐ์์ ๊ถ์ฅํ๋ ์ฌ๋ฌด์ค ๋ฐฐ์น๋ ํํฐ์
์ด ์๋ ๋์ ๊ณต๊ฐ ๊ฐ์ด๋ฐ์ ํฐ ํ
์ด๋ธ์ ๋๊ณ , ๊ฐ๋ฐ์๋ค์ด ๋๋ฌ ์๋๋ค.
๊ฐ์ธ์ด ์ฌ์ ์ผ๋ก ์ฌ์ฉํ ์ปดํจํฐ๋ ๊ตฌ์์ ๋ฐ๋ก ๋ฐฐ์นํ๋ค.
์ด๋ฌํ ๊ฐ๋ฐ ํ๊ฒฝ์ ํ ๋ด ์์ฌ ์ํต์ ์ํํ๊ฒ ํด์ฃผ๋ฉฐ ์์ฐ์ฑ์ ํฌ๊ฒ ๋์ฌ์ค๋ค.