🌈

12. TDD

TDDλž€?

TDDλŠ” Test Driven Development의 μ•½μžμž…λ‹ˆλ‹€.
ν…ŒμŠ€νŠΈ 주도 개발 즉, ν…ŒμŠ€νŠΈλ₯Ό ν†΅ν•œ κΈ°λŠ₯의 κ΅¬ν˜„μ΄λΌ ν‘œν˜„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μš°λ¦¬κ°€ 이번 μ‹œκ°„μ— ν•™μŠ΅ν•˜κ²Œλ  ν…Œν¬λ‹‰μ€ Unit Test(λ‹¨μœ„ν…ŒμŠ€νŠΈ) μž…λ‹ˆλ‹€.
Β 

Unit Testλž€?

  • νŠΉμ • μ‘°κ±΄μ—μ„œ ν•¨μˆ˜(Unit)κ°€ μ–΄λ–»κ²Œ μž‘λ™ν•΄μ•Ό ν•˜λŠ”μ§€ μ •μ˜ν•˜κ³ , κ·ΈλŸ¬ν•œ μ •μ˜λŒ€λ‘œ ν•¨μˆ˜κ°€ 잘 μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” λ°©λ²•λ‘ μž…λ‹ˆλ‹€.
Β 
μš°λ¦¬κ°€ μ‚¬μš©ν•  TDD λΌμ΄λΈŒλŸ¬λ¦¬λŠ” Jasmine μž…λ‹ˆλ‹€ (https://jasmine.github.io/)
Β 

TDD 의 단계

TDD μ—μ„œλŠ” 코딩을 ν• λ•Œ κΈ°λŠ₯을 λ°”λ‘œ κ°œλ°œν•˜μ§€ μ•Šκ³  TDD λΌλŠ” 말 κ·ΈλŒ€λ‘œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ¨Όμ € μž‘μ„±ν•©λ‹ˆλ‹€. μ΄λ•Œ ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” λ‹€μŒκ³Ό 같은 단계λ₯Ό λ¨Όμ € 거치게 λ©λ‹ˆλ‹€.
  1. 적색 단계 : μ„±κ³΅ν•˜κΈ° μœ„ν•΄ ν…ŒμŠ€νŠΈμ— μ‹€νŒ¨ν•˜λŠ” 단계
  1. 녹색 단계 : ν…ŒμŠ€νŠΈμ— μ„±κ³΅ν•œ 단계
  1. λ¦¬νŒ©ν„° 단계 : ν…ŒμŠ€νŠΈμ— μ„±κ³΅ν•œ μ½”λ“œλ₯Ό 기반으둜 μ½”λ“œμ˜ ν’ˆμ§ˆμ„ λ†’μ΄λŠ” 단계 (refactoring)
Β 
μœ„λ‹ˆλΈŒμœ„λ‹ˆλΈŒ
μœ„λ‹ˆλΈŒ
TDDλŠ” 이 μ„Έ 가지 λ‹¨κ³„μ˜ λŠμž„μ—†λŠ” 반볡이라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Β 
Β 

TDD μ‹€μŠ΅

  1. ν™˜κ²½ ꡬ성은 κ°„λ‹¨ν•˜κ²Œ μŠ€νƒ λ“œμ–Όλ‘  방식을 μ΄μš©ν•©λ‹ˆλ‹€. (https://github.com/jasmine/jasmine/releases )
  1. κ°„λ‹¨ν•œ ν•¨μˆ˜λ₯Ό ν…ŒμŠ€νŠΈ ν•΄λ΄…λ‹ˆλ‹€.
  1. 객체지ν–₯적 μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜μ—¬ TDD ν•΄λ΄…λ‹ˆλ‹€.
Β 
Β 

κ²°λ‘ 

TDD의 μž₯점

  1. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 인터프리터 μ–Έμ–΄. 컴파일러의 역할을 ν…ŒμŠ€νŠΈλ₯Ό 톡해 λŒ€μ‹  μˆ˜ν–‰ν•˜μ—¬ κΈ°λŠ₯의 ꡬ동을 보μž₯ν•©λ‹ˆλ‹€. μ΄λŠ” 곧 μ½”λ“œλ₯Ό μ•ˆμ •μ μ΄κ³  κ²¬κ³ ν•˜κ²Œ λ§Œλ“€μ–΄ μ€λ‹ˆλ‹€.
  1. κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ” κΈ°λŠ₯에 λŒ€ν•œ 높은 뢄석을 μš”κ΅¬ν•˜κΈ° λ•Œλ¬Έμ— μ„œλΉ„μŠ€μ— λŒ€ν•œ 이해도가 μƒμŠΉν•˜κ³  ν’ˆμ§ˆμ„ μš°μ„ ν•˜λŠ” 사고λ₯Ό ν•˜κ²Œλ©λ‹ˆλ‹€.
Β 

TDDλ₯Ό μ‚¬μš©ν•  λ•Œ μ£Όμ˜ν•΄μ•Όν•  점

  1. ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ”°λ‘œ μž‘μ„±ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μ‹œκ°„μ΄ 더 λ“€μ–΄κ°€κ³  μ΄λŠ” 곧 업무에 λŒ€ν•œ λΆ€λ‹΄μœΌλ‘œ λ‹€κ°€μ˜΅λ‹ˆλ‹€. λ•Œλ¬Έμ— ν”„λ‘œμ νŠΈκ°€ κΈ‰λ°•ν•˜λ‹€λ©΄ TDD λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 편이 μ’‹μŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈμ˜ 성격에 따라 μ‹ μ€‘νžˆ νŒλ‹¨ν•΄μ•Όν•©λ‹ˆλ‹€.
  1. TDD κ°€ λͺ¨λ“  μ˜ˆμ™Έ 상황을 ν•΄κ²°ν•΄μ£Όμ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. κ²°κ΅­ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” μ‚¬λžŒμ΄ κ³ λ €ν•˜μ§€ μ•Šμ€ 상황은 ν…ŒμŠ€νŠΈ μ½”λ“œλ„ 놓칠 수 있기 λ•Œλ¬Έμ— ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν–ˆλ‹€κ³  ν•΄μ„œ 방심할 μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” κ²¬κ³ ν•˜κ³  μ•ˆμ •μ μΈ μ½”λ“œλ₯Ό 지ν–₯ν•˜λŠ” 것이지 κ²°μ½” μ™„λ²½ν•˜μ§„ μ•ŠμŠ΅λ‹ˆλ‹€.