λ©μΈ μ½λλ₯Ό λ§λ€κΈ° μ μ ν΄λΉ μ½λμ μλλ₯Ό ννν΄μ€ ν
μ€νΈ μ½λλ₯Ό λ¨Όμ λ§λλ κΈ°λ².
μ΄λ»κ² 보면 μ§λ΅λ²κ³Όλ κ°λ€. νλ‘κ·Έλλ¨Έλ μΌλ¨ μμ μ΄ λ§λ€λ €κ³ νλ λΆλΆμ λν΄ μ§λ¬Έμ λ΄λ¦¬κ³ , TestCaseλ₯Ό λ¨Όμ λ§λ€μ΄ λμΌλ‘μ μλλ₯Ό νννλ€. μ΄λ κ² UnitTest Codeλ₯Ό λ¨Όμ λ§λ¬μΌλ‘μ UnitTest FrameWorkμ μ»΄νμΌλ¬μκ² λ΄κ° λ³Έλ λ§λ€κ³ μ νλ κΈ°λ₯κ³Ό νμ¬ λ§λ€μ΄μ§κ³ μλ μ½λκ° νλμΌμ΄ μΌμΉνλμ§μ λν΄ μ΄λμ λ λλ²κΉ
λ μ 보λ₯Ό λ±λ‘ν΄λλλ€. μ΄λ‘μ μ»΄νμΌλ¬λ μΈμ΄μ λ¬Έλ²μλ¬ κ²μ¦λΏλ§ μλλΌ μκ³ λ¦¬μ¦ μ체μ λν λλ²κΉ
κΈ°λ₯μ μ΄λμ λ μνν΄μ£Όκ² λλ€.
ν
μ€νΈμ½λλ νλ‘κ·Έλλ¨Έκ° νλ €κ³ νλμΌ, μ¦ μλλ₯Ό λ΄μλΈλ€. μ΄λ μ΄ νλ‘κ·Έλ¨μ΄ μ΄λ ν μλ리μ€λ‘ λμκ°κ²μΈκ°λ₯Ό λ¨Όμ μκ°ν΄λ³΄λ κΈ°νλ₯Ό μ μ λ‘ μ 곡ν΄μ€λ€. Testκ° κ°λ₯ν μ½λλ run μ μμΌ°μλ μ΄λ€ κ²°κ³Όλ₯Ό λΌμ§λ₯Ό νμ
ν μ μλ μ½λμ΄λ€. μ΄ κ²½μ° ν΄λΉ λͺ¨λμ΄ μμ±λμμλκ° μΈμ μΈμ§ κ·Έ λͺ©νλ₯Ό λΆλͺ
νκ² μ‘λ μν μ ν΄μ€λ€.
ν
μ€νΈμ½λ μμ²΄κ° μΌμ’
μ λνλ¨ΌνΈμν μ νκΈ°λ νλ€. ν
μ€νΈ μ½λλ₯Ό λ§λ€λ©΄μ μμ μ΄ νλ €λ μΌκ³Ό λ¬Έμ μν©μ ꡬ체ν μμΌκ°λ€.
ν
μ€νΈμ½λκ° μλ²½ν μ μλ€. νμ§λ§, ν
μ€νΈμ½λκ° λͺ¨λ μλ¬λ₯Ό μ‘μλ΄μ§ λͺ»νλ€λ μ΄μ λ‘ λ§μ λ²κ·Έλ€μ μ€μΌ μ μλ ν
μ€νΈμ½λλ₯Ό μμ±νμ§ μμ μ΄μ λ μλ€. ExtremeProgrammingμμλ UnitTest -> Coding -> Refactoring μ΄ λ§λ¬Όλ € λμκ°λ€. TestFirstProgramming κ³Ό Refactoring μΌλ‘ λ¨μν λμμΈμ΄ μ λλμ΄μ§λ€.
μμλ TestDrivenDevelopment λΌκ³ νλ€. λ¨μν Test λ₯Ό λ¨Όμ μμ±νλκ² μλ, Test μ£Όλ κ°λ°μΈ κ²μ΄λ€. TestDrivenDevelopment λ μ 2μ Refactoring κ³Όλ κ°λ€κ³ μκ°. --1002
μ°Έμ‘° μ¬μ΄νΈ :
- CodeUnitTestFirst, TestFirstDesign, TestDrivenProgramming
- TestFirstProgramming
- ExtremeProgrammingUnitTestingApproach
Test Code Refactoring ¶
νλ‘κ·Έλ¨μ΄ κΈΈμ΄μ§λ€λ³΄λ©΄ Test Code λν κ°μ΄ κΈΈμ΄μ§κ² λλ€. μ΄λμ λ Test Code κ° κΈΈμ΄μ§ κ²½μ°μλ μ κΈ°λ₯μ λν ν
μ€νΈμ½λλ₯Ό μμ±νλ €κ³ ν λλ§λ€ μ€λ³΅μ΄ μΌμ΄λλ€. μ΄ κ²½μ°μλ Test Code λ₯Ό Refactoring ν΄μΌ νλλ°, μ΄ κ²½μ° μμΉ«νλ©΄ ν
μ€νΈ μ½λμ μλλ₯Ό ννΈλ €λ¨λ¦΄ μ μλ€. ν
μ€νΈ μ½λ μμ²΄κ° νλμ λ€νλ¨ΌνΈκ° λλ―λ‘, ν΄λΉ ν
μ€νΈμ½λμ μλλ λΆλͺ
νκ² λ¨λλ‘ Refactoring μ ν΄μΌ νλ€.
Test - Code Cycle ¶
ν
μ€νΈλ₯Ό μμ±νλ λμ Code λ₯Ό μμ±νλ λμ μ£ΌκΈ°κ° κΈΈμ΄μ§μλ‘ νλ€λ€. μ£ΌκΈ°κ° λ무 κΈΈμ΄μ‘λ€κ³ μκ°λλ©΄ λ€μμ λͺ
μ¬νλΌ.
Test Code Approach ¶
Test Driven μ λν μ κ·Ό λ°©λ²μλ End-To-End (BlackBoxTesting) μμ μ κ·Ό λ°©λ²κ³Ό WhiteBoxTesting μ μ κ·Όλ°©λ²μ΄ μμ μ μκ² λ€.
μ μμ κ²½μ°λ μΌμ’
μ 'λΆλΆκ²°κ³Ό - λΆλΆκ²°κ³Ό' λ₯Ό μ΄μ΄λκ°λ©΄μ μ΅μ’
λͺ©νλ‘ μ κ·Όνλ λ°©λ²μ΄λ€. μ΄λ μ΄λ»κ² 보면 Functional Approach μ μ μ¬νλ€. (Context Diagram μ κΈ°μ€μΌλ‘ κ³μ Divide & Conquer ν΄ λκ°λ©΄μ κ°μ₯ μμ λͺ¨λλ€μ μΆμΆν΄λ΄κ³ , κ·Έ λͺ¨λλ€μ νλνλμ© μ 볡ν΄λκ°λ λ°©λ²)
νμμ κ²½μ°λ ν΄λΉ μ½λμ ꡬ쑰λ₯Ό ν
μ€νΈν΄λκ°λ λ°©λ²μΌλ‘, ν΄λΉ μ½λμ μ§νμ΄ μλν μν©μ λ§κ² μ§νλμ΄κ°λμ§λ₯Ό 체ν¬ν΄λκ°λ λ°©λ²μ΄λ€. μ΄λ MockObjects λ₯Ό μ΄μ©νμ¬ μ κ·Όν μ μλ€. μ¦, ν΄λΉ ν
μ€νΈνλ €λ λͺ¨λμ MockObjectλ‘ κ΅¬ννκ³ , νΈμΆλκΈ° μνλ ν¨μλ€μ΄ μ λλ‘ νΈμΆλμλμ§λ₯Ό (MockObjects μ mockobject.py μ μλ ExpectationCounter λ±μ μ΄μ©) νμΈνκ±°λ ν΄λΉ λ°μ΄ν°μ μΆκ° & μμ κ΄λ ¨ ν¨μλ€μ΄ μ λλ‘ νΈμΆλμλμ§λ₯Ό νμΈνλ λ°©λ² (ExpectationList, Set, Map λ±μ μ΄μ©) λ±μΌλ‘μ μ κ·Όν΄ λκ° μ μλ€.
Test - Code μ£ΌκΈ°κ° κΈΈλ€κ³ μκ°λκ±°λ, ν
μ€νΈ κ°λ₯ν κ²½μ°μ λν μμ΄λμ΄κ° λ μ€λ₯΄μ§ μμ κ²½μ°, μ κ·Ό λ°©λ²μ λ€λ₯΄κ² κ°μ Έλ³΄λ κ²λ νλμ λ°©λ²μ΄ λ μ μκ² λ€.
μλ리μ€μ μ΄μ© ¶
Test Code λ₯Ό μμ±νμ§ μμμ§λ§, μ΄λ° κ²½νμ μμλ€. PairProgramming μ νλ μ€ ννΈλμκ²
'μ΄λ²μλ Socket Class λ₯Ό λ§λ€ μ°¨λ‘μΌ. μμν΄λ³ΌκΉ'
'μ΄λ²μλ Socket Class λ₯Ό λ§λ€ μ°¨λ‘μΌ. μμν΄λ³ΌκΉ'
ννΈλκ° λ¨Όμ μ½λλ₯Ό μ‘κΈ΄ νλλ°, μ½λκ° μ’μ²λΌ μ§νμ΄ λμ§ μμλ€. λ¬Έμ κ° λκΉ κ³ λ―Όνλ€κ° λ€μκ³Ό κ°μ΄ μ κ·Όν΄λ΄€λ€.
'μ§κΈ μ μͺ½μλ μμ½μλ²κ° μμ΄. μ§κΈ λ§λ€κ±΄ ν΄λΌμ΄μΈνΈκ³ , μ§κΈ λ§λ€ ν΄λμ€λ‘ write λ₯Ό νλ©΄ μ κΈ° λμ΄λμ μμ½μλ²μ λ΄κ° μ λ ₯ν λ©μΈμ§κ° κ·Έλλ‘ νμλ κ±°μΌ' μ¦, μμ±λμμ λμ κ²°κ³Όλ₯Ό 미리 κ·Έλ €λ³΄λ κ²μ΄λ€.
'μ§κΈ μ μͺ½μλ μμ½μλ²κ° μμ΄. μ§κΈ λ§λ€κ±΄ ν΄λΌμ΄μΈνΈκ³ , μ§κΈ λ§λ€ ν΄λμ€λ‘ write λ₯Ό νλ©΄ μ κΈ° λμ΄λμ μμ½μλ²μ λ΄κ° μ λ ₯ν λ©μΈμ§κ° κ·Έλλ‘ νμλ κ±°μΌ' μ¦, μμ±λμμ λμ κ²°κ³Όλ₯Ό 미리 κ·Έλ €λ³΄λ κ²μ΄λ€.
μκΉλ³΄λ€ ν¨μ¬ μμνκ² μ§νλμκ³ , κ·Έ κ²°κ³Όλ₯Ό λμΌλ‘ νμΈνκ³ , κ²°κ³Όλ₯Ό λμΌλ‘ νμΈνλ€ 'μλ£' νλ€. TFP λΌλ©΄ μ΄λ₯Ό μ½λλ‘ μμ±νμ¬ μλν ν κ²μ΄λ€. μλνλ ν
μ€νΈλ μμΌλ‘μ μΆν λͺ¨λ μμ μμλ μμμ λ΄κ° μνλ κΈ°λ₯λ€μ΄ μ¬μ ν μλν¨μ 보μ₯ν΄μ€λ€.
Random Generator ¶
Random μ μ°λ¦¬κ° μμΈ‘ν μ μλ κ°μ΄λ€. μ΄λ₯Ό μ²μλΆν° ν
μ€νΈλ₯Ό νλ €κ³ νλ κ²μ μ’μ μ κ·Όμ΄ λμ§ λͺ»νλ€. μ΄ κ²½μ°μλ Random Generator λ₯Ό MockObjects λ‘ κ΅¬ννμ¬ μμΈ‘ κ°λ₯ν Random κ°μ΄ λμ€λλ‘ ν λ€, ν
μ€νΈλ₯Ό ν μ μκ² λ€.
Server - Client ¶
μ΄ κ²½μ°μλ MockObjects λ₯Ό μ΄μ©ν μ μλ€. κΈ°λ³Έμ μΌλ‘ XPμμμ ν
μ€νΈλ μλνλ ν
μ€νΈ, μ¦ ν
μ€νΈκ° μ½λν λ κ²μ΄λ€. μ²μ λ°λ‘ μ κ·Όμ΄ νλ€λ€λ©΄ Mock Server / Mock Client λ₯Ό λ§λ€μ΄μ ν
μ€νΈ ν μ μκ² λ€. μ¦, ν΄λΉ μν©μ λν΄ μ΄λ―Έ λ΄μ₯λμ΄ μλ κ°μ 리ν΄ν΄μ£Όλ μλ²λ ν΄λΌμ΄μΈνΈλ₯Ό λ§λλ κ²μ΄λ€. (μ΄λ TestFirstProgramming μμλ³΄λ¨ AcceptanceTest μ λ£λκ² λ λ§μ λ― νκΈ΄ νλ€. XP μμλ UnitTest μ AcceptanceTest λ λ€ μ΄μ©νλ€.)