U E D R , A S I H C RSS

Refactoring/Building Test Code

λ¦¬νŒ©ν† λ§μ„ μœ„ν•œ ν•„μˆ˜μ μΈ 선행쑰건은 κ²¬κ³ ν•œ ν…ŒμŠ€νŠΈλΌ ν•˜λŠ” 것이닀. 당신이 λ¦¬νŽ™ν† λ§μ„ μžλ™μœΌλ‘œ ν•΄μ„ μˆ˜ μžˆλŠ” νˆ΄μ„ 가지고 μžˆλ‹€κ³  ν•˜λ”λΌλ„ μ—¬μ „νžˆ ν…ŒμŠ€νŠΈκ°€ ν•„μš”ν•˜λ‹€. λͺ¨λ“  κ°€λŠ₯ν•œ λ¦¬νŽ™ν† λ§μ„ μžλ™μœΌλ‘œ ν•΄μ£ΌλŠ” 툴이 λ‚˜μ˜€λŠ”λ°λŠ” 였랜 μ‹œκ°„μ΄ 걸릴 것이닀.

λ‚˜λŠ” 이것을 λ‹¨μ μœΌλ‘œ 보지 μ•ŠλŠ”λ‹€. λ‚˜λŠ” λ‚΄κ°€ λ¦¬νŽ™ν† λ¦¬λΌ ν•˜λŠ” 쀑이 μ•„λ‹ˆλΌ ν•˜λ”λΌλ„, 쒋은 ν…ŒμŠ€νŠΈλŠ” ν”„λ‘œκ·Έλž˜λ° μ†λ„λΌ λΉ„μ•½μ μœΌλ‘œ ν–₯μƒμ‹œν‚¨λ‹€λŠ” 것을 λ°œκ²¬ν–ˆλ‹€. 이것은 λ§Žμ€ ν”„λ‘œκ·Έλž˜λ¨Έλ“€μ˜ ν†΅λ…κ³ΌλŠ” λ°˜λŒ€λœλ‹€λŠ” μ μ—μ„œ λ†€λΌμš΄ 것이닀. κ·Έλ ‡κΈ° λ•Œλ¬Έμ—, μ™œ κ·ΈλŸ¬ν•œμ§€μ— λŒ€ν•œ μ΄μœ λΌ μ„λͺ…ν• λ§Œν•œ κ°€μΉ˜κ°€ μžˆλ‹€.

The Value of Self-testing Code

ν”„λ‘œκ·Έλž˜λ¨Έλ“€μ΄ μ‹œκ°„μ„ μ“°λŠ” 것을 κ°€λ§Œνžˆ μ‚΄νŽ΄λ³΄λ©΄, μ‹€μ œ μ½”λ“œλΌ μ“°λŠ” μ‹œκ°„μ€ μž‘μ€ 뢀뢄이고 λŒ€λΆ€λΆ„μ˜ μ‹œκ°„μ„ 디버깅에 μ†ŒλΉ„ν•œλ‹€. 그리고 λ²„κ·ΈλΌ μ°ΎλŠ” 데 λ§Žμ€ μ‹œκ°„μ„ 보내고 μˆ˜μ •ν•˜λŠ” 것은 κΈˆλ°©μ΄λ‹€. λͺ¨λ“  ν”„λ‘œκ·Έλž˜λ¨Έλ“€μ€ λ²„κ·ΈλΌ μ°ΎλŠλƒκ³  λ°€μƒˆμ—ˆλ˜ 이야기듀을 ν•˜λ‚˜ λ‘˜ 이상은 가지고 μžˆμ„ 것이닀. ^^; κ²Œλ‹€κ°€ 버그 ν•˜λ‚˜λΌ μž‘μ•„λ„ μ—¬μ „νžˆ λ‹€λ₯Έ κ³³μ—μ„œ 버그가 생길 κ°€λŠ₯성이 μžˆλ‹€. μ΄λ ‡κ²Œ 되면 λ²„κ·ΈλΌ μž‘λŠ”λ° λ§Žμ€ μ‹œκ°„μ„ μ†ŒλΉ„ν•œλ‹€.

λ‚˜λ‘œν•˜μ—¬κΈˆ self-testing code둜의 길을 μ‹œμž‘ν•˜κ²Œ ν•œ κ³„κΈ°λŠ” OOPSLA '92의 ν•œ μ΄μ•ΌκΈ°λΆ€ν„°μ˜€λ‹€. κ·Έλ•Œ λˆ„κ΅°κ°€ (μ•„λ§ˆλ„ Dave Thomas)"ν΄λž˜μŠ€λŠ” 자기 μžμ‹ μ˜ ν…ŒμŠ€νŠΈμ½”λ“œλΌ κ°€μ§€κ³  μžˆμ–΄μ•Ό ν•œλ‹€" λΌλŠ” 말을 ν–ˆλ‹€. 이 말은 ν…ŒμŠ€νŠΈλΌ κ΅¬μ„±ν•˜κΈ° μœ„ν•œ 쒋은 λ°©λ²•μœΌλ‘œ μ—¬κ²¨μ‘Œλ‹€. λ‚˜λŠ” λͺ¨λ“  ν΄λž˜μŠ€μ— 클래슀 μŠ€μŠ€λ‘œλΌ ν…ŒμŠ€νŠΈν•˜λŠ” λ©”μ†Œλ“œλ“€ (test라 ν•œλ‹€.)듀을 가지도둝 λ§Œλ“€μ—ˆλ‹€.

κ·Έλ•Œ λ‚˜λŠ” increment development단계에 μžˆμ—ˆκ³ , λ‚˜λŠ” 맀번 increment 을 μ™„λ£Œν• λ•Œ ν΄λž˜μŠ€λ“€μ— test method듀을 μΆ”κ°€ν–ˆλ‹€. κ·Έλ•Œ ν–ˆλ˜ ν”„λ‘œμ νŠΈλŠ” κ½€ μž‘μ•˜μ—ˆκ³ , μš°λ¦¬λŠ” 우리의 increment μ£ΌκΈ°λŠ” ν•œμ£Ό λ‹¨μœ„μ •λ„μ˜€λ‹€. ν…ŒμŠ€νŠΈμ˜ 싀행은 λŠ” κ½€ μˆ˜μ›”ν•˜κ²Œ λ˜μ—ˆλ‹€. ν•˜μ§€λ§Œ ν…ŒμŠ€νŠΈλ“€μ€ μ‹€ν–‰ν•˜κΈ° μ‰¬μ› μ§€λ§Œ, ν…ŒμŠ€νŠΈλΌ ν•˜λŠ” 것은 μ—¬μ „νžˆ μ§€κ²¨μš΄ μΌμ΄μ˜€λ‹€. 이것은 λ‚΄κ°€ 체크해야 ν•˜λŠ” λͺ¨λ“  ν…ŒμŠ€νŠΈλ“€μ΄ console 에 κ²°κ³ΌλΌ μΆœλ ₯ν•˜λ„λ‘ λ§Œλ“€μ–΄μ‘ŒκΈ° λ•Œλ¬Έμ΄λ‹€. λ‚˜λŠ” κ½€ 게으λ₯Έ μ‚¬λžŒμ΄κ³ , λ‚˜λŠ” 일을 ν”Όν•˜κΈ° μœ„ν•΄ κ½€ μ—΄μ‹¬νžˆ 일을 μ€λΉ„ν–ˆλ‹€. λ‚˜λŠ” 이 ν΄λž˜μŠ€λ“€μ΄ ν”„λ¦°νŒ… ν•΄μ£ΌλŠ” 것을 μ²΄ν¬ν•˜λŠ” λŒ€μ‹ , 컴퓨터가 ν…ŒμŠ€νŠΈλΌ μˆ˜ν–‰ν•˜λ„λ‘ ν–ˆλ‹€.λ‚΄κ°€ 할일은 ν…ŒμŠ€νŠΈ μ½”λ“œμ— λ‚΄κ°€ κΈ°λŒ€ν•˜λŠ” κ²°κ³ΌλΌ μž‘μ„±ν•˜κ³ , κ·Έ λΉ„κ΅λΌ μˆ˜ν–‰ν•˜λŠ” 것이닀. 자, λ‚˜λŠ” λͺ¨λ“  ν΄λž˜μŠ€λ“€μ˜ test methodλΌ μˆ˜ν–‰ν•  수 μžˆμ—ˆκ³ , λͺ¨λ“  일이 잘 되면 단지 'OK' κ°€ 좜λ ₯λ˜λŠ” 것을 ν™•μΈν•˜λ©΄ λ˜μ—ˆλ‹€. 이 ν΄λž˜μŠ€λŠ” μ§€κΈˆ 슀슀둜 자기 μžμ‹ μ„ ν…ŒμŠ€νŠΈλΌ ν–ˆλ‹€.


λͺ¨λ“  ν…ŒμŠ€νŠΈκ°€ μžλ™ν™”λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜κ³  ν…ŒμŠ€νŠΈλ“€μ˜ κ²°κ³ΌλΌ ν…ŒμŠ€νŠΈ μ½”λ“œ 슀슀둜 μ²΄ν¬ν•˜λ„λ‘ 해라.

이제 ν…ŒμŠ€νŠΈλŠ” 컴파일 λ§ŒνΌμ΄λ‚˜ κ°„λ‹¨ν•΄μ‘Œλ‹€. λ‚˜λŠ” 컴파일 ν•  λ•Œ λ§ˆλ‹€ ν…ŒμŠ€νŠΈλΌ ν–ˆλ‹€.그리고 곧 λ‚˜λŠ” λ²„κ·ΈλΌ λ°”λ‘œλ°”λ‘œ μ°Ύμ•„λ‚Ό 수 μžˆμ—ˆλ‹€. λ‚˜λŠ” λ‚΄κ°€ 디버깅을 ν•˜λŠ”λ° 그리 λ§Žμ€ μ‹œκ°„μ„ μ†ŒλΉ„ν•˜μ§€ μ•Šμ•˜μŒμ„ μ•Œκ²Œ λ˜μ—ˆλ‹€. 만일 λ‚΄κ°€ 이전 ν…ŒμŠ€νŠΈμ— μ˜ν•΄ μ£Όμ˜ν•˜λ„λ‘ ν•œ, 버그가 μžˆλŠ” μ½”λ“œλΌ μΆ”κ°€ν–ˆμ„ 경우, ν…ŒμŠ€νŠΈλΌ μ‹€ν–‰ν•  λ•Œ λ°”λ‘œ λ³Ό 수 μžˆμ—ˆλ‹€.

이 사싀을 μ•Œμ•„κ°ˆμˆ˜λ‘ λ‚˜λŠ” ν…ŒμŠ€νŠΈμ— μ€ λ” 적극적이 λ˜μ—ˆλ‹€. incrementκ°€ λκ°€κΈ°λΌ κΈ°λ‹€λ¦¬λŠ” λŒ€μ‹ μ—, λ‚˜λŠ” μ‘°κ·Έλ§ˆν•œ κΈ°λŠ₯을 μΆ”κ°€ν•  λ•Œ λ§ˆλ‹€ ν…ŒμŠ€νŠΈλΌ ν–ˆλ‹€. 맀번 λ‚˜λŠ” μƒˆ κΈ°λŠ₯듀을 μΆ”κ°€ ν–ˆκ³ , 그듀에 λŒ€ν•œ ν…ŒμŠ€νŠΈλ“€μ„ μˆ˜ν–‰ν–ˆλ‹€. 이 λ‹Ήμ‹œ λ‚˜λŠ” 디버깅에 μˆ˜λΆ„μ΄μƒμ„ μ†ŒλΉ„ν•˜μ§€ μ•Šμ•˜λ‹€.


test suiteλŠ” λ²„κ·ΈλΌ μ°ΎλŠ” μ‹œκ°„μ„ μ„μ—¬μ£ΌλŠ” κ°•λ ₯ν•œ 버그 탐지기이닀.

λ¬Όλ‘  λ‹€λ₯Έ μ΄λ“€λ‘œ ν•˜μ—¬κΈˆ 이 과정을 λ”°λ₯΄λ„둝 μ„λ“ν•˜λŠ” 것은 쉽지 μ•Šλ‹€. ν…ŒμŠ€νŠΈ μ½”λ“œλΌ λ§Œλ“œλŠ” 것은 κ·Έ 양이 λ§Žλ‹€.
그리고 이것이 μ‹€μ œλ‘œ ν”„λ‘œκ·Έλž˜λ° μ†λ„λΌ λ†’μΈλ‹€λŠ” 것을 κ²½ν—˜ν•΄λ³΄μ§€ μ•ŠμœΌλ©΄ self-testing μ½”λ“œλŠ” μ‚¬λžŒλ“€μ΄ 이해해주지 λͺ»ν•œλ‹€. 그리고 ν…ŒμŠ€νŠΈκ°€ μˆ˜λ™μ΄λΌλ©΄ 이것은 지루할 것이닀. ν•˜μ§€λ§Œ ν…ŒμŠ€νŠΈκ°€ μžλ™ν™”λœλ‹€λ©΄ ν…ŒμŠ€νŠΈ μ½”λ“œλΌ μ“°λŠ” 것은 κ½€ 재λΈμžˆλŠ” 일이 될 것이닀.

사싀 ν…ŒμŠ€νŠΈ μ½”λ“œλΌ μž‘μ„±ν•˜κΈ° μœ„ν•œ κ°€μž₯ 쒋은 λ•ŒλŠ” ν”„λ‘œκ·Έλž˜λ°μ„ μ‹œμž‘ν•˜κΈ° 전이닀. μ–΄λ–€ κΈ°λŠ₯을 μΆ”κ°€ν•΄μ•Όν•  λ•Œ, ν…ŒμŠ€νŠΈ μ½”λ“œλΌ μž‘μ„±ν•˜λŠ” κ²ƒμœΌλ‘œ μ‹œμž‘ν•œλ‹€. 이것은 λ’·κ±ΈμŒμ§ˆ μΉ˜λŠ” 것이 μ•„λ‹ˆλ‹€. κ·Έ κΈ°λŠ₯을 μΆ”κ°€ν•˜κΈ° μœ„ν•΄μ„œ μ–΄λ–€ 것듀이 ν–‰ν•΄μ Έμ•Ό ν•˜λŠ”μ§€ μŠ€μŠ€λ‘œμ—κ²Œ λ¬Όμ–΄λ³΄λŠ” 것이 λœλ‹€. 그리고 ν…ŒμŠ€νŠΈ μ½”λ“œλΌ μ“°λŠ” 것은 κ΅¬ν˜„λ³΄λ‹€λŠ” μΈν„°νŽ˜μ΄μŠ€μ— 집쀑할 수 있게 ν•΄μ€λ‹€. (그리고 이것은 μ–Έμ œλ‚˜ 쒋은 것이닀)

ν…ŒμŠ€νŒ… μ½”λ“œλŠ” ExtremeProgramming 의 μ€‘μš”ν•œ 뢀뢄이닀. Beck, XP. 이 이름은 λΉ λ₯΄κ³  게으λ₯Έ 해컀같은 ν”„λ‘œκ·Έλž˜λ¨Έλ“€μ—κ² 마술주문과 같을 것이닀. ν•˜μ§€λ§Œ, extreme programmer듀은 ν…ŒμŠ€νŠΈμ— λŒ€ν•΄ 맀우 ν—Œμ‹ μ μ΄λ‹€. 그듀은 κ°€λŠ₯ν•œ ν•œ μ†Œν”„νŠΈμ›¨μ–΄κ°€ λΉ λ₯΄κ²Œ λ°œμ „ν•˜κΈ° μ›ν•˜κ³ , 그듀은 ν…ŒμŠ€νŠΈλ“€μ΄ 당신을 μ•„λ§ˆ 갈 수 μžˆλŠ” ν•œ λΉ λ₯΄κ²Œ 갈 수 μžˆλ„λ‘ λ„μ™€μ„ κ²ƒμ„ μ•ˆλ‹€.

μ΄μ •λ„μ—μ„œ μ΄μ•ΌκΈ°λŠ” μΆ©λΆ„ν•˜λ‹€ λ³Έλ‹€. 비둝 λ‚΄κ°€ self-testing codeλΌ μž‘μ„±ν•˜λŠ” 것이 λͺ¨λ‘μ—κ²Œ 이읡이 λœλ‹€κ³  μƒκ°ν•˜λ”λΌλ„, 그것은 이 μ±…μ˜ 핡심이 μ•„λ‹ˆλ‹€. 이 책은 Refactoring에 κ΄€ν•œ 것이닀. Refactoring은 testλΌ μš”κ΅¬ν•œλ‹€. 만일 Refactoring ν•˜κΈ° μ›ν•œλ‹€λ©΄, test codeλΌ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.


Refactoring
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:27:53
Processing time 0.0241 sec