Agile Software Development

ZOE_:P·2022년 10월 11일
0
  • Rapid development and delivery ( = incremental )
  • Plan-driven development 계획주도기법 ( = waterfall )
    : 각 단계들이 모두 별개의 단계이며 수정이 필요할 경우 처음으로 돌아가야한다

Agile development

  • 명세화, design, implementation이 모두 중첩되어 있다 (inter-leaved)
    • 명세화 최소화 ( 요구사항이 계속 변하기 때문에 )
  • stakeholders들이 개발에 포함되면 점진적으로 발전, 증가하는 버전
    - 고객이 개발팀의 거의 일부로 참여
  • Extensive tool support
    - CASE tool ( Computer Aided Software Engineering )

Agile 방법론의 종류

스크럼 scrum , 익스트림 프로그래밍 XP , 적응형 소프트웨어 개발 방법론, 기능주도 개발 방법론, 크리스탈 패밀리, 린(Lean) 소프트웨어 개발방법론 , 애자일 UP

Agile 방법론

디자인보다 코드 자체에 집중하며 빠르게 변경, 수정 가능

Agile 방법론의 원칙

  • 고객 참여
    고객이 개발 프로세스 전반에 밀접하게 관여해야한다 ( 평가, 요구 추가, 요구 변경 등 )
  • 변화 수용
    변화할 시스템 요구사항을 예측하고, 변화가 있을 것을 숙지하고 설계
  • 점증적 인도
    소프트웨어를 점증적으로 개발한다
  • 단순성 유지
    개발하고 있는 소프트웨어와 개발 프로세스 모두 '단순성'에 집중
  • 프로세스가 아닌 사람
    팀 구성원이 규정된 프로세스에 얽매이지 않고 각자의 업무 방식대로 효율적으로 개발

Agile 방법론 적용가능성 (applicability)

  • 중소 규모의 회사
  • clear commitment from the customer to become involved in 개발 과정
  • 규제가 많이 없고, 그리 치명적이지 않은 경우

XP (Extreme programming)

1990년대에 소개된 애자일 방법론

사용자가 요구사항을 보다 쉽게 말할 수 있도록 유도하기 위해 '스토리'로 말할 수 있게 한다

user requirements 는 card에 적어서 implementation tasks로 쪼갠다
= task 단위로 말하기 힘드니 story에서 task들을 유도한다

  • flexible하고 작업에 대한 이해도가 높아질 수 있다는 장점이 있지만, 사용자가 그 스토리/시나리오를 완전히 기억하지 못하여 '완전성'이 떨어질 수도 있다
  • 스토리를 기능으로 mapping 시키는 데 어려움이 있을 수 있다

XP에서의 원칙 / 실무

  • 연속적 통합 - 각 증가분을 전체 시스템에 계속해서 통합해나간다
  • 점증적 계획 - 요구사항은 '스토리카드'로, 해당 스토리를 '작업'으로 쪼개어 작업
  • 고객의 참여 - 증가분에 들어갈 내용 결정 및 피드백 등 개발팀의 구성원으로 취급
  • 짝 프로그래밍 : 짝을 지어 서로의 작업을 점검
    • 공동 책임
    • informal review process -> 코드의 품질이 좋아짐
    • refactoring을 encourage한다
    • pair가 dynamically 지어지기 때문에 전체적인 코드를 모두 볼 ㅅ 있다
      -> backup 용도로도 좋음
  • 공동 소유권 : 짝 프로그래밍을 통해 더 강화됨
  • 리팩토링 : 코드의 품질을 높여 유지보수를 쉽게 만들어 줌
    • 중복되는 코드 제거, 직관적인 변수명, 클래스,모듈화, comment
    • 시행결과는 같으나 가독성이 올라감
  • 단순한 설계 : 현재의 요구사항만을 만족시키는 설계
  • 소규모 릴리스 : 최소한의 유용한 기능 먼저 개발 후 빈번한 릴리스를 통해 점증적 기능 추가
  • 유지할 수 있는 속도 : 많은 양의 초과근무를 허용하지 않는다 - micro한 에러가 후에 critical한 문제가 될 수도 있기 때문
  • 테스트 우선 개발 : 자동화된 단위 테스트 프레임워크 이용 ( 증분별로 계속해서 test 진행 )
    • 애러 test를 말하는 것이 아닌 사용자 니즈에 맞는지 확인하는 test

SCRUM

반복적인 개발을 관리하는 데에 집중

구성원

  • 개발팀 scrum team
    팀원 5~9명으로 구성되며 사용자 요구사항을 사용자 스토리로 도출하고 이를 구현
    기능을 작업단위로 나누고 일정이나 속도 추정
    일일 스크럼 회의에 참여하여 진척 상황 점검

  • 제품 소유권자(책임자) product owner
    이해 당사자들
    제품 기능 목록, 우선순위와 중요도 매김

  • 스크럼 마스터 scrum master
    제품 책임자를 돕는 조력자 PM
    스크럼 팀이 스스로 조직하고 관리하도록 지원
    개발 과정에 방해될 만한 요소 찾아서 제거

용어들

  • 증가분
  • 제품 백로그 product backlog : 제품 기능 목록
  • 스프린트 sprint
  • 속도 velocity
  • 스크럼 scrum

product backlog 제품 기능 목록

사용자가 요구하는 제품의 기능 목록 ( 사용자 요구사항 )

  • 제품에 관한 모든 요구사항에 대해 우선순위가 정해져있음
  • 한 번 결정된 제품 기능 목록은 확정된 것이 아니라 개발중이라도 수정가능하지만, 한 주기가 끝날 때 까지는 제품 기능 목록을 수정하지 안는다 ( backlog를 freeze해두었다가 주기가 끝나면 수정 )
  • 제품 소유권자가 작성한다.

sprint 스프린트 ( '증분' )

작은 단위의 개발 업무를 단기간 내에 전력질주하여 개발

  • 스크럼에서 의 반복주기 기간은 보통 2~4주정도
  • 결정된 스프린트의 목표와 내용은 개발 도중에 바뀌지 않아야한다
  • 한 스프린트가 완료되면 사용자에게 시연하고 피드백을 받아야한다.

일일 스크럼 회의 daily scrum meeting

스프린트 기간에 하는 회의

  • 매일 서서 모든 팀원들이 약속된 시간에 짧게 한다
  • 진행상황만 점검하며 잘 개발하고 있는지 확인

sprint backlog 스프린트 작업 목록

  • 각각의 스프린트 주기에서 개발할 작업 목록
  • 세부적으로 어떤 걸 구현해야하는지 세부작업 항목과 작업자, 예상 작업시간에 관한 정보

sprint review

  • 하나의 스프린트 반복주기가 끝났을 때 생성되는 실행가능한 제품에 대한 검토
  • 스프린트 동안 작업한 결과 시연, 테스트, 피드백 수령

소멸차트 burndown chart

계획 대비작업이 어떻게 진행되고 있는지 날짜별로 남은 작업량으로 나타냄

기울기가 급하면 작업이 빠르게 진행됨
가로축 : 스프린트 반복 주기 날짜 수
세로축 : 완료된 작업의 추정일수

진행 절차

  • 제품 기능 목록 작성 : 우선순위 매겨서 목록 작성
  • 스프린트 계획 회의 : 스프린트 작업 목록 작성 , 개발 시간 추정
  • 스프린트 수행 : 스프린트 개발, 일일 스크럼 회의, 현황판 변경, 소멸차트 표시
  • 스프린트 개발 완료 : 실행 가능한 최종 제품 생산
  • 스프린트 완료 후 : 스프린트 검토 회의, 회고, 두번째 스프린트 계획 회의

스크럼 기법의 장점

  • product가 관리가능한, 이해가능한 조각들로 쪼개진다
  • 요구사항이 변경되어도 큰 영향을 미치지 않는다
  • 의사 소통을 원활하게 할 수 있다
  • 2-4주마다 증가분을 확인할 수 있으며 피드백을 요구할 수 있다
  • 고객과 개발자 사이에 신뢰관계가 형성된다

애자일 기법의 규모조정

  • 애자일 기법은 요구사항이 고정되어 있지 않으므로 계약시 사용할 수 있는 문서가 없다
  • 빠른 개발에는 유리하지만, 유지 보수에는 불리하다
  • 작은 규모의 회사들에게는 유리하지만, 세계적 협업이 필요할 경우 적절하지 않다
profile
🖥️

0개의 댓글