๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿคท๐Ÿผ‍โ™€๏ธ Etc.../- ๊ธฐํƒ€

[๊ฐœ๋ฐœ์ž ์ฑ…์ฝ๊ธฐ] ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ - ์ผ„ํŠธ ๋ฒก (ํ™”ํ ์˜ˆ์ œ)

by Wonit 2021. 4. 10.

ํ•ด๋‹น ๊ธ€์€ Kent-Beck์˜ ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ By Example ์ด๋ผ๋Š” ์ฑ…์„ ์ฝ๊ณ  ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌ ๋ฐ ํšŒ๊ณ ํ•˜๋Š” ๊ธ€ ์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์‚ฌํ•ญ์€ YES 24 ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ ์—์„œ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ - Test Driven Development By Example (Kent-Beck)

  • ์ธ์‚ฌ์ดํŠธ(insight)
  • ์ง€์€์ด: Kent-Beck
  • ์—ฎ์€์ด: ๊น€์ฐฝ์ค€, ๊ฐ•๊ทœ์—ญ
  • ์ถœ๊ฐ„์ผ: 2014.02.15

TDD ์‹œ์ž‘

  • Red ์‚ฌ์ดํด
  • Green ์‚ฌ์ดํด
  • ์ค‘๋ณต ์ œ๊ฑฐ(๋ฆฌํŒฉํ† ๋ง ์‚ฌ์ดํ‹€)

TDD ์ˆœ์„œ

  1. ๋นจ๊ฐ• : ์‹คํŒจํ•˜๋Š” ์ž‘์€ ํ…Œ์ŠคํŠธ
  2. ์ดˆ๋ก : ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๋Š” ๋‹จ๊ณ„, ์ด๋ฅผ ์œ„ํ•ด์„œ ์•„์ฃผ ๋น„ํšจ์œจ์ ์ด๊ณ  ์“ฐ๋ž˜๊ธฐ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋„ ๋œ๋‹ค.
  3. ๋ฆฌํŒฉํ† ๋ง : ์ดˆ๋ก ๋‹จ๊ณ„์—์„œ ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด ์ƒ์‚ฐํ•ด๋ƒˆ๋˜ ์“ฐ๋ž˜๊ธฐ๋“ค์„ ์ค๊ณ  ์ค‘๋ณต๋“ค์„ ์ œ๊ฑฐํ•˜๋Š” ๋“ฑ ์ด์œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ

Red ์‚ฌ์ดํด

public void testMultiplication() {
    Dollar five = Dollar(5);
    five.times(2);
    assertEquals(10, five.amount);
}

๋ฅผ ๋งŒ๋“ค์ž.

๊ทธ๋Ÿผ ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.
์ปดํŒŒ์ผ ์กฐ์ฐจ ์•ˆ๋œ๋‹ค.
์šฐ๋ฆฌ๋Š” Green ์‚ฌ์ดํด๋กœ ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์šฐ์„  ์ปดํŒŒ์ผ์ด ๋˜๊ฒŒ ํ•ด์•ผํ•œ๋‹ค.

Red ๋‹จ๊ณ„์—์„œ๋Š” ๊ฐ€์žฅ ์šฐ์„ ์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์„๊นŒ๋ฅผ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ƒฅ ์ผ๋‹จ ์‹คํ–‰๋งŒ ๋˜๋ฉด ๋œ๋‹ค. ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์งœ๋ ค๊ณ  ํž˜์“ฐ์ง€ ๋ง์ž

๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ 4๊ฐ€์ง€ ์กฐ๊ฑด

  1. Dollar ํด๋ž˜์Šค ์ƒ์„ฑ
  2. Dollar ํด๋ž˜์Šค์— ์ƒ์„ฑ์ž ์ถ”๊ฐ€
  3. times ๋ฉ”์„œ๋“œ ์ƒ์„ฑ
  4. 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
  }
}

๋Œ“๊ธ€