[Review] Extreme Programming Explained 2/E

XP자체는 이미 상당히 알려진 방법론이며, 모든 방법론이 그러하듯이 좋은 말들과 장미빛 미래를 제시한다.
때문에, 책을 읽을때, 이런 미사여구들은 필터링 할 필요가 있다.

내가 이해한 관점에서 보면, XP의 실천적 방법론의 핵심은 ‘사람’과 ‘테스트’다.
나 역시 여기에 동의하긴 한다.
그렇지만, XP는 나의 견해보다 좀더 극단적인 감이 있다.
어떤 통계적인 근거를 제시할 수 없으니, 내가 맞다는 주장을 펼칠 수는 없지만, ‘조금 지나치다.’라는 느낌은 분명히 있다.

특히 pair programming부분은 동의하기 어렵다. 이건 철저하게 개인의 성향에 따라 다르다.
어떤 사람은 pair programming에서 더 나은 성과를 보일 수 있겠지만, 그렇지 않은 사람도 분명히 상당수 존재할 것이다.
일단 나 부터가 pair programming에 대한 거부감이 있다.
그래서 난, 이를 약간 완화시킨, 내 나름대로의 방법론을 제시하고 싶다.
“최소한 2인 1팀이 되어 움직이게 한다.”

2인 1팀이 하나 혹은 다수의 work item을 공동책임하에 진행하는것… 개인적으로 이런 방식이 더 나아 보인다.
물론 이때, 2인이 소위 사수/부사수 의 관계를 의미하는게 아니다. 완전히 동등한 두 사람을 말한다.
사수/부사수의 방법론은 또 다른 분야이니까 일단 뒤로 하자.

음.. 적다 보니 왠지모르게 미숙한 글의 냄새가 폴폴 풍긴다…쩝..
일단 이쯤에서 접고… 생각나면 다시 업데이트 하자..

* update (2011/Aug/19)
왜 2인 1팀이어야 하는가?
* Pair programming의 효과를 얻을 수 있다. 서로가 서로를 보완하며, review할 수 있다.
* 서로가 서로의 backup이 되어 줄 수 있기 때문이다.
둘 중 누구 하나가 휴가를 가야 한다던가, 갑자기 쉬어야 하는 경우, 다른 한 사람이 그 사람의 빈자리를 채워줄 수 있다.
* 단점 : 전문 분야가 최소한 두곳 이상이 생기게 되므로 업무의 효율이란 측면에서 손실이 있을 수도 있겠으나, 이는 시간이 지나면 해결될 수 있는 문제라고 본다.

[Dev] 요약 [extream programming installed].

* XP의 한계
저자가 이야기한 바와 같이 XP는 대규모 Project (여기서 말하는 대규모란, project를 하기 위해 필요한 사람 숫자가 많은 Project를 의미하는 것처럼 보인다 – 사람 숫자가 많다 = 필요한 Communication 양이 많다.)에는 적합하지 않은 것 같다. 이 점을 명확히 하고 XP를 적용하자.

* Test Oriented Development의 장점.
일단 Test Oriented로 하게 되면, Test를 위한 Interface를 가장 먼저 생각하게 된다. 즉 자연스럽게 “Interface Oriented Development”를 하게 된다. 또한 개발된 Program을 검증하기 용이할 확률이 높다. 중요한 것은 Auto Test란 것 자체가 논리적인 오류를 잡아낼 수는 있어도, User experience쪽에 부적합한 내용같은 부분은 잡아내는 것이 사실상 불가능 하다는 점이다. 또한 논리적인 오류 역시, 어느 정도 큰 Module을 대상으로 Auto Test를 돌리게 되면, 모든 경우를 Test하는 것이 상당히 어렵게 된다. 따라서 Auto Test는 작은 Unit Test에 적합한 것으로 보인다. (이렇게 하면, Test종류는 늘어나겠지만… )

* 고객의 역할.
고객은 business의 가치를 높이는 것이 무엇인지 파악하고, 무엇을 먼저 하고 무엇을 나중에 할 것인지를 결정하고, 시스템이 제대로 작동하는지 확인할 수 있는 test를 정의한다.

* 관리자의 역할.
관리자는 고객과 개발자를 한데 모으고 서로 융화시켜, 팀이 순조롭게 운영되도록 도와준다. 관리자는 process를 수행하는 것이 아니라, 단지 process가 원활하게 진행되도록 하는 것이다.
-> 훌륭한 관리자의 일은 처음부터 끝까지, 작업을 하고 있는 사람들 앞에 놓인 장애물을 치우는 일이다.

* XP 프로그램 작성.
– 코드의 공동 소유 : 누구든 현재 Project의 코드를 원하는 대로 수정할 수 있다.
– 단순한 설계 : 모든 test를 실행하고, 모든 idea를 표현하며, 최소한의 Class와 Method를 가지지만, 중복된 code를 포함하지 않는다.
– 지속적인 Refactoring: 기존 코드를 바꾸지 않는 이유는 잘못되는 것을 두려워해서이다. 따라서, 거의 100%가동되는 모든 단위 Test를 가지고 있다면 Refactoring은 두려워할 만한 일이 아니다.
– 지속적인 통합 : 지속적인 통합은 항상 releasable한 상태로 유지하고, 통합시에 나타날 수 있는 문제를 최대한 빨리 찾아낼 수 있다는 측면에서 중요하다. 통합이 늦어지면, debugging시 드는 비용은 늦어진 시간만큼 증가한다. 기하급수적으로…
– 코드작성표준
– 주당40시간 : 한 주 이상의 과도한 시간외 근무는, 코드의 질을 떨어뜨리며, bug를 양산하는 주범이다.

* 짝 Programming.
두 사람이 하나의 컴퓨터 앞에서 같이 Programming을 한다. “역동적인 2인조는 개별 Play를 하는 3명보다 낫다”
(=> 일단 XP에서는 이렇게 이야기하고 있는데… 난 여기에는 아직까진 동의할 수 없다. 이건 분명히 case by case..이다.!)
코드 공동 소유 vs. 코드의 건전성 유지.