[독서록] 테스트 주도 개발(Test Driven Development : by example)



저자 : 켄트벡지음, 김창준,강규영 옮김

꽤 오래된 서적입니다. 한 십 몇 년 전에 읽어보고, 대충 감만 몸에 익힌 상태에서, 최근 신입사원들이 들어와서, 회사보유 서적으로 다시 읽어보게 되었는데요. 예전에 읽은 것과는 확연히 다른 느낌, 이해가 되었습니다. 무엇보다 이제는 익숙한 이름들이 몇몇 보이니까 반갑네요. Ward Cunningham, Richard Gabriel, Rebecca Wirfs-Brock, 모두 PLoP에서 만나보고, 이야기해본 분들입니다. Agile과 XP등도 이제는 익숙해지고, 주변도 대충 감은 알고 있는 상황에, 은근 개발환경/ 문화에 살짝 녹아져가고 있다는 느낌도 듭니다. 이런중에 텍스트를 다시 읽어봤는데, 솔직히 1장은.. 좀.. 따라가긴 힘드네요. 예제를 기반으로 한다고는 하지만, 뭐랄까 지독히 대화체로 되어 있고, 번역체가 여전히 남아 있는게 보여서, 껄끄럽달까요? 그냥 원문을 읽어보는게 어떨까라는 생각이 드네요. 그리고 좀. 지루합니다. 일단 리팩터링을 모르는 분이라면 코드를 하나씩 봐가면서 따라가는게 좋을 수도 있겠지만, 거꾸로. 아는 사람은 굳이 왜? 라는 생각이 들 수도 있겠다 싶었습니다. 기본적으로 예제의 작성 흐름은 순수 저자의 마음과 설계대로 흘러가는 것이라서, 독자가 쉽게 인정(?) 혹은 동의하기는 어려울 수도 있겠다 싶었습니다.

제게는 2장 이후의 이야기 그리고 3장에서의 이야기가 이제는 좀 더 와닿고, 도움이 되겠다 싶은 내용들이었습니다. 일종의 팁 들이 주어졌다고 할까요? 약간의 마음가짐을 다시 잡도록 도와주는 문구들도 있었구요. 아래는 그 일부분 들을 발췌 해봤습니다.

“데밍: 품질에 대한 책임을 그 누구보다도 작업자에게 맡겨야 한다”. 역. P1
사실 요즘 다시 TDD를 들여다보는 것은 Test할 일이 많아져서 입니다. 품질에 대해서 다시 여기저기서 압박이 들어오는 상황이라서, 기존 방법론들 설계방법, 우리의 개발 문화들을 다시 돌아보고 있는 상태이지요. 이전까지는 테스트가 한참 모자랐다고 할 수 있겠고, 이제는 모자라다는 수준은 아니지만, 조금, 뭐랄까 중복되었다라는 느낌이 많습니다. 테스트 리팩토링을 할 때라고 할 수도 있겠네요.

“xper.org의 TDD수련법”
일종의 공식이자, 단순화된 절차랄까. 일을 좀더 빠르게 진행할 수 있도록 도와주는 행동요령정도가 되겠네요.
1. 가능한 하나의 테스트를 빠르게 추가하고
2. TC를 돌려보고, 코드가 테스트에 의해 실패하는 것을 확인하고
3. 코드를 고쳐서
4. TC를 수행 시, 모두 성공하도록 만들고
5. 중복을 제거한다.(Refactoring) p.71
* 가짜구현. 뭐든 만들자, TC가 패스하면 OK. 그리고 고친다.

“Clean code that works by Ron Jeffries”, p.21

“용기를 갖는 것 두려움을 뛰어넘는 것”

“Metaphor Gardening 워드 커닝햄”

“느낌(부작용에 대한 혐오)을 테스트로 변환하는 것은 TDD의 일반적인 주제다”. p.57

testEquality $5 != $6
value object $5 == object $5
object != value p.62

equal null, equal object p.63

위험한 상황 동치성 테스트 실패 -> 곱하기 테스트 실패로 이어짐 p.67

Dollar -> Franc testform분열 Copy&Paste에 대한 활용과 경계. p.70

“TDD로 구현할 땐 테스트 코드의 줄 수와 모델 코드의 줄 수가 거의 비슷한 상태로 끝난다. TDD가 경제적이기 위해서는 매일 만들어 내는 코드의 줄 수가 두 배가 되거나 동일한 기능을 구현하되 절반의 줄 수로 해내야 할 것이다. TDD가 자신의 방법에 비해 어떻게 다른지 측정. 이때 디버깅, 통합작업, 설명하는데 걸리는 시간.” P.145

“잠시 실험을 시도했는데, 제대로 되지 않아서 버렸다.” p.148

Agile Manifesto

http://agilemanifesto.org/iso/ko/manifesto.html

책을 읽고 난 후 떠오른 생각을 정리해봅니다.
경험(=Object)의 중첩(Superposition) : ObjectLifeCycle
+—- Aging ———–+
O1 S————————-E
+-Overlap-+ Communication, Energy Exchange, Resembling
O2 S—————————E
+–Replication-+ Legacy, Inheritance, Heritage, History, Legendary

O3 S——————————-E
Most Longest and repeated Object/Feature becomes legacy and firm infrastructure.