일에서 성공하기 위해서는 기술과 좋은 인간관계가 필요하다. XP는 이 두가를 모두 다룬다.
XP는 이전에는 상상하지 못했던 것들을 성취할 수 있게 해주는 프로그래밍 기법과 명확한 의사소통, 팀워크를 탁월하게 적용하는 것에 집중하는 소프트웨어 개발의 한 양식이다. XP는 다음과 같은 요소들을 포함한다.
1. 의사소통, 피드백, 단순성, 용기, 존중 같은 가치들에 바탕을 둔 소프트웨어 개발 철학.
2. 소프트웨어 개발을 개선하는 데 쓸모가 있다고 증명된 실천방법들의 집합. 실천방법들은 서로를 보완하며 각각의 효과를 증폭시킨다.
3. 상호 보완적인 원칙들, 가치를 실천방법으로 옮기는 지적인 기법들의 집합이다.
4. 이 가치들을 공유하고, 동일한 실천방법들 중 상당수를 공유하는 공동체.
XP는 다음과 같은 점들에서 다른 방법론들과 차이를 둔다.
1. 짧은 개발 주기
XP의 릴리즈 주기는 길어야 몇달이다. 일주일 단위 반복을 사용해 고객 요구사항 구현과 진전 상황에 대해 작은 단위의 피드백을 주고 받는다. 한 반복 안에서 XP의 계획은 짧은 과업(task)이기 떄문에 팀은 주기 안에서 문제르 해결할 수 있다. XP는 우선순위가 높은 기능부터 개발해야 한다.
2. 점진적 계획 접근방법, XP에서는 전반적인 계획을 빨리 만들고 시작한 뒤, 프로젝트의 생에 내내 그 계획이 진화해 가리라 기대한다.
3. 기능 구현 일정을 유연하게 세워 자주 바뀌는 비즈니스 쪽의 요구에 대응할 수 있게 한다.
XP 에서는 비즈니스 쪽 사람들도 정규 구성원이다. XP는 팀의 비즈니스 쪽 구성원들에게 비즈니스에 가장 중요하면서도 가장 작은 릴리즈를 고르게 한다. 이를 통해 배치 전 잘못될 가능성을 줄이고, 소프트웨어 품질을 최상으로 유지한다.
4. 자동화된 테스트들에 의존한다.
개발의 진전 상황을 관찰하고, 시스템이 진화할 수 있게 만들고, 초기부터 결함을 잡을 수 있게 프로그래머, 고객, 테스터들이 자동화된 테스트를 작성한다. 이렇게 작성된 테스트들은 품질 기준을 유지하기 위해 시스템에 변화가 있을 때마다 돌고 또 돈다.
5. 구두 전달, 테스트, 소스코드에 의존해 시스템 구조와 시스템의 의도를 전달한다.
6. 시스템이 존재하는 마지막 순간까지 끝나지 않는 진화적인 설계 절차에 의존한다.
7. 열심히 참여하는 개인들 사이의 긴밀한 협력에 의존한다.
XP는 프로그래머들이 자신의 일을 추정하고 완료하는 책임을 스스로 진다. 그리고 추정이 더 정확해 지도록 완성까지 걸린 시간을 상호 피드백한다. XP는 인간적인 접촉을 장려해 일에 대한 불만족 중 핵심인 외로움을 줄인다.
8. 팀 구성원들의 단기적 본능과 프로젝트의 장기적 이해관계 둘 다에 함께 적용될 수 있는 실천방법들에 의존한다.
위에서 언급한 것들을 종합하면 'XP란 무엇인가?'라는 질문에 다음과 같은 답변을 할 수 있다.
1. XP는 효과업슨ㄴ 관습을 버리고 효과있는 새로운 습관들을 채택하는 것이다.
2. XP는 오늘 내가 기울인 모든 노력에 대해 자신을 인정해 주는 것이다.
3. XP는 내일은 좀더 잘해보려고 애쓰는 것이다.
4. XP는 팀 전체가 공유하는 목표에 내가 얼마나 기여했는지를 잣대로 자신을 평가하는 것이다.
5. XP는 소프트웨어 개발을 하는 중에도 팀원의 인간적 욕구 가운데 일부를 채우겠다고 요구하는 것이다.
출처 - 익스트림 프로그래밍