Extreme Programming

애자일 방법 중 하나인, 익스트림 프로그래밍의 전반적인 내용을 정리한다.

고객 팀 구성원

고객과 개발자가 서로 긴밀하게 작업하고 서로의 문제를 인식하고 해결하기 위해 노력하자.
XP 팀의 고객은, 기능 요소를 정의하고 우선순위를 매기는 개인 또는 그룹이다.

사용자 스토리

요구사항의 구체적인 세부 내용은 시간이 지나면 바뀌기 쉽다.
세부 사항이 존재함을 알고 그게 어떤 종류인지 대강 알야야 하지만, 구체적인 것 까지 모두 알 필요는 없다.

고객과 대화하면서 요구사항의 세부 내용에 대한 감을 잡지만, 세부사항을 기록하지는 않는다.
사용자 스토리란, 현재 진행 중인 요구사항에 관한 대화의 연상 기호다.
요구사항의 구현 일정을 수립하게 해주는 계힉 툴이다.

짧은 계획

개발중인 소프트웨어를 2주마다 공개한다.
2주마다 반복되는 작업은 이해당사자의 어떤 요구를 처리하는 소프트웨어를 만들어낸다.
그리고 그 반복 (iteration) 끝마다 이해당사자의 피드백을 받기 위해 시스템을 시연한다.

인수 테스트

시스템이 고객이 명시한 대로 동작하는지의 여부를 검증한다.
인수테스트는 자동적으로, 반복적으로 실행될 수 있는 스크립트 언어의 한 종류로 작성된다.

짝 프로그래밍

두 프로그래머가 아주 긴밀히 상호작용하게 된다.

테스트 주도 개발

모든 운영 코드는 실패하는 단위 테스트를 통과하기 위해 작성된다.

공동 소유권

짝은 어떤 모듈이라도 점검하고 개선할 권리를 갖는다.

지속적인 통합

자신의 코드를 check-in (공용 코드 서버에 코드를 올리는 것) 하고 하루에 몇 번씩 그것을 통합한다.
긴 병합 과정을 피하기 위해, 팀원은 모듈을 빈번하게 체크인한다.

지속 가능한 속도

꾸준히 적당한 속도로 달려야한다.
팀이 초과 근무를 하지 않도록 해야한다. 릴리즈의 마지막 주에는 전력 질주를 위해 초과 근무도 무방하다.

열린 작업 공간

팀은 열린 공간에서 함께 일해야한다.

계획 세우기

각 릴리즈와 반복을 시작할 때, 개발자는 가장 최근의 반복이나 릴리즈에서 완성할 수 있었던 양을 기준으로 예산을 세워 고객에게 제출한다.

단순한 설계

설계를 단순하고 표현적으로 만든다. 또, 현재 반복에서 작업하기로 했던 스토리에만 초점을 맞춘다.
이를 위해,

  1. 동작하는 가장 단순한 것을 생각한다.
  2. 필요하지 않을 것이라는 가정에서 시작한다.
  3. 코드는 중복해서 쓰지 않는다.

리팩토링

리팩토링은 프로젝트의 릴리즈, 반복, 심지어 일과가 끝날 때도 수행한다.
리팩토링을 통해 깔끔하고 단순하며 의미있는 코드를 유지할 수 있다.


클린 소프트웨어 <로버트 C.마틴>

Comments