Undergoing

Agile Process Model 본문

~2012.05.01 Legacy

Agile Process Model

Halkrine 2010. 3. 31. 15:36

What is the Agile?

Agile = 재빠른, 날렵한, 민첩한

애자일 소프트웨어 개발(Agile software development) 혹은 애자일 개발 프로세스는 소프트웨어 엔지니어링에 대한 개념적인 얼개이다. 어느 특정 개발 방법론을 가리킨다기 보다는 단어 뜻처럼 좋은 것을 빠르고 낭비없이 만드는 개발을 가능하게 해주는 다양한 "방법론" 전체를 일컫는 말이다. 예전에는 "경량" 프로세스로 불리기도 하였다(Lightweight).

90년대 후반까지의 S/W 개발은 장기간 + 많은 인력 투입 + 충분한 비용을 무기로 프로젝트가 진행되었다. 그러나 21세기의 S/W는 짧은 개발기간과 적은 비용을 요구하고 있다. 게다가 급변하는 시장 경제 속에서 살아남으려면 유동적이고 반응이 빠른 관리가 필요했던 것이다. 따라서 고전적인 S/W 관리로는 자리를 지키기에 무리가 따랐다. 애자일 개발 프로세스는 제한된 시간과 비용 안에서 정보는 불완전하고 예측은 불가능하다는 전제를 가지기 때문에 갑작스런 상황에서도 유연하게 대처할 수 있는 능력을 가지고 있다.

전통적인 개발 모델이 폭포수 모델과 계획 기반 모델을 따른다면, 애자일 개발 프로세스는 경험적 프로세스 제어 모델을 따른다. 폭포수 모델과 계획 기반 모델은 계획의 뼈대를 세우기에는 안성맞춤이지만, 갑작스런 변화에 익숙하지 못하여 여러 가지 문제를 수반한다. 일례로 마감일이 다가왔는데 아직 절반도 완성되지 않았다면 치명적인 타격을 입게 된다. 마감일을 지키기 위해 철야작업을 할 것이고, 그 상황에서 쏟아지는 노동자들의 업무과중에 대한 스트레스 및 상부에 대한 비난 등 인력적인 문제도 심각해질 것이다. 애자일 개발 프로세스가 지향하는 경험적 프로세스 제어 모델은 매사가 불분명한 단점을 수용하고 있지만 여러 가지 상황에 대해 유동적으로 대처할 수 있는 장점을 지니고 있다.


Agile Process Model

Agile Process Model에는 몇 가지 방법론이 존재한다. 대표적인 기법으로는 익스트림 프로그래밍(XP, 스크럼, 크리스탈 패밀리, Feature-Driven Development, ASD, 익스트림 모델링 등이 있다.

- 익스트림 프로그래밍 : 켄트 백이 제안한 방법이다. 팀원에게 목표를 공개한 후, 그것을 팀원 스스로 해내게 이끈다. 팀원은 공동체 안에서 자신을 갈고 닦음과 동시에 팀 발전에 스스로 기여하게 된다. 고객과 함께 2주 가량의 반복 개발을 한 후, 테스트와 우선 개발을 한다. 개발 주기가 짧아 개발 초부터 구체적이고 지속적인 반응을 얻을 수 있다. 전반전 계획을 빨리 만든 후 시작한다. 프로젝트는 시스템이 존재하는 한 계속되며, 프로젝트 종료는 시스템의 수명이 다 할 때까지이다. 자동화된 테스트에 의존하고, 시스템이 존재하는 한 계속 진화한다. 팀 규모에 구애받지 않고 언제든지 프로젝트를 진행할 수 있는 매력을 지니고 있다. 하지만 이를 시행하려면 구성원간 의욕이 충만해야 하며, 팀원 각각의 스펙이 부족하면 난항을 겪을 수 있다.

- 스크럼 : 일본의  노나카 이쿠지로와 타케우지 히로시고가 제안한 팀 프로젝트 방식이다. 솔루션에 포함할 기능/개선점에 대한 우선 순위를 부여한 후, 개발 주기를 30일 정도로 조절하고 개발 주기마다 실제 동작할 수 있는 결과를 제공한다. 그리고 개발 주기마다 적용할 기능이나 개선에 대한 목록을 제공하고, 날마다 회의 및 팀 단위 사고를 하여 가치있는 소프트웨어 개발을 목표로 활동한다. 매일 정해진 시간에 정해진 장소에서 짧은시간의 개발을 하는 팀을 위한, 프로젝트 관리 중심의 방법론이다. 스크럼을 통해 팀원간 협동심 및 의견 교환이 배양되어 조직화가 용이하지만, 애자일 프로세스는 무질서해 보이기 때문에 전통적인 프로세스 개선과 마찰이 생기게 된다.

크리스탈 패밀리 - 알리스타 코번과 짐 하이스미스가 창시한 인적자원 중심의 맞춤형 방법론이다. 고정화된 문서에 의존하는 것 보다는 사람 자체의 리액션이나 의견에 중점을 두며, 그 규모 안에서의 목표물 구현을 중요시한다. 문서를 보고 개발자들 나름대로 응용할 수 있는 발판이 제공되는 것이다. 대표적인 방식으로는 크리스탈 클리어, 크리스탈 오렌지, 크리스탈 오렌지 웹 등이 있다. 이 방식은 중간 산출물을 극도로 생략하여 간결하고, 실전 위주의 프로젝트를 진행하기 때문에 효율적이다. 하지만 팀원간의 프로젝트 이해도가 매우 높아야 하고, 자칫 문서에서 표현된 핵심 사항을 놓치고 갈 수 있는 단점이 있다.

- 기능주도 개발(Feature-Driven Development) : 피터 코어드가 제창한 방법론이다. 도메인 전문가와 함께 도메인 객체 모델을 개발, 개발자들은 모델링 활동과 이미 일어난 다른 필수 활동의 정보를 이용해 기능 목록을 작성한다. 그 후 초안을 작성, 책임 영역을 할당한다. 구현기능이 안 남을 때까지 이 과정은 2주간 반복 개발된다. 순환주기가 중요한 개발법이다. UML을 이용한 설계 기법과도 밀접한 관련을 가진다.

- Adaptive Software Development, ASD : 짐 하이스미스와 샘 베이어가 제시한 개발 방법이다. 소프트웨어 개발을 혼란 자체로 규정하고, 혼란을 대전제로 그에 적응할 수 있는 소프트웨어 방법을 제시하기 위해 만들어진 방법론이다. 내용적으로는 다른 방법론들과 유사하지만, 합동 어플리케이션 개발(Joint Application Development, 사용자나 고객이 설계에 참가하는 개발 방법론)을 사용하고 있는 것이 조금 다르다.  주로 크고 복잡한 시스템을 개발할 때 많이 쓰이는 방법론으로, 반복적인 접근법의 대표 주자이다.

- 익스트림 모델링 : 익스트림 모델링은 UML을 이용한 모델링 중심 방법론이다. 다만, 여타 모델링 방법들과는 달리, 언제나 실행할 수 있고 검증할 수 있는 모델을 작성하는 공정을 반복해서, 최종적으로는 모델로부터 자동적으로 제품을 생성하게 한다.


개념 참고 웹 페이지 : 위키피디아, http://ko.wikipedia.org/wiki/%EC%95%A0%EC%9E%90%EC%9D%BC_%EA%B0%9C%EB%B0%9C_%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4

익스트림 프로그래밍 참조 자료 : 익스트림 프로그래밍/켄트벡/인사이트


크리스탈 패밀리에 대한 자세한 정보 : http://blog.naver.com/technofile?Redirect=Log&logNo=80002325631


기능주도 개발 참조 자료 : 엔터프라이즈급 애자일 방법론/딘 레핑웰/에이콘