본문 바로가기

제대로알자, SW/SW 장인정신

애자일 (Agile) SW방법론

* 이 글은 정보통신 산업진흥원 소프트웨어 공학센터에서 무료로 배포한 "애자일 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: 스프린트 소멸 차트


5) 스크럼의 특징
  ① 투명성 (Transparency) : 프로젝트 현재 상태나 문제점을 잘 드러내 준다.
  ② 타임박싱 (Time boxing) : 시간을 엄격히 제한함으로써 프로젝트 진행에만 집중할 수 있도록 한다.
  ③ 커뮤니케이션 (Communication) : 팀원 간 의사소통을 원활하게 하기 위해 노력
  ④ 경험주의 모델 ("Inspect & Adapt" model) : 개개인의 경험에 기반. 기본적 구조만 같고 변화 허용



6. 애자일 방법론의 특징 및 의의
  ① '산출물'과 '문서' 위주의 개발 방식의 비효율을 제거하고 "개발"에 집중하는 새로운 접근 제안.
  ② 애자일 선언문은 '법'이나 '규약'이 아닌 추구하고자 하는 "가치"임.
  ③ "반복점진적(iterative and incremental) 개발 지향.
  ④ 이런 스타일의 개발 방식을 효율적으로 진행하기 위해 "자기조직화(self-organizing)"나
      "교차기능팀(cross-functional teams) 등의 기법 활용

 폭포수 방법론 (전통 방법론)

애자일 방법론 

계획 중심

고객 중심 

빅뱅 릴리즈

작은 릴리즈

산출물 중심

작하는 SW 중심


  * 왜 애자일 방법론을 도입하려 하는가 (VersionOne 설문)
      - 팀의 생산성을 높이고 제품을 적기에 출시하기 위해
      - 개발에 들어가는 비용을 줄이기 위해
      - 소프트웨어 품질을 향상시키기 위해
      - 팀의 사기와 업무 만족도 향상을 위해