애자일 방법론 중의 하나로 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법
반복적인 개발주기, 단순한 설계, 고객의 적극적인 참여를 통해 소프트웨어를 빠르게 개발하는 것을 목적으로 함
릴리즈의 기간을 짧게 반복하면서 고객의 요구사항 반영에 대한 가시성을 높인다
릴리즈 테스트마다 고객을 참여시킴으로서 요구한 기능이 제대로 작동하는지 고객이 직접 확인할 수 있다
비교적 소규모 인원의 개발 프로젝트에 효과적이다
의사소통, 단순성, 존중, 용기, 피드백
Pair Programming(짝 프로그래밍)
다른 사람과 함께 프로그래밍을 수행함으로써 개발에 대한 책임을 공동으로 나눠 갖는 환경을 조성한다
Collective Ownership(공동 코드 소유)
개발 코드에 대한 권한과 책임을 공동으로 소유
Test-Driven Development(테스트 주도 개발)
개발자가 실제 코드를 작성하기 전에 테스트 케이스를 먼저 작성하므로 자신이 무엇을 해야할지 정확히 파악 (그를 위해서 프레임워크 를 사용)
Whole Team(전체 팀)
개발에 참여하는 모든 구성원은 각자 자신의 역할이 있고 역할에 대한 책임을 가져야 함
Continuous Integration(계속적인 통합)
모듈 단위로 나눠서 개발된 코드들은 하나의 작업이 마무리 될 때마다 지속적으로 통합
Design improvement(디자인 개선)
프로그램 기능의 변경 없이, 단순화, 유연성 강화등을 통해 시스템을 재구성
Small Releases(소규모 릴리즈)
릴리즈 기간을 짧게 반복함으로써 고객의 요구 변화에 신속히 대응 가능