* 이 글은 정보통신 산업진흥원 소프트웨어 공학센터에서 무료로 배포한 "애자일 SW개발 101" 책자의 내용을 기반으로 작성된 글입니다.
링크1 : 소프트웨어 공학센터(http://www.sw-eng.kr/)
프로그래밍에 집중한 유연한 개발 방식
1. 애자일(Agile) 이란?
애자일은 문서작업 및 설계에 집중하던 개발 방식에서 벗어나 좀 더 프로그래밍에 집중하는 개발 방법론이다. 애자일(Agile)이란 단어는 ‘날렵한’, ‘민첩한’이란 뜻을 가진 형용사다. 애자일 개발 방식도 그 본래 의미를 따른다. 정해진 계획만 따르기보다, 개발 주기 혹은 소프트웨어 개발 환경에 따라 유연하게 대처하는 방식을 뜻한다.
[네이버 지식백과] 애자일 - 프로그래밍에 집중한 유연한 개발 방식 (용어로 보는 IT)
2. 애자일 선언문
링크2: 애자일 선언문(http://agilemanifesto.org/iso/ko/manifesto.html)
3. 애자일 선언 12원칙
① 가치 있는 소프트웨어를 일찍 그리고 지속적으로 전달함으로써 고객을 만족시킨다.
② 비록 개발 후반부일지라도 요구사항 변경을 환영하라. 애자일 프로세스들은 변화를 활용해
고객의 경쟁력에 도움이 되게 한다.
③ 작동하는 소프트웨어를 자주 전달하라. 약 2주에서 2개월의 정도의 간격으로 전달하되,
간격이 짧을수록 좋다.
④ 비즈니스 영역 사람들과 개발자들은 프로젝트 전체에 걸쳐 매일 함께 일해야 한다.
⑤ 동기가 갖추어져 있는 개인들로 프로젝트를 구성하라. 그들에게 그들이 필요로 하는 환경과 지원을
제공하라. 그리고 그들이 일을 끝낼 수 있도록 신뢰하라.
⑥ 어떤 다른 개발팀을 상대로, 혹은 개발팀 내에서, (서로 간의) 정보를 전달하는 가장 효율적이고
효과적인 방법은 얼굴을 보고 하는 대화이다.
⑦ 작동하는 소프트웨어가 진척 측정의 주된 척도이다.
⑧ 애자일 프로세스들은 지속 가능한 개발을 장려한다. 스폰서, 개발자, 그리고 사용자들은 일정한
속도를 계속 유지할 수 있어야 한다.
⑨ 기술적 탁월함과 좋은 설계에 대한 지속적 관심이 기민함을 향상시킨다.
⑩ 간결함(하지 않아도 되는 일의 양을 최대화하는 기술)은 필수적이다.
⑪ 최상의 아키텍처, 요구사항, 그리고 설계는 자기조직화(self-organizing)되어 있는 팀에서 나온다.
⑫ 정기적으로, 팀 차원에서 어떻게 하면 더 효과적일 수 있을지에 대해 되돌아보며 자신들의 행동을
이에 따르도록 조율하고 조정한다.
4. 애자일 방법론의 기원
① 1990년대 중반에 처음 등장하기 시작
② 기존의 무겁고 규범적인 방법론에서 탈피하여 가벼운 방법론 지향
③ 초기에는 경량방법론(Lightweight methods)으로 통칭되었지만, 애자일 선언문
(Agile Manifesto) 만든 이후 '애자일'로 불리기 시작.
④ 아직 보완과 발전이 필요한 방식
그림1: 애자일 방법론의 등장 시기
5. 애자일 방법론의 종류
① 스크럼(Scrum) : 켄 슈와버/제프 서덜랜드② 익스트림 프로그래밍(eXtreme Progrming, XP) : 켄트 벤 / 에릭 감마
③ 린(Lean) 소프트웨어 개발 방법론 : 메리 포펜딕 / 톰 포펜딕
5-1. 스크럼(Scrum)
그림2: 스프린트 진행 방식 요약
1) 스크럼 프로세스
① 스프린트 (Sprint) : 달력기준 1 ~ 4주 단위의 반복 개발 기간을 의미② 3가지 미팅 : 일일 스크럼, 스프린트 계획, 스프린트 리뷰
③ 3가지 산출물 : 제품 백로그, 스프린트 백로그, 소멸 차트
2) 스크럼 역할자
① Product Owner (제품 책임자)
- 제품 백로그(product backlog) 만들고 우선순위 조정, 신규항목 추가
- 스프린트(Sprint)에 대한 계획을 수립할 때까지 중요 역할 수행
- 스프린트가 시작된 이후 최대한 팀운영에 관여하지 않도록 권장.
② 스크럼 마스터 (Scrum Master)
- 스크럼의 원칙과 가치를 지키면서 스크럼 팀이 개발을 진행할 수 있도록 지원
- 업무 방해 요소를 제거하기 위해 노력
③ 스크럼 팀
- 보통 5 ~ 9명으로 구성
- 하나의 스프린트 기간 동안 구현해야 할 기능을 사용자 스토리로 도출하고 이를 구현
3) 미팅
① 스프린트 계획 (Sprint Planning)
- 각 스프린트에 대한 목표 확립
- 각 항목에 대한 담당자 배정 및 태스크 단위 계획 수립
② 일일 스크럼 (Daily Scrum)
- 매일 진행하는 15분간의 진행상황 공유 회의
- 모든 팀원 참석
- 한 일, 할 일, 문제점 등을 이야기
③ 스프린트 리뷰 (Sprint Review)
- 스프린트 목표 달성 여부 확인을 위해 작업 진행과 결과물 확인
- 스크럼 팀은 스프린트 동안 작업한 결과를 참석자에게 데모하고 피드백을 받음
- 고객이 참여하는 것이 좋음
- 스크럼 마스터는 스프린트 동안 잘된 점, 아쉬운 점, 개선 점 등을 찾기 위한 회고 진행 가능
4) 산출물
① 제품 백로그
- 제품에 담고자 하는 기능의 우선순위를 정리한 목록
- 사용자 스토리 : 제품 백로그에 정의된 기능
- 스토리 포인트 : 사용자 업무량에 대한 추정의 기준
② 스프린트 백로그
- 하나의 스프린트 동안 개발할 목록
- 사용자 스토리와 이를 완료하기 위한 작업을 태스크로 정의
- 각 태스크 크기는 시간 단위로 추정
③ 소멸차트 (Burndown chart)
- 개발을 완료하기까지 남은 작업량을 보여주는 그래프
- 각 이터레이션 별 남아있는 작업량을 스토리 포인트로 나타낸 것
그림3: 스프린트 소멸 차트
① 투명성 (Transparency) : 프로젝트 현재 상태나 문제점을 잘 드러내 준다.
② 타임박싱 (Time boxing) : 시간을 엄격히 제한함으로써 프로젝트 진행에만 집중할 수 있도록 한다.
③ 커뮤니케이션 (Communication) : 팀원 간 의사소통을 원활하게 하기 위해 노력
④ 경험주의 모델 ("Inspect & Adapt" model) : 개개인의 경험에 기반. 기본적 구조만 같고 변화 허용
6. 애자일 방법론의 특징 및 의의
① '산출물'과 '문서' 위주의 개발 방식의 비효율을 제거하고 "개발"에 집중하는 새로운 접근 제안.
② 애자일 선언문은 '법'이나 '규약'이 아닌 추구하고자 하는 "가치"임.
③ "반복점진적(iterative and incremental) 개발 지향.
④ 이런 스타일의 개발 방식을 효율적으로 진행하기 위해 "자기조직화(self-organizing)"나
"교차기능팀(cross-functional teams) 등의 기법 활용
폭포수 방법론 (전통 방법론) |
애자일 방법론 |
계획 중심 |
고객 중심 |
빅뱅 릴리즈 |
작은 릴리즈 |
산출물 중심 |
동작하는 SW 중심 |
- 팀의 생산성을 높이고 제품을 적기에 출시하기 위해
- 개발에 들어가는 비용을 줄이기 위해
- 소프트웨어 품질을 향상시키기 위해
- 팀의 사기와 업무 만족도 향상을 위해