2017년 3월 20일 월요일

software engineering (3) - Agile Software Development

Agile Software Development


Rapid software development

  요즘 빠른 개발과 배포는 소프트웨어 시스템을 위해 가장 중요한 요구사항중 하나이다.
  => because 변화가 빠르고, 요구사항의 변화가 빈번해 안정적인 요구사항을 찾기 불가능

   빠른 개발을 위해서는 다음과 같은 요구사항이 주어진다.
     - 명세와 설계가 중첨됨
     - system이 여러 버전의 시리즈로 만들어짐 (이렇게 하는 것이 더 빨리 작업됨)
     - 각 version마다 고객이 관여함으로 고객의 요구사항에 빠르게 대처
     - User interfaces는 tool을 사용해 빠르게 하는 경우가 많음
  하지만 기존의 waterfall 같은 방법으로는 overhead가 너무 많아 새로운 방법이 필요해짐

agile methods

  * waterfall같은 기존의 방법에 대한 대안으로 agile method가 등장.

  * agile method의 특성
    - 오랜 설계는 낭비이므로 코드에 집중해 개발을 진행
    - 소프트웨어 개발을 양방향에 기반을 두고 작업함
    - 변화하는 요구사항을 충족하기 위해 빠르게 진화하고 더 많이 배포한다.

  * agile method의 목적
    - 소프트웨어 프로세서상의 오버헤드를 줄인다.
    - 지나친 재작업 없이 변화하는 요구사항에 빠르게 반응할 수 있다.

  * agile method의 법칙
    - 고객의 협조 : 고객은 요구사항 및 이들간의 우선순위를 제공하고 반복된 평가를 수행
    - 단위 개발 : 고객이 각 increment에 포함되어야 할 요구사항을 명세
    - 단계에 얶매이지 않는다. : 별도의 process를 강제하지 않고 자신의 방법대로 개발
    - 변화를 바로 느껴라 : 요구사항에 변동이 있을 것을 예측, 시스템이 변동에 빨리 
                             적응 할 수 있도록 설계
    - 간단하게 유지하라 : 절차나 문서등을 간단하게 유지


   * agile method의 특징
    - 소형 또는 중형크기의 제품, 특정 사용자를 위한 시스템에 적합 (ex. 대학교 전산)
    - 고객이 직접 개발과정에 참여가 가능
    - 작고, 뭉쳐져있는 팀에 의해 진행되기 쉬움

   * plan-driven and agile development
  : 주된 차이점은 요구사항 명세가 없다는 것이다. 이를 통해 명세, 설계, 구현 및 테스트가 
  중첩되어 같이 일어나고 그 결과 속도가 plan-driven에 비해 더 빨라진다.

agile development의 예시
 Extreme programming
  : 최고로 잘 알려지고 널리 사용되고 있는 agile method.
    - 새로운 버전이 하루에 몇 개씩 나온다. => 빡세게 programming 하기
    - 2주마다 새로운 increment를 배포
    - 수 많은 코딩과 테스트의 반복을 통해 단점을 보안함
  ==> 짧은 기간에 많은 코딩과 테스트를 반복하고 짧은 기간안에 출시되기 때문에 
      고객과 잦은 소통이 가능하다. 이러한 원인들 때문에 계획이나 제제없이 
      좋은 프로그램이 나올수 있다. 

  ==> 다른 모델들과 달리 requirement specification을 하지 않고 user stories를 고려한다.       ==> 이는 명확한 명세가 필요없어 시간을 더욱 단축한다.

























댓글 없음:

댓글 쓰기