eXtreme Programming
배경
이렇게 소프트웨어 개발의 조직이나 프로세스를 잘 추진하기 위한 식견을 각가의 경험이나 다양한 프로젝트로부터 수집해서 PatternLanguage로 형식화하고, 커뮤니티 안에서 공유하고, 다듬어 만들어가려는 움직임이 발생하고 있었습니다. 그 중심에는 OOPSLA나 HillsideGroup, PLoP에서 형성되어온 PatternCommunity, 그 중에서도 특히 KentBeck이나 WardCunningham, JimCoplien 등이 있었습니다. - 패턴, 위키, XP 중에서
1996년, KentBeck은 크라이슬러 회사가 진행하는 프로젝트에 참여하게 된다. 당시 크라이슬러에는 코볼로 작성된 급여계산 프로그램이 있었다. 이 시스템은 메인프레임에서 작동하며, 십여개의 프로그램으로 나누어져 복잡하게 되어 있었다. 당시 KentBeck은 시스템을 처음부터 다시 작성할 것을 제안했고, Chrysler Comprehensive Compresation project, 줄여서 C3 프로젝트라고 불리우는 프로젝트가 시작되었다. 여기에는 KentBeck, RonJeffries, MartinFowler 등이 참여했다. 이 프로젝트에서 Beck은 프로젝트 리더로 활동하게 되고, 거대한 프로젝트를 성공적으로 이끌기 위해 팀 내에서 지금은 XP의 프랙티스로 알려진 실천법들을 실천하도록 했다. 당시 C3 프로젝트에서 실천된 프랙티스는 28여개이다.
가치
의사소통: 올바르게 의사소통하라. 여러 프랙티스 중에는 의사소통 없이는 이루어질 수 없는 것들이 많다. 프로젝트의 문제의 많은 원인 중 하나는 누군가가 다른 누군가에게 뭔가 중요한 것을 말하지 않았기 때문이다.
단순성: 작동 가능한 가장 간단한 것이 무엇인가? 오늘 간단한 것을 만들고 다음날 조금 더 노력해서 그것을 바꾸는 것이, 정작 다음날이 되면 쓰지 않을 뭔가 복잡한 것을 오늘 만들고 있는 것보다 낫다.
피드백: 시스템의 현재 상태에 대한 구체적인 피드백은 너무나 값진 것이다. 낙관주의는 프로그래밍의 직업병이다. 피드백이 그 치료약이다.
용기: 용기를 가져라. 좋은 소프트웨어를 만드는 일이라면 무엇이든지 주저하지 말아라. 코드를 버리는 것, 방향을 바꾸는 것, 심지어 개발 후반부에 바꾸는 것 조차도. What's to say that you won't ever develop yourself into a corner? Courage.
존중: 소프트웨어 개발에서 생산성과 인간성을 동시에 개선하려면, 팀에 속한 모든 개인의 기여를 존중해야 한다.
의사소통, 단순성, 피드백, 용기, 존중만이 소프트웨어를 효과적으로 개발하게 할 수 있는 가치는 아니다. 이것들은 XP를 이끄는 가치다. 여러분의 조직, 여러분의 팀, 여러분 자신은 다른 가치들을 선택할 수도 있다. 제일 중요한 것은 팀이 신봉하는 가치에 팀의 행동이 어울리도록 만드는 것이다.
원칙
- 인간성
- 경제성
- 상호 이익
- 자기유사성
- 개선
- 다양성
- 반성
- 흐름
- 기회
- 잉여
- 실패
- 품질
- 아기 발걸음
- 받아들인 책임
실천방법
기초 실천 방법
- 함께 앉기
- 전체 팀
- 정보를 제공하는 작업 공간
- 활기찬 작업
- 짝 프로그래밍
- 스토리
- 일주일별 주기
- 분기별 주기
- 여유
- 10분 빌드
- 지속적 통합
- 테스트 우선 프로그래밍
- 점진적 설계
보조 실천 방법
- 점진적 배치
- 팀 지속성
- 팀 크기 줄이기
- 근본 원인 분석
- 코드 공유
- 코드와 테스트
- 단일 코드 기반
- 매일 배치
- 범위 협상 계약
- 사용별 지불