๐Ÿงช TDD๋ž€

Test Driven Development : ๋ง๊ทธ๋Œ€๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ์ด๋Œ์–ด ๋‚˜๊ฐ€๋Š” ๊ฐœ๋ฐœ์„ ์˜๋ฏธํ•œ๋‹ค.

๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๊ธฐ ์•ž์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ๋งŒ๋“ค๊ฑฐ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ๋“ค์„ ๊ตฌํ˜„ํ•œ๋‹ค.

๐Ÿ“’ ์ฐธ๊ณ ๊ธ€

[Agile] TDD(ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ)๋ž€

[๋ฒˆ์—ญ]์‰ฌ์šด ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ๊ณผ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ 5๋‹จ๊ณ„ ๋ฐฉ๋ฒ•๋ก 

โ“ TDD๋Š” ์–ธ์ œ ํ•ด์•ผํ• ๊นŒ?

์ฒ˜์Œํ•ด๋ณด๋Š” ํ”„๋กœ๊ทธ๋žจ ์ฃผ์ œ์ผ ๋•Œ(๋‚˜์˜ ๋ถˆํ™•์‹ค์„ฑ)

๊ณ ๊ฐ ์š”๊ตฌ์กฐ๊ฑด์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์ธ ๊ฒฝ์šฐ(์™ธ๋ถ€์ ์ธ ๋ถˆํ™•์‹ค์„ฑ)

์ฆ‰ ๋ถˆํ™•์‹ค์„ฑ์ด ๋†’์œผ๋ฉด ํ…Œ์ŠคํŠธ๋ฅผ ์ง ๋‹ค.

๊ฒฐ๊ณผ๊ฐ€ ๋ช…ํ™•ํ•˜๋‹ค๋ฉด TDD๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š๋Š”๊ฒŒ ์ข‹๋‹ค.

๐Ÿคฉ TDD๋ฅผ ์ž˜ํ•˜๋Š” ๋ฒ•

  1. ๋„๊ตฌ๋‚˜ ๊ทœ์น™์— ์ง‘์ฐฉํ•˜์ง€ ๋ง์•„๋ผ(TDD๋Š” ์–ด๋–ค ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋‹ค.)
  2. ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ ์‘์ ์œผ๋กœ ์ง„ํ™”์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋ผ
    1. ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ํ”ผ๋“œ๋ฐฑ์„ ๋” ๋งŽ์ด ๋ฐ›์„๊นŒ๋ฅผ ๊ณ„์†ํ•ด์„œ ๊ณ ๋ฏผํ•ด๋ณด๋ผ
    2. ํ…Œ์ŠคํŠธ ์ž์ฒด๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ ์™„๋ฒฝํ•  ์ˆ˜ ์—†๋‹ค!
    3. ์ƒํ™ฉ์— ๋งž๊ฒŒ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐ€์ž

๐Ÿง  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž˜ ์งœ๋Š” ์‚ฌ๊ณ ๋ฒ•

๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฐ•๋„ ์ธก์ •์ด๋ผ๋Š” ์˜ˆ๋ฅผ ํ†ตํ•ด ๊ณผ์ •์„ ์‚ดํŽด๋ณด์ž

1. ์ž…๋ ฅ ์ถœ๋ ฅ ๊ฒฐ์ •ํ•˜๊ธฐ

๊ตฌํ˜„์„ ๊ณ ๋ คํ•˜๊ธฐ ์ „์— ์ž…์ถœ๋ ฅ๋ถ€ํ„ฐ ์ƒ๊ฐํ•ด๋ณด์ž.

  • ์ž…๋ ฅ๊ฐ’: ๋น„๋ฐ€๋ฒˆํ˜ธ
  • ์ถœ๋ ฅ๊ฐ’: Boolean(๊ฐ•๋„๊ฐ€ ์„ธ๋ฉด true ์•„๋‹ˆ๋ฉด false)

2. ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ์„ ํƒํ•˜๊ธฐ

ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฐ˜ํ™˜๊ฐ’์„ ์ •์˜ํ•œ๋‹ค.

var strong = isStrongPassword('password string goes here');

3. ๊ธฐ๋Šฅ์ƒ ์•„์ฃผ ์ž‘์€ ํ•˜๋‚˜์˜ ๊ด€์ ์œผ๋กœ ํŒ๋‹จํ•˜๊ธฐ

๋ชฉํ‘œ์— ์•„์ฃผ ์กฐ๊ธˆ ๋‹ค๊ฐ€๊ฐ€๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ, ์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ๋™์ž‘์— ์ง‘์ค‘ํ•˜๋ผ.

๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์ตœ๋Œ€ํ•œ ์‹ ๊ฒฝ์“ฐ์ง€ ๋ง๊ณ  ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€์—๋งŒ ์ง‘์ค‘ํ•˜๋ผ.

๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฐ•๋„๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ํŠน์ˆ˜๋ฌธ์ž, ์ˆซ์ž, ๊ธธ์ด, ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•œ ๊ทœ์น™๋“ค์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ƒ๊ฐํ•˜๋Š” ๊ฑด ๋‹น์—ฐํžˆ ์–ด๋ ต๋‹ค!

๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฐ•๋„์— ๊ด€ํ•ด ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๊ทœ์น™์€ ๋นˆ ๋ฌธ์ž์—ด์ด๋‹ค. ์ด๊ฑด ๋งค์šฐ ์‰ฝ๋‹ค

๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด ์ถœ๋ ฅ๊ฐ’์€ ์–ธ์ œ๋‚˜ false์—ฌ์•ผ ํ•œ๋‹ค.

4. ํ…Œ์ŠคํŠธ ๊ตฌํ˜„

ํ•จ์ˆ˜์˜ ํ•œ์ค„ ํ•œ์ค„์„ ๋ชจ๋ฅธ์ฑ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋งŒ์„ ์ž‘์„ฑํ•ด๋ณด์ž.

describe('isPasswordStrong', function () {
  it('should give negative result for empty string', function () {
    var password = '';
    var result = isPasswordStrong(password);
    expect(result).to.be.false;
  });
});

5. ์ฝ”๋“œ ๊ตฌํ˜„

์ด์ œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋งŒ ์ž‘์„ฑํ•œ๋‹ค.

function isPasswordStrong(password) {
  if (!password) {
    return false;
  }
}

๊ณ„์†ํ•ด์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฐ•๋„ ์ธก์ • ํ•จ์ˆ˜๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด 3๋ฒˆ๋ถ€ํ„ฐ 5๋ฒˆ๊นŒ์ง€์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ์ž‘์€ ์ ˆ์ฐจ๋ฅผ ๋ฐ˜๋ณตํ•˜๋‹ค๋ณด๋ฉด ๊ฒฐ๊ตญ์—๋Š” ์ข‹์€ ๊ฒฐ๊ณผ์— ์ด๋ฅผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

ํ”„๋กœ์ ํŠธ ์ ์šฉ ๊ฐ€๋Šฅ ์ง€์ 

๋‹ค ์ ์šฉํ•˜๊ธฐ ํž˜๋“ค๊ฒƒ ๊ฐ™๊ณ  ์ผ๋‹จ ์ผ๋ถ€๋ถ„๋งŒ TDDํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด์„œ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ๊ฑด ์–ด๋–จ๊นŒ?

  • Form Validation Func
  • Login Validation Func