본문 바로가기
Software Engineering/개발 모델 및 아키텍쳐

애자일 개발(Agile Software Development)

by 부뚜기 2023. 3. 5.
반응형

애자일 소프트웨어 개발

애자일 소프트웨어 개발은 유연성, 협업, 고객 만족도를 중요시하는 소프트웨어 개발 방법론이다.

개인과 상호 작용, 작동 소프트웨어, 고객 협업 및 변화에 대응하는 것을 우선시하는 소프트웨어 개발 원칙인 Agile 매니페스토를 기반으로 한다.

 

애자일 소프트웨어 개발(Agile Software Development)은 소프트웨어 개발에 대한 반복적이고 점진적인 접근 방식으로, 작동하는 제품을 신속하고 자주 제공하는 것을 중요하게 생각하는 개발 방법론이다.

개발 팀과 고객 간의 긴밀한 협업을 통해 제품이 고객의 요구와 기대에 부합하도록 보장한다.

애자일 방법론에서 개발은 다음과 같이 진행된다.

  • 요구 사항 정의: 고객 요구 사항을 수집하고 이를 작은 작업 단위로 분해한다. 작업 단위는 스토리라고 불리며, 고객이 원하는 제품의 기능과 요구 사항을 기술한다.
  • 작업 단위 추정: 각 스토리의 작업량을 추정한다. 이를 통해 스토리별 우선순위를 정하고 개발 작업을 조정한다.
  • 스프린트 계획: 이터레이션의 기간을 정하고 개발 작업을 우선순위에 따라 분배한다. 스프린트 목표를 설정하고 개발 작업을 진행한다.
  • 개발 및 테스트: 스프린트 내에서 스토리에 따라 개발 작업을 진행하고, 작업 결과를 테스트한다.
  • 검토 및 피드백: 스프린트 종료 후 작업 결과물을 고객과 함께 검토하고, 피드백을 수집한다.
  • 이터레이션 반복: 이전 단계에서 수집한 피드백을 바탕으로 작업 결과물을 수정하고, 다음 이터레이션을 준비한다.

애자일 개발은 이러한 작은 단위의 이터레이션을 반복하여 지속적인 개발과 배포를 가능하게 한다. 이는 고객 요구 사항의 변경에 신속하게 대응하며, 작은 단위로 개발을 진행함으로써 위험을 최소화하고 개발 효율성을 높이는 장점이 있다.

 

애자일 소프트웨어 개발은 소프트웨어 개발 팀에서 널리 사용되며, 요구 사항의 변경과 소프트웨어 개발의 빠른 속도에 잘 적응할 수 있는 유연하고 적응 가능한 접근 방법이다. 

애자일 방법론은 고객 요구 사항의 변경에 신속하게 대응할 수 있도록 하며, 작은 단위의 이터레이션을 통해 지속적인 개선과 배포를 가능하게 한다. 또한 애자일 방법론은 개발팀과 고객 간의 원활한 협력을 강조하여, 개발된 제품이 고객의 요구와 기대에 부합하도록 보장하고, 이러한 이유로 애자일 방법론은 현대 소프트웨어 개발에서 중요한 역할을 한다.

 

Agile이 실제로 어떻게 작동하는지 명확히 이해하기 위해 예시를 살펴보면.

 

ABC 소프트웨어 회사는 최신 운영 체제의 새로운 웹 브라우저를 만들기로 결정했다.

이 작업의 마감 기한은 10개월이다. 회사 대표는 이 작업을 위해 Team A와 Team B라는 두 팀을 배정했다. 팀들을 동기 부여하기 위해 회사 대표는 웹 브라우저를 개발하는 첫 번째 팀에게 급여 인상과 1주일간의 포상 여행을 줄 것이라고 말했다. 자신들의 여행 환상에 빠져들며, 두 팀은 웹 브라우저의 개발 여정에 나섰다.

Team A는 원칙에 따라 행동하기로 결정했고 개발을 위해 폭포수 모델을 선택하기로 결정했다.

치열한 토론 끝에 Team B는 개발 모델로 Agile을 선택하기로 결정했다.

 

Team A의 개발 계획은 다음과 같다:
- 요구사항 분석 및 수집 - 1.5 개월
- 시스템 디자인 - 2 개월
- 코딩 단계 - 4 개월
- 시스템 통합 및 테스트 - 2 개월
- 사용자 인수 테스트 - 5 주

 

Team B의 개발 계획은 다음과 같다:
- Agile 방법론을 사용하기 때문에 프로젝트를 여러 번의 반복 주기(iteration)로 분할한다.
- 반복 주기의 기간은 모두 동일하다.
- 각 반복 주기의 끝에서는 새로운 기능이 추가된 작동하는 제품을 제공해야 한다.
- 요구사항 수집에 1.5개월을 사용하는 대신, 제품에서 필요한 핵심 기능을 결정하고 이러한 기능 중 첫 번째 반복에서 개발할 수 있는 것을 결정한다.
- 첫 번째 반복에서 제공할 수 없는 남은 기능은 우선순위에 따라 다음 반복에서 제공한다.
- 첫 번째 반복의 끝에서, 팀은 핵심 기본 기능이 있는 작동하는 소프트웨어를 제공한다.

 

두 팀 모두 제품을 완성하기 위해 최선을 다했다.

그러나 급변하는 환경 때문에 갑자기 회사의 책임자는 완전히 새로운 기능을 생각해 내고 가능한 한 빨리 구현하기를 원하며 이틀 안에 작업 모델을 내놓기를 원했다. 

 

Team A는 디자인 단계에 고착되어 있었고 아직 코딩을 시작하지 않았으며 보여줄 만한 모델이 없었다.

게다가 폭포 모델은 일단 다음 단계로 넘어가면 다시 예전 단계로 돌아가지 않기 때문에 새로운 기능을 구현하는 것이 현실적으로 불가능했다. 즉, 다시 처음부터 시작해야 하며 많은 비용과 초과근무가 발생할 것이다.

 

애자일 개발 덕분에 Team B는 많은 면에서 Team A을 앞섰다. Team B 첫 번째 증분 이후 대부분의 핵심 요구사항이 구현된 개발분을 가지고 있었다. 그리고 Team B에게는 새로운 요구사항을 추가하는 것은 식은 죽 먹기였다. Team B가 해야 할 일은 다음 증분을 위해 요구사항들을 계획하고 변경된 요구 사항을 구현하는 것이었다.

장점

- 소프트웨어 배포가 빠르므로 고객의 신뢰를 높일 수 있다.
- 급변하는 요구 사항에 더 잘 적응하고 더 빨리 대응할 수 있다.
- 다음 증분에서 소프트웨어를 개선하기 위해 즉각적인 피드백을 얻을 수 있다.
- 프로세스와 도구보다 사람과 상호 작용에 더 높은 우선순위가 부여된다.
- 지속적인 기술적 우수성과 좋은 설계에 대한 지속적인 관심을 갖는다.
- 개발팀과 고객 간의 협력을 장려하여 고객의 요구 사항과 기대를 더 잘 이해할 수 있다.
- 개발 프로세스 및 소프트웨어 개발에 대한 투명성과 가시성을 제공하여 프로젝트 관리 및 의사 결정을 개선할 수 있다.
- CI/CD를 통해 개발 프로세스와 개발 중인 소프트웨어를 지속적으로 개선하도록 한다.

 

프로젝트 실패 위험을 줄이고, 팀이 규칙적인 간격으로 작동하는 소프트웨어를 제공하여 문제를 빨리 식별하고 해결할 수 있다.

단점

- 대규모 소프트웨어 프로젝트의 경우, 소프트웨어 개발 생명주기 초기 단계에서 필요한 노력을 평가하는 것이 어렵다.
- 애자일 개발은 문서화보다 코드에 초점을 맞추고, 적은 문서를 만든다.
- 애자일 개발은 고객의 결정에 크게 의존한다. 고객이 최종 결과에 대한 비전에 모호성을 가지고 있다면 프로젝트가 궤도를 이탈할 가능성이 높다.
- 대규모 조직에서 대면 커뮤니케이션이 어렵다.
- 개발 과정에서 필요한 결정을 내리기 위해서는 고급 프로그래머만이 가능하다. 따라서 새로운 프로그래머가 환경에 적응하기 어려울 수 있다.

 

반응형

댓글