본문 바로가기

개발/소프트웨어공학

애자일 개발 방법론 - XP

애자일 개발 방법론은 변화에 대응하고자 하며, 민첩한 대응을 목표로 삼는다.

 

애자일 방법론에서는 요구사항을 분석하여 우선순위가 높은 요구사항을 먼저 개발한다. 개발된 부분에 대해 실행하는 모습을 시연하여 고객의 평가를 받고 요구사항과 개선사항을 반영해 다음 개발에 참고한다.

이런 방식을 계속 반복하면서 소프트웨어 개발 범위를 점진적으로 늘려가게 된다. 

핵심이 되는 사항은 단계별로 동작하는 소프트웨어를 계속 보여주고 요구사항에 대한 변경을 적극적으로 수용한다는 것이다.

 

애자일은 특정한 방법론을 지칭하는 것이 아니라 날렵하고 민첩하게 개발하는 다양한 방법론을 통칭하는 것이다. 애자일 방법론에는 XP(eXteme Programming), SCRUM, FDD, Crystal 방법론 등이 있는데 그 중 XP 방법론을 살펴본다.

 

[XP 핵심 가치]

- 용기: 고객 요구사항을 능동적으로 대처

- 의사소통: 개발자 사이의 원활한 의사소통의 중요성 강조

- 피드백: 가급적 빠른 시간 안에 피드백 제공

- 단순성: 가능한 프로그램을 단순하게 구성

[실천 항목]

- 짝 프로그래밍: 두 명이 한 팀이 되어 프로그래밍 개발

- 집단 소유권: 개발된 코드는 누구라도 수정 가능

- 지속적 통합: 프로그램 버전이 일치하도록 개발된 코드는 지속적으로 통합

- 계획 수립: 유저 스토리 중심으로 개발 활동 및 배포 계획 수립

- 작은 배포: 작은 프로그램을 먼저 만들고 짧은 주기로 배포

- 메타포: 은유법을 사용하여 개발자와 설계자의 괴리감을 해소

- 심플 디자인: 현재 요구사항에 알맞은 가장 단순한 형태로 디자인

- 테스트 주도 개발: 테스트 한 후에 프로그램 개발 (TDD)

- 리팩토링: 기능에 변화 없이 프로그램 디자인 패턴 변경 통해 개선

- 주 40시간 근무: 개발자가 최상의 컨디션을 유지할 수 있도록 야근 금지

- 고객 상주: 고객과의 실시간 커뮤니케이션을 통해 의사소통 향상

- 코딩 표준: 사전에 정의된 코딩 표준을 통해 공동 작업 생산성 향상

 

XP 방법론은 고객이 원하는 핵심 기능부터 짧은 개발 주기를 반복하여 실행 가능한 프로그램 형태로 개발하는 방식이다. XP는 4개 핵심가치와 12가지 실천 항목으로 구성되어 있다. 핵심가치는 개발자가 가져야 할 마음가짐을 알려주는 일종의 개발 철학이고 실천 항목은 실제로 프로젝트에서 생산성을 향상시킬 수 있는 구체적인 방법론이다.

 

프로젝트에는 다양한 요구사항이 들어 있으며 그 중에서 개발 우선 순위를 정하고 가장 시급한 부분부터 개발이 시작된다. 개발을 시작할 때 맨 처음에 개발하는 것은 유저스토리다. UML에서 사용하는 유즈케이스와 유사한 역할을 하는데 고객에게 필요한게 무엇인지 기술하고 있다. 개발 시점에는 요구사항 명세서의 역할을 수행하고 테스트 할 때에는 테스트 시나리오를 제공한다.

 

다음으로 스파이크를 개발한다. 스파이크는 불확실성을 제거하기 위한 일종의 프로토타입과 비슷한 역할을 수행하며 개발자와 고객은 스파이크를 통해 개발에 대한 확신을 가지게 되며 요구사항을 구체화 할 수 있다.

 

배포 계획은 언제 프로그램을 배포할지 계획을 세우는 것이다. 반복적 개발 과정에서 유저스토리와 배포 계획을 유연하게 변경할 수 있다. 이제 프로그램 개발이 끝났으면 인수테스트를 통해 오류를 수정하고 작은 배포를 통해 동작하는 소프트웨어를 고객에게 오픈 한다. XP는 위의 과정을 반복하며 프로그램을 점진적으로 개발하는 방식이다. 산업계에서는 프로젝트에 전면적으로 XP 방법론을 도입하고 있지는 않지만, 개발 과정에서 XP에서 제시하고 있는 핵심 가치와 실천 항목을 광범위하게 사용하고 있다.

 

'개발 > 소프트웨어공학' 카테고리의 다른 글

SOLID - 개방 폐쇄 원칙 (Open-Closed Principle)  (0) 2020.06.14
Deployment Generation  (0) 2020.06.10
애자일 개발 방법론 - XP  (0) 2020.06.07
CBD 개발 방법론  (0) 2020.06.06
객체지향 방법론  (0) 2020.06.05
정보공학 방법론  (0) 2020.06.05