본문 바로가기
SW

테스트 주도 개발(Test-Driven Development:By Example) - 3부 : 테스트 주도 개발의 패턴 (26장)

by 라꾸스떼(YR) 2020. 2. 14.
반응형

[26장] 빨간 막대 패턴

<한 단계 테스트>

목록에서 다음 테스트를 고를 때 무엇을 기준으로 할 것인가? 여러분에게 새로운 무언가를 가르쳐 줄 수 있으며, 구현할 수 있다는 확신이 드는 테스트를 고를 것.

사실은 상향식, 하향식 둘 다 TDD의 프로세스를 효과적으로 설명해 줄 수없다. 첫째로 이와 같은 수직적 메타포는 프로그램이 시간에 따라 어떻게 변해 가는지에 대한 단순화된 시각일 뿐이다. ‘성장’은 일종의 자기유사성을 가진 피드백 고리를 암시하는데, 이 피드백 고리에서는 환경이 프로그램에 영향을 주고 프로그램이 다시 환경에 영향을 준다. 둘째로, 만약 메타포가 어떤 방향성을 가질 필요가 있다면 (상향 혹은 하향보다는) ‘아는 것에서 모르는 것으로(known-to-unknown)’라는 방향이 유용할 것이다.

우리는 아는 것에서 모르는 것으로 성장하는 프로그램을 갖게 된다.

 

<시작 테스트>

오퍼레이션이 아무 일도 하지 않는 경우를 먼저 테스트할 것.

-이 오퍼레이션을 어디에 두어야 하나?

-적절한 입력 값은 무엇인가?

-이 입력들이 주어졌을 때 적절한 출력은 무엇인가?

당신에게 뭔가를 가르쳐 줄 수 있으면서도 빠르게 구현할 수 있는 테스트를 선택하라.

 

<설명 테스트>

자동화된 테스트가 더 널리 쓰이게 하려면 어떻게 해야 할까? 테스트를 통해 설명을 요청하고 테스트를 통해 설명하라.

팀에서 혼자 TDD를 한다면 꽤나 어려움을 느낄 수도 있다. 하지만 머지 않아, 테스트된 코드의 통합 문제와 결함 보고가 줄어드는 것을 팀에서 알아챌 것이고, 설계는 더 단순해지고 설명하기에 용이해질 것이다. 심지어 사람들이 테스트와 테스트 우선에 정말 열광적이게 되는 일이 발생할 수도 있다.

사람들이 일하는 방식을 강제로 바꿀 수는 없다.

단순한 시작법은 테스트를 이용하여 묻고, 테스트를 이용하여 설명하는 것이다.

 

<학습 테스트>

외부에서 만든 소프트웨어에 대한 테스트를 작성해야 할 때도 있을까?

그냥 바로 사용하는 대신 API가 우리 예상대로 실행된다는 것을 확인해줄 만한 작은 테스트를 만들어 보는 것이다.

만약 우리가 API를 제대로 이해했다면 이 테스트는 한번에 통과할 것이다.

 

<또 다른 테스트>

주제와 무관한 아이디어 떠오르면 이에 대한 테스트를 할일 목록에 적어놓고 다시 주제로 돌아올 것. 대화를 엄격하게 한 주제로 묶는 것은 훌륭한 아이디어를 억압하는 최고의 방법이다.

때때로 프로그래밍은 뭔가 훌쩍 뛰어 넘는 기회에 의존한다. 새 아이디어가 떠오르면 존중하고 맞이하되 그것이 내 주의를 흩뜨리지 않게 한다. 그 아이디어를 리스트에 적어놓고는 하던 일로 다시 돌아간다.

 

<회귀 테스트>

회귀 테스트(regression test)란, 처음 코딩할 때 작성했어야 하는 테스트다. 회귀 테스트를 작성할 때는 이 테스트를 작성해야 한다는 사실을 어떻게 하면 애초에 알 수 있었을지 항상 생각해보라. 애플리케이션 차원의 회귀 테스트는 시스템의 사용자들이 여러분에게 정확히 무엇을 기대했으며 무엇이 잘못되었는지 말할 기회를 준다.

 

<휴식>

지치고 고난에 빠졌을 땐 뭘 해야 하나? 그럴 땐 좀 쉬는 게 좋다.

음료수도 마시고, 좀 걷고, 낮잠도 자보자.

종종 이 정도의 거리 두기를 통해 당신에게 부족했던 아이디어가 튀어나올 수도 있다.

만약 ‘바로 그 아이디어’를 얻지 못한다면, 현재 세션의 목적을 다시 검토해 보라.

‘샤워 방법론’ - 키보드로 뭘 쳐야 할지 알면, 그걸 치면 된다. 뭘 해야 할지 모르겠으며 샤워하러 가서 뭘 해야 할지 생각날 때까지 계속 샤워를 한다.

키보드로 뭘 쳐야 할지 알면, 명백한 구현을 한다. 잘모르겠다면 가짜 구현을 한다. 올바른 설계가 명확하지 않다면 삼극측량 기법을 사용한다. 그래도 모르겠다면 샤워나 하러가는 거다.

-시간 단위로는, 물병을 키보드 옆에 두어서 생리 현상으로 규칙적인 휴식을 하도록 유도하라.

-하루 단위로는, 더 진행하기 전에 잠이 필요한 경우 정규 근무 시간 후의 약속이 진행을 일단 멈추는 데에 도움이 될 수 있다.

-주 단위로는, 의식적이고 에너지 소모적인 업무 관련 생각을 떨쳐버리는 데에 주말 활동이 도움이 된다.

-년 단위로는, 강제 휴가 정책이 여러분의 재충전을 완벽히 도와줄 것이다. 프랑스에서는 이 제도를 잘 수행한다. 하지만 연속 2주일은 충분하지 않다. 첫 주에는 그동안 쌓인 긴장을 완화하고, 마지막 주에는 다시 일을 시작할 준비를 해야 한다. 따라서 효과적인 휴식을 위해서는 3주 정도 필요하다.

 

<다시 하기>

길을 잃은 느낌이 들 땐 어떻게 할까? 코드를 다 지워버리고 처음부터 다시 해보자.

 

<싸구려 책상, 좋은 의자>

나머지 시설은 싸구려를 쓸지라도 정말 좋은 의자를 구해라. 허리가 아프면 프로그램을 잘 짤 수가 없다.

익스트림 프로그래밍에서 권장하는 사무실 배치는 파티션이 없는 넓은 공간의 가운데에 큰 테이블을 놓고 그 테이블 주위로 짝 프로그래밍을 하는 개발자들이 둘러 앉아 있으며(워룸, 오픈룸), 개인이 사적인 용도로 사용할 컴퓨터를 구석에 따로 배치하는 것이다. 이러한 개발 환경은 팀 내 의사소통을 원활하게 해주며 생산성을 크게 높여주는 것으로 알려져 있다.

반응형

댓글