카테고리 이전블로그 이글루링크 최근 등록된 덧글 최근 등록된 트랙백 이글루 파인더 |
켄트 벡이 대답하길 2탄 에서 질문 중 하나에 대한 답변. 그리고 그에 대한 트랙백
각각의 말들에 대해서 고민을 하게 되다. '디자인, 테스트의 분리가 이상하다. 무언가 단계를 만들어 넣는 것 같다.' TDD 를 진행하는 중에 최종 코드 상으로는 그 둘이 구분되지 않는다. 다만, 이 코드를 작성하는 과정 중에 사고의 분리가 있거나 없거나 하는 것으로 이 단계가 구분된다. 개인적인 경험으로는, '디자인 과정 중에 나온 테스트' 의 경우 디자인을 우선시 하기 위해서 테스트 코드에의 넣는 입력 대비 아웃풋을 간략히 하고, 구현을 진행한다. 구현 중 Fake it 을 하더라도, 최종적으로 Real Implementation 을 진행한다. 이 경우를 생각하면 1. 코드 구현 상으로는 Real Implementation 으로, 이미 완성된 결과물이 나온다. (코드를 작성할 때 당시 생각할 수 있는 선 내에서)여기서 2번째 부분, TDD 초심자와 TDD 에 익숙한 사람 둘 다 실수 할 가능성이 높은 상황일 것 같다. 아마 대부분의 개발자의 경우 2번에서 테스트의 수가 멈춰버릴 것이다. 그리고 TDD 에 익숙하다고 생각하는 사람들은 '이 부분은 안전해' 하면서 테스트를 추가 작성하지 않고 Test Step 을 깨고 Real Implementation Step 으로 진행할 경우들이 있을 것이다. 그리고 Real Expert 는 추후 요구사항이 늘어날 때, 2번 파트와 관련하여 관련되는 객체들을 다시 찾고, 아는 만큼의 예외들에 대한 테스트들을 추가적으로 작성할 것이다. * 오히려 'Fake it - real implementation' 혹은 'triangulation - real implementation' step 으로 TDD 를 진행하는 사람의 경우 2번에서의 실수를 방지할 것 같다는 생각할 것 같다. '중요한 테스트라면 처음 테스트를 만들 때 다 한다. 나중에 깨질 것 같은, 불안한 부분이 있을 때 뒤로 미루지 않는다.' - '아는 만큼의 Courage를 가지고 TDD를 진행한다.' 라고 해석할 수 있을까. 이에 대해서 고민되는 점은, '현재 프로그램 중 불안한 부분이 있긴 한데, 이에 대해서 테스트로 작성할 지식이 없다면? 어떻게 서술해야 할지 모르겠다면? 그럼에도 리팩토링은 진행해야 될 것 같은데.. ' Courage 와 Fear 간의 대립이 시작된다. 그리고 그에 대한 대답이 다음에 이어진다. '리팩토링할 때 뭔가 새는 부분을 찾았다면 나는 새로운 것을 배운 것이다.' Courage 를 가지고 리팩토링 스텝까지 진행을 했음에도 불구하고, 실제 리팩 전-후가 잘못되는 경우는 사람인 이상 누구나 있을 수 있다. 그 경우가 발생했을 때는 보통 사람들은 '아.. 이런. 리팩토링은 많이 위험하구나' 하며 Discourage 되고, 몇몇 사람들의 경우 좀 더 간단하고 쉽게(거기에 시니컬 함을 덧붙여) 'TDD 나 Refactoring 은 여기까지가 한계구나. 사람인 이상 리팩하다 실수 밥먹듯 할텐데. 이렇게 위험한 것을 어떻게 써?' 그리고 켄트 백은 간단히 '그때마다, 나는 새로운 것을 배운 것이다' 라고 이야기한다. ---- 답을 듣는 중에 다음과 같은 목소리가 들려온다. 'Fear를 구체화하여 Test 화 하라고 했는데. 책을 찾아보거나, 다른 사람들과 대화를 하거나. 실험을 하거나, 더 공부를 하거나. 왜 그러한 시도들을 해보지 않는가?'
| ||||