Aseembled by GimunLee (2020-01-13)
Microsoft, IBM
TDDλ₯Ό λμ ν μννΈμ¨μ΄λ μ½ 15~35% μ λμ κ°λ°μκ° μ¦κ°, κ²°ν¨μ¨(λ²κ·Έ)μ μ½ 40~90% μ λ μ€μ΄λ€μλ€.
ν μ€νΈλ₯Ό ν΅ν κ³ νμ§ ν보λ μννΈμ¨μ΄ κ°λ°μ μμ΄ λ§€μ° μ€μν νλμ λλ€. νΉν, λ€λ₯Έ ν μ€νΈμ λΉν΄ μ μ λΉμ©μΌλ‘ μνν μ μλ λ¨μ ν μ€νΈλ μννΈμ¨μ΄μ νμ§μ ν₯μμν€λ λ° μ€μν μν μ ν©λλ€. κ°λ° μ΄κΈ°λΆν° μ μ©νμ¬ λΉ λ₯΄κ² μν κ²°κ³Όλ₯Ό νμΈν¨μΌλ‘μ¨ κ°λ°μμ μμ°μ±μ λμ΄λ λ° ν¨κ³Όμ μ΄κΈ° λλ¬Έμ λλ€. ν μ€νΈ μ£Όλ κ°λ°(Test Driven Development) λ°©μλ λ¨μ ν μ€νΈλ₯Ό νμ©νμ¬ λ³΄λ€ λμ μμ€μ μ½λ νμ§μ ν보νλ €λ κ°λ° λ°©λ² μ€ νλμ λλ€.
TDDλ λ°λ³΅ ν
μ€νΈλ₯Ό μ΄μ©ν μννΈμ¨μ΄ κ°λ°λ²μΌλ‘, μμ λ¨μμ ν
μ€νΈ μΌμ΄μ€λ₯Ό μμ±νκ³ μ΄λ₯Ό ν΅κ³Όνλ μ½λλ₯Ό μΆκ°νλ λ¨κ³λ₯Ό λ°λ³΅νμ¬ μννΈμ¨μ΄λ₯Ό ꡬνν©λλ€. TDDμ ν΅μ¬μ μΈ λͺ©νλ μλνλ κΉλν μ½λ(Clean code that works
) μ
λλ€. TDDμ μ¬μ© μ΄μ μ λν΄ μκΈ° μν΄, μΌλ°μ μΈ κ°λ° λ°©λ²μ λ¬Έμ μ μ μ΄ν΄λ³΄λ©΄μ μμΈν μμ보λλ‘ νκ² μ΅λλ€.
- μλΉμμ μꡬμ¬νμ΄ μ²μλΆν° λͺ ννμ§ μμ μ μλ€. λ°λΌμ μ²μλΆν° μλ²½ν μ€κ³λ μ΄λ ΅λ€.
- μ€κ³ β ꡬν μ μ§ννλ©΄μ μ€μ μμ€μ½λμ μ€κ³ κ° κ°λ±μ΄ μκΈΈ μ μλ€.
- ν κ³³μ μμ μ΄ λ€λ₯Έ κ³³μ λ―ΈμΉλ μν₯μ νμΈ λ° λ€λ₯Έ κΈ°λ₯μ μ μ λμμ 보μ₯νκΈ° μ΄λ ΅λ€.
μΌλ°μ μΈ κ°λ° λ°©λ²μ μꡬ μ¬νμ κΈ°λ°μΌλ‘ λͺ¨λ λ±μ μ€κ³νμ¬ κ°λ°ν©λλ€. κ·Έ λ€μ λͺ¨λμ΄ μ λλ‘ κ°λ°λμλμ§ ν μ€νΈλ₯Ό νκ² λ©λλ€. κ°λ°λ μ½λλ₯Ό ν μ€νΈνκΈ° μν΄μλ μμλλ κΈ°λκ°κ³Ό λΉκ΅ νκ±°λ ν μ€νΈ λͺ¨λμ μΆκ°λ‘ κ°λ°νμ¬ ν μ€νΈ ν μ μμ΅λλ€. νμ§λ§ TTDλ₯Ό κΈ°λ°μΌλ‘ κ°λ°μ νλ κ³Όμ μμλ λ€μ κ³Όμ μ κ±°μ³μ κ°λ°νκ² λ©λλ€.
TDDλ₯Ό κΈ°λ°μΌλ‘ κ°λ°ν κ²½μ°, κ°μ₯ λ¨Όμ λͺ¨λ κΈ°λ₯μ ꡬννλ κ²μ΄ μλλΌ μ΅μνμ κΈ°λ₯μ λ¨Όμ ꡬνν©λλ€. μλ₯Ό λ€μ΄ ν¨μμ νλ‘ν νμ νν λ±μΌλ‘ ꡬνν©λλ€. κ·Έλ¦¬κ³ ν μ€νΈ μΌμ΄μ€κ° μ€νλλλ‘ κ΅¬ν ν μ€νν©λλ€. κΈ°λ₯μ΄ κ΅¬νλμ§ μμκΈ°μ ν μ€νΈ μΌμ΄μ€λ₯Ό μ€ννλ©΄ λΉμ°ν ν μ€νΈ μΌμ΄μ€λ μ€ν¨λκ² λ©λλ€. λ€μμΌλ‘ μ€μ κΈ°λ₯μ ꡬν ν ν μ€νΈ μΌμ΄μ€κ° ν΅κ³Ό λλ κ²μ νμΈν©λλ€.
TDD κ°λ°λ°©λ²μμ κ°μ₯ μ€μν κ²μ΄ κΈ°λ₯ ꡬνμ μ μΌ λ§μ§λ§μ νλ€λ μ μ λλ€. κΈ°λ₯ ꡬνμ μ μΌ λ§μ§λ§μ νμ¬ ν μ€νΈ μΌμ΄μ€κ° ν΅κ³Ό λλ κ²μ νμΈνλ©΄ κ°λ°μ ν₯λ―Έλ₯Ό μ μ§ μν¬ μ μκΈ° λλ¬Έμ λλ€. κ·Έ λ€μ νμνλ©΄ κ°λ°λ μ½λλ₯Ό κΈ°λ°μΌλ‘ 리νν λ§(Refactoring) κ³Όμ μ μ§νν©λλ€.
μΆκ°λ‘ Robert C. Martin μ΄ μ μν TDD μμΉμ λλ€.
- μ€ν¨νλ ν μ€νΈλ₯Ό μμ±νκΈ° μ μλ μ λλ‘ μμ€μ½λλ₯Ό μμ±νμ§ μλλ€.
- μ€ν¨νλ ν μ€νΈ μ½λλ₯Ό ν λ²μ νλ μ΄μ μμ±νμ§ μλλ€.
- νμ¬ μ€ν¨νκ³ μλ ν μ€νΈλ₯Ό ν΅κ³ΌνκΈ°μ μΆ©λΆν μ λλ₯Ό λμ΄μλ μμ€μ½λλ₯Ό μμ±νμ§ μλλ€.
μ΄ μΈ κ°μ§ μμΉμ λλ Έ μ£ΌκΈ° λΌ λΆλ¦¬λλ°, κ·Έ μ΄μ λ μ½λμ ν λ¨μ κ°λ° λ° ν μ€νΈκ° μ΄λ£¨μ΄μ§κΈ° λλ¬Έμ λλ€. μ΄λ, μ΄ λ¨μμ λ°λ³΅μ μΈ ν μ€νΈ μ£ΌκΈ°κ° λ°μνκ² λλλ° μ΄ μ£ΌκΈ°λ₯Ό TDDμ λλ Έ μ£ΌκΈ° λΌ λΆλ¦ λλ€. Kent Beck κ³Ό Robert C. Martin μ ν μ€νΈ μ½λ μμ±μ μμ΄ λ€μν μ€νμΌμ΄ μμ§λ§, μμ κ°μ μΈ κ°μ§ μμΉμ λ²μ΄λ κ°λ° μ€νμΌμ κΈκΈ°μνκ³ μμ΅λλ€.
μ΄ λ¨μμ λ°μλλ λλ Έ μ£ΌκΈ° κ° μλ€λ©΄ λΆ λ¨μμ λ°μλλ RGR μ£ΌκΈ° κ° μμ΅λλ€. RGR μ£ΌκΈ°λ λ¨μ ν μ€νΈ(Unit Test) λ§λ€ λ°μλλ©°, RGR μ£ΌκΈ°μ κ·μΉμ λ€μκ³Ό κ°μ΅λλ€.
RED
: μ€ν¨νλ ν μ€νΈ μ½λ λ§λ€κΈ°GREEN
: ν μ€νΈκ° ν΅κ³Όνλλ‘ κ°λ₯ν 빨리 μ½λ μμ±νκΈ°REFACTOR
: ν΅κ³Όλ ν μ€νΈ μ½λλ₯Ό 리ν©ν λ§νκΈ°
μΈ λ¨κ³ μ€ RED
, GREEN
μ κ°λ₯ν 빨리 μλ£νλ κ²μ΄ μμΉμ
λλ€. κ·Έλμ TDD λ°©λ²λ‘ μΌλ‘ κ°λ°μ ν λλ μ΅μνμ μ½λλ₯Ό μμ±νκ² λ©λλ€. RED
μμ μ€ν¨νλ ν
μ€νΈ μ½λλ λ΄κ° νκ³ μ νλ λ¬Έμ λ₯Ό μ½λ ννλ‘ ννν κ²°κ³Όλ¬Ό μ
λλ€. κ²½μ°μ λ°λΌμ μΆκ°νκ³ μ νλ κΈ°λ₯μ΄ λ μλ μκ³ , κ³ μΉκ³ μ νλ λ²κ·Έκ° λ μλ μμ΅λλ€. κ·Έλμ μ€ν¨νλ ν
μ€νΈ μ½λλ λ¬Έμ λ₯Ό ν΄κ²°νλ λ° μ€ν¨ν κ²μ΄ μλ, λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν 첫 λ²μ§Έ κ³Όμ μΌλ‘ λ³Ό μ μμ΅λλ€. κ·Έλ¦¬κ³ κ°λ₯ν 빨리 μ½λλ₯Ό μμ±νλ κ³Όμ μμλ μ½λ μ€λ³΅ λ± μ¬λ¬ λΆμμ©μ΄ λ°μν μ μλλ°, μ΄κ²μ REFACTOR
κ³Όμ μμ ν΄κ²°ν μ μμ΅λλ€.
μμ TDDμ μ£ΌκΈ°λ€μ μ΄λκΉμ§λ TDDκ° Clean code that works
μ μ§ν₯νκ³ μκΈ° λλ¬Έμ
λλ€. Clean code that works
λ₯Ό μ€ννκΈ° μν΄μ 리ν©ν λ§ κ³Όμ μ νμ°μ μ
λλ€. 리νν λ§μ RGR μ£ΌκΈ°μμ λ¨μ ν
μ€νΈ λ¨μλ‘ μ΄λ£¨μ΄μ§κ³ μλλ° μ΄ λλ¬Έμ λ¨μ ν
μ€νΈμ TDDλ λ°μ ν κ΄κ³λ₯Ό λ§Ίκ³ μμ΅λλ€. λ€λ§ μ£Όκ°μ΄ λ°λλ©΄ μ λ©λλ€. μ΄ μ μ λ§μ κ°λ°μκ° μ€ν΄νλ λΆλΆμΈλ° λ¨μ ν
μ€νΈλ₯Ό νλ μ΄μ λ TDDκ° μ§ν₯νλ Clean code that works
μ μ€ννκΈ° μν μΌμ’
μ λ°©λ²μ΄μ§ λ¨μ ν
μ€νΈλ₯Ό νκΈ° μν΄ TDDλ₯Ό νλ€λ 건 λ§μ λͺ¨μμ΄κΈ° λλ¬Έμ
λλ€.
- TDD : μ€κ³ νλ‘μΈμ€
- λ¨μ ν μ€νΈ : μ λ°ν ν μ€νΈ μΌμ΄μ€
μΌλ°μ μΌλ‘ λ¨μ ν μ€νΈλ κ°μ²΄ λλ λͺ¨λμ ν¨μ(μλ°μμλ ν΄λμ€)μ μ΄μ μ λ§μΆ₯λλ€. ν μ€νΈκ° λ¨μΌ κΈ°λ₯μ νμ λλλ‘ ν¨μΌλ‘μ¨ ν μ€νΈλ κ°λ¨νκ³ μ μνκ² μ΄λ£¨μ΄μ§λλ€. νΉν λ¨μ ν μ€νΈλ μ½λλ₯Ό λ³κ²½ν΄μΌ νλ κ²½μ° μ μ©ν©λλ€. μ½λκ° μλνλμ§ νμΈνλ λ¨μ ν μ€νΈκ° μμΌλ©΄ μ½λλ₯Ό μμ νκ² λ³κ²½ν μ μκ³ μ€ν μ λ€λ₯Έ λΆλΆμμ νλ‘κ·Έλ¨μ΄ μ€λ¨λμ§ μλλ€λ μ μ νμ ν μ μμ΅λλ€.
λ€μκ³Ό κ°μ΄ Robert C. Matin μ λ¨μ ν μ€νΈμ κ·μΉμ μ μνμ΅λλ€.
Fast
: λ¨μ ν μ€νΈλ λΉ¨λΌμΌ νλ€.Independent
: λ¨μ ν μ€νΈλ λ 립μ μΌλ‘ μμ±νλ€.Repeatable
: λ¨μ ν μ€νΈλ μ΄λ νκ²½μμλ λ°λ³΅ κ°λ₯ν΄μΌ νλ€.Selef-Validating
: λ¨μ ν μ€νΈλ μ체κ²μ¦μ΄ λμ΄μΌ νλ€.Timely
: λ¨μ ν μ€νΈλ μ€μ μ½λλ₯Ό μμ± μ μ μμ±ν΄μΌ νλ€.
ν μ€νΈλ λΉ¨λΌμΌ ν©λλ€. μ¬κΈ°μ λΉ λ¦μ κΈ°μ€μ λ°λ¦¬ μ΄(ms)μ λλ€. λ¨μ ν μ€νΈλ₯Ό ν μ€νΈνλ λ° μμ΄ μ€ν μκ°μ΄ 0.5 μ΄ λλ 0.25 μ΄κ° 걸리λ ν μ€νΈλ λΉ λ₯Έ ν μ€νΈκ° μλλλ€.
νλμ νλ‘μ νΈμμ μ κ²λ λͺλ°± κ°μμ λ§κ²λ μμ² κ°μ ν μ€νΈλ₯Ό ν μ μμΌλ―λ‘ ν μ€νΈμ μ€ν μκ°μ λΉ¨λΌμΌ ν©λλ€. λ§μ½ ν μ€νΈκ° λ리λ€λ©΄ κ°λ°μλ ν μ€νΈλ₯Ό μ£Όμ νκ² λκ³ μμ£Ό κ²μ¦νμ§ μμ μμ€μ½λλ κ·Έλ§νΌ λ²κ·Έκ° λ°μν νλ₯ μ΄ λμμ§λλ€.
ν μ€νΈμ μ¬μ©λ λ°μ΄ν°λ€μ μλ‘ μμ‘΄νλ©΄ μ λ©λλ€. ν μ€νΈμ νμν λ°μ΄ν°λ ν μ€νΈ λ΄λΆμμ λ 립μ μΌλ‘ μ¬μ©ν΄μΌ ν©λλ€. λ§μ½ λ°μ΄ν°κ° μλ‘μκ² μμ‘΄νλ©΄ ν μ€νΈ νλκ° μ€ν¨ν λ λλ¨Έμ§λ μλ¬μ μ€ν¨νλ―λ‘ μμΈμ μ§λ¨νκΈ° μ΄λ €μμ§κΈ° λλ¬Έμ λλ€. λλ‘ λ°μ΄ν°μ μ‘΄μ¬ μ¬λΆλ₯Ό μ°Ύλ ν μ€νΈκ° μλ κ²½μ°μ ν΄λΉ λ°μ΄ν°λ ν μ€νΈ λ΄λΆμμ μμ±λμ΄μΌ νλ©° λμ€μ ν μ€νΈμ μν₯μ λ―ΈμΉμ§ μλλ‘ μ κ±°ν΄μΌ ν©λλ€.
ν μ€νΈλ μ΄λ νκ²½μμλ λ°λ³΅μ μΌλ‘ ν μ€νΈλ₯Ό μ€νν μ μμ΄μΌ ν©λλ€. μ¬κΈ°μ νκ²½μ λ€νΈμν¬ λ λ°μ΄ν°λ² μ΄μ€μ μμ‘΄νμ§ μλ νκ²½μ λ»ν©λλ€. κ²°λ‘ μ μΌλ‘ μΈν°λ·μ΄ λλ μ λλ λ°μ΄ν°λ² μ΄μ€μ μ μνλ μ νλ μΈμ μ΄λμλ ν μ€νΈλ₯Ό ν μ μμ΄μΌ ν©λλ€. νκ²½μ μμ‘΄νμ§ μλ ν μ€νΈκ° μ€ν¨ν μ μλ μ μΌν μ΄μ λ μ€λ‘μ§ ν μ€νΈν ν΄λμ€ λλ λ©μλκ° μ λλ‘ μλνμ§ μκΈ° λλ¬Έμ λλ€.
ν
μ€νΈλ μ체 κ²μ¦μ΄ λμ΄μΌ ν©λλ€. ν
μ€νΈμ κ²μ¦μ μμμ
μ΄ μλ μλνκ° λμ΄μΌ νλλ° ν
μ€νΈκ° μ€νλ λλ§λ€ λ©μλ μΆλ ₯μ΄ μ¬λ°λ₯Έμ§λ₯Ό νμΈνλ κ²μ κ°λ°μκ° κ²°μ ν΄μλ μ λ©λλ€. μ΄ λλ¬Έμ μλ° νκ²½μμλ ν
μ€νΈμ λν κ²μ¦μ μ§μνλ JUnit
μ μ¬μ©νμ¬ ν
μ€νΈμ ν΅κ³Ό μ¬λΆλ₯Ό κ²°μ ν©λλ€.
λ¨μ ν μ€νΈλ μ€μ μ½λλ₯Ό μμ±νκΈ° μ μ μμ±ν΄μΌλ©λλ€. μ΄ κ·μΉμ TDDλ₯Ό μννλ κ²½μ° λ°λμ λ°λΌμΌ νλ κ·μΉμ λλ€.
- κ°λ°μ λ°©ν₯μ μμ§ μκ² μ μ§ν΄μ€λ€.
- μμ κ³Ό λμμ ν μ€νΈλ₯Ό μ§ννλ©΄μ μ€μκ°μΌλ‘ μ€λ₯ νμ μ΄ κ°λ₯νλ€.
- μ¬μ€κ³ μκ°μ λ¨μΆνμ¬ λμ νμ§μ μννΈμ¨μ΄λ₯Ό 보μ₯νλ€.
- 짧μ κ°λ° μ£ΌκΈ°λ₯Ό ν΅ν΄ μ§ν μν© νμ κ³Ό κ³ κ°μ μΆκ° μꡬμ¬ν λ°μμ΄ λΉκ΅μ μ½λ€.
- μλνλ λ¨μ ν μ€νΈ μΌμ΄μ€λ₯Ό κ°μ§κ² λλ€.
- λμμ±μ΄ κ±Έλ €μλ μ½λμ λν ν μ€νΈ μΌμ΄μ€ μμ±μ ν λ, ν μ€νΈ μ체λ₯Ό 무결μ±μκ² μ μ§νκΈ°κ° μ΄λ ΅μ΅λλ€.
- κΈ°μ‘΄ κ°λ° νλ‘μΈμ€μ ν μ€νΈμΌμ΄μ€ μ€κ³κ° μΆκ°λλ―λ‘ μμ° λΉμ© μ¦κ°νλ€.
- ν μ€νΈμ λ°©ν₯μ±, νλ‘μ νΈ μ±κ²©μ λ°λ₯Έ ν μ€νΈ νλ μμν¬ μ ν λ± μΆκ°λ‘ κ³ λ €ν λΆλΆμ μ¦κ°νλ€.
- https://soulpark.wordpress.com/2012/09/12/test-driven-development/
- https://nesoy.github.io/articles/2017-01/TDD
- https://ahea.wordpress.com/2018/09/10/%EC%84%A0%ED%83%9D%EC%9D%B4-%EC%95%84%EB%8B%8C-%ED%95%84%EC%88%98-tdd/
- https://velog.io/@sphong0417/Test-Driven-Development-01.-TDD%EB%9E%80
- https://blog.scienceoflove.co.kr/how-sol-tdd/