애자일 소프트웨어 개발

신속하고 변화에 유연하며 적응적인 소프트웨어 개발


개요

  • 신속하고 변화에 유연하며 적응적인(adaptive) 소프트웨어 개발을 목표로 하는 다양한 경량 개발 방법론 전체를 일컫는 총칭으로, 반복(iteration)이라 불리는 단기 단위를 채용함으로 위험을 최소화하는 개발방법이다.

배경

소프트웨어 위기와 대응 방안

  • 과거에서 현재로 올수록 시스템의 대규모화에 의해서 컴퓨터 계산 용량과 문제의 복잡성이 급격히 증가하게 되었고 이에 따라 소프트웨어의 신뢰성 저하, 개발비의 증대, 계획의 지연 등의 현상이 현저하게 발생되었다. 또한, 개발 계획의 수행을 매우 어렵게 만드는 상황이 빈번하게 발생하게 되었다.
  • 소프트웨어 위기를 극복하기 위해 90년대 후반까지의 소프트웨어 공학과 개발방법론은 장기간에 걸쳐 많은 사람들을 투입하고 충분한 비용을 투입하여 진행하는 다른 공학의 프로세스와 비슷한 맥락에서 진행되었다. 이때의 전통적인 개발 프로세스들은 폭포수 모델과 계획 기반 개발 기법들을 따랐다. 그러나 계획 기반 개발은 너무 계획에 치중을 하다 보니 개발 방법 자체가 형식에만 신경을 쓰고 얽매이게 되었다. 소프트웨어는 유동적이고 개방적이며 요구사항의 변경에 따른 작업량을 예측하기 힘들다. 따라서 고전적인 소프트웨어 공학이나 관리 기법만으로는 소프트웨어 위기에 대해 대처할 수 없게 되었다.

객체 지향 프로그래밍

  • 전통적인 개발 프로세스에 대응하여 소프트웨어 위기에 대해 대처하는 기술적인 해결책으로 객체지향이 있다. 객체지향 기술은 그동안의 개발 문제를 적절 하게 대처해 주었다. 그러나 객체지향은 전통적인 개발 프로세스에 적합하지 않기 때문에 그에 맞는 개발 프로세스가 필요했다. 애자일 개발 프로세스가 이러한 필요에 따라 만들어졌다. 그렇기 때문에 애자일 개발 프로세스의 상당수는 객체 지향 기술을 기반으로 한다.

본문

애자일 개발 방법론

  • 소프트웨어 개발 방법의 하나로, 개발 대상을 다수의 작은 기능으로 분할하여 하나의 기능을 하나의 반복 주기 내에 개발하는 개발 방법을 말한다. 하나의 반복 기간은 프로젝트마다 다르지만 일반적으로 1주에서 4주 정도인 경우가 많다. 이 반복 주기를 계속해 나가며 하나씩 기능을 추가 개발하는 것이다. 각각의 반복은 소규모 소프트웨어 개발 프로젝트와 비슷하며, 각 반복은 지금까지 개발된 성과물에 하나의 작은 기능을 추가하는 역할을 한다. 계획, 요구분석, 설계, 구현 (코딩), 테스트 및 문서화 등 소프트웨어 프로젝트에 필요한 모든 공정이 하나의 반복 내에서 모두 실시된다. 각 반복이 끝날 때마다 기능이 추가된 새로운 소프트웨어(빌드, build)를 출시하는 것을 목표로 하며, 각 반복이 끝나면 프로젝트 팀은 프로젝트의 우선 순위를 재평가하여 다음 반복을 실시한다.
  • 애자일 개발 프로세스는 제한된 시간과 비용 안에서 정보는 불완전하고 예측 불가능하다는 전제를 가진다. 그리고 그 전제 아래에서 합리적인 답을 내도록 하는 것이 애자일 개발 프로세스이다.

애자일 개발방법론 특징

  • 짧은 기간 단위의 반복 절차를 통해 리스크를 줄이며 개발 주기(계획, 개발, 출시)가 여러번 반복된다. 고객의 피드백에 민첩하게 반응한다. 문서를 통한 의사소통 및 인수인계를 지양하여 문서작업을 최소한으로 줄이고 프로그래밍에 집중한다. 고전적인 개발방법론인 폭포수 모형의 반대개념이다. 일정한 주기를 가지고 끊임없이 프로토타입을 작성하며 상시적으로 요구를 추가, 수정하는 과정을 통해 적응적인(adaptive) 소프트웨어 개발을 한다.

기존 개발 방법과 애자일 개발 방법의 차이

  • 기존의 문서 기반 개발 방법과는 달리 프로젝트 관계자 사이에서 필요할 때 직접 얼굴을 맞대고 즉각적으로 의사소통하는 것을 강조한다. 일반적으로 애자일 개발팀은 소프트웨어 개발에 필요한 모든 참가자가 한 곳의 작업장에서 일한다. 즉, 소프트웨어 개발자와 필요한 소프트웨어를 정의하는 고객, 테스터, 사용자 인터페이스 설계자, 기술문서 기록자 등을 모두 포함한다. 또한 결함을 조기에 식별하기 위해 테스트를 강화하고, 개발 초기부터 테스트를 수행하며, 자동화된 테스트 및 배포 환경을 구축함으로써 지속적인 시스템 통합을 수행하고자 한다.

애자일 개발 프로세스

  • 동적 시스템 개발 방법(DSDM), 익스트림 프로그래밍(Extreme Programming, XP), 스크럼, 크리스털 패밀리, Feature-Driven Development, Adaptive Software Development(ASD), 익스트림 모델링 등이 있다.
  • 애자일 개발 프로세스들은 각자 다른 특징과 적용 범위가 있으며, 서로 조합도 가능하다. 여러 방법중에서 자신의 프로젝트에 맞는 부분을 취사 선택하여 조합하고, 또 독자적인 방법을 만들어 냄으로써 큰 효과를 올리고 있다.

애자일 개발 적용 대상

  1. 첫 번째는 목표 달성을 위한 프로세스를 가지지 않고, 임기응변적인 소프트웨어 개발로 인해 혼란에 빠져있는 조직이다. 애자일 개발 프로세스는 쉽게 도입 할 수 있으며, 들어가는 비용과 위험도 낮다.
  2. 두 번째는 이미 전통적인 소프트웨어 프로세스를 도입하고 있지만, 제대로 동작하지 않는(또는 프로세스 실시를 위한 오버헤드가 너무 커서 오히려 업무에 부담을 주고 있는) 조직이다.

애자일 선언문과 애자일 연합

  • 2001년 켄트 벡(Kent Beck)을 포함한 이 분야의 저명한 소프트웨어 개발자 17명이 미국 유타의 스노우버드(snow bird) 리조트에서 모여, 애자일 소프트웨어 개발 선언을 발표하였다.

    1. 절차와 도구보다는 상호작용 (개성과 화합)
    2. 종합적인 문서보다는 소프트웨어 자체
    3. 계약과 협상보다는 고객과의 협력
    4. 계획 준수보다는 변화에 대한 대응
  • 애자일 개발 프로세스의 제창자들은 애자일 연합이라는 자유로운 조직을 만들고, 애자일 개발 프로세스의 보급에 힘쓰고 있다.