호우동의 개발일지

Today :

article thumbnail

추정 기법

  • 조직은 소프트웨어 노력과 비용 추정치를 만들어야 함
  • 두 종류의 기법을 사용하여 추정치를 구함
    • 경험 기반 기법
      • 관리자의 과거 프로젝트 경험과 애플리케이션 도메인을 근거로 노력 요구사항을 추정

    • 알고리즘 비용 모델
      • 프로젝트 노력을 계산하기 위해 크기와 같은 제품 속성의 추정치, 프로세스 특성,
        참여한 직원들의 경험을 근거로 하는 공식적 접근법 사용

 


추정 불확실성

추정 불확실성 그래프

 


경험 기반 접근법

  • 관리자의 경험, 이 프로젝트에서 소프트웨어 개발에 관련된 활동들을 위해 투입된 실제 노력에 의존
  • 전형적으로 프로젝트에서 생성되는 산출물들과 개발될 여러 소프트웨어 컴포넌트 또는 시스템 식별
  • 스프레드 시트로 문서화, 개별적 추정, 필요한 총 노력 계산
  • 그룹 내의 멤버들에게 자신의 추정치를 설명할 것을 요청하는 것은 도움이 됨

 


경험 기반 접근의 어려움

  • 새로운 소프트웨어 프로젝트가 이전 프로젝트들과 공통적인 것이 많이 없을 때 문제 발생
    • 소프트웨어 개발은 매우 빨리 변화, 프로젝트는 익숙하지 않은 기법들을 사용할 것이다.
      • 예 : 웹 서비스, 애플리케이션 시스템 설정, HTML5

    • 위와 같은 기법들을 사용하지 않았다면, 추정치 생성치 더 어려워짐

 


알고리즘 비용 산정 모델

  • 프로젝트 비용을 예측하기 위해 수학적 공식 사용하는 체계적인 방법
  • Effort = A *Size^B*M
    • A : 상수인자, 개별 조직의 특성과 개발되는 소프트웨어의 종류에 의존
    • Size : 소프트웨어의 코드 크기 또는 기능 점수 또는 애플리케이션 점수
    • B : 소프트웨어의 복잡도를 나타냄. 대체로 1 ~ 5 사이 값
    • M : 소프트웨어 확실성 요구사항과 같은 프로세스, 제품과 개발 속성, 개발팀의 경험을 고려한 인자

  • 소스코드의 라인 수는 많은 알고리즘 비용 모델에서 사용되는 기본적인 크기 척도
  • 대부분의 모델이 비슷하지만 A, B, M에 대해 다른 값을 가짐

 


추정 정확도

  • 소프트웨어 시스템의 크기는 프로젝트가 끝났을 때에만 정확하게 알 수 있음
  • 최종 크기를 결정짓는 요소
    • 재사용된 시스템이나 컴포넌트의 사용
    • 프로그래밍 언어
    • 시스템의 분산도

  • 개발 프로세스가 진척됨에 따라 크기 추정이 점점 정확해짐
  • B와 M에 영향을 미치는 인자들의 추정치는 주관적

 


알고리즘 모델의 효과성

  • 알고리즘 모델들은 복잡하고 사용하기 어려움
    • 알고리즘 비용 산정 모델을 사용한다면, 하나의 추정치가 아닌 여러 범위의 추정치들을
      개발하고 비용 공식을 이것들 모두에 적용해야 함
    • 많은 속성들과 그것들의 값을 추정하는데 상당한 불확실성의 여지 존재
    • 이러한 복잡성 때문에 국방과 항공 시스템에서 작업하는 소수의 대형 기업들에서만 사용

 

 


COCOMO 비용 산정 모델


COCOMO 비용 산정 모델

  • 가장 널리 알려진 알고리즘 비용 산정 모델 기법과 도구
  • 다른 크기들을 갖는 소프트웨어 프로젝트들로부터 데이터를 수집하여 만들어진 경험적 모델
  • COCOMO || 는 초기의 COCOMO(Constructive Cost Modeling) 비용 산정 모델로부터 개발
  • COCOMO || 모델은 소프트웨어 개발에 대한 현대적 접근법 고려
    • 예 : 동적 언어 사용, 재사용 이용한 개발, 데이터베이스 프로그래밍

 


COCOMO || 모델들

  • 더 자세한 추정치를 생성하는 여러 서브모델들을 포함하는 모델
  • COCOMO || 의 서브모델
    • 애플리케이션 집합 모델
      • 애플리케이션 점수를 기반으로 함
      • 재사용한 컴포넌트, 스크립트, 데이터베이스 프로그래밍으로부터 생성되는 시스템 개발을 위해
        요구되는 노력을 구하기 위해 사용

    • 초기 설계 모델
      • 기능 점수를 기반으로 함
      • 요구사항이 도출된 이후 시스템 설계의 초기 단계 동안에 사용
        • 예 : 시스템 요구사항과 설계 옵션에 기반을 둔 초기 비용 추정

    • 재사용 모델
      • 재사용되거나 생성된 라인 수를 기반으로 함
      • 재사용 가능한 컴포넌트들 +
        자동으로 생성된 프로그램 코드를 통합하기 위해서 요구되는 노력을
         계산하기 위해 사용
        • 예: 재사용가능한 컴포넌트 혹은 자동생성되는 코드를 통합하는 비용 추정

    • 포스트 아키텍처 모델
      • 소스코드의 라인 수를 기반으로 함
      • 시스템 아키텍처가 설계되면, 소프트웨어 크기에 대해 더 정확한 추정치를 구할 수 있음
        • 예 : 시스템 설계 명세서에 기반을 둔 개발 비용 추정

 


애플리케이션 결합 모델

  • 프로토타이핑 프로젝트와 기존의 컴포넌트들을 결합하여 소프트웨어를 개발하는 요구되는 노력의 추정 지원
  • 개발자 생산성에 대한 표준 추정치를 기반으로 함
    • 추정치 : 응용 프로그램 점수 / 월

  • 시스템 프로토타입에 대한 최종 노력 계산 공식
    • PM = frac {NAP*(1-frac {% reuse}{100})}{PROD}
      • PM : person-months으로 표현되는 노력 추정치
      • NAP : 인도되는 시스템에 있는 총 애플리케이션 점수
      • % reuse : 개발에서 재사용되는 코드들의 양에 대한 추정치
      • PROD : 애플리케이션 점수 생산성

표

 


초기 설계 모델

  • 프로젝트 초기 단계동안 사용될 수 있음
    • 시스템에 대한 상세한 아키텍처 설계 X, 사용자 요구사항들이 합의된 시점
    • 목표 : 빠르게 근접한 비용 추정치를 구하는 것
  • 알고리즘 모델에 대한 대표 공식을 근거로 추정치를 구함
    • Effort = A*Size^B*M
      • A : 초기 값으로 2.94를 적용하여 사용
      • Size : 소스코드의 라인 수를 천 단위로 나타낸 KSLOC로 표현
      • B : 프로젝트 크기가 증가함에 따라 요구되는 증가된 노력을 반영(1.1 ~ 1.24 사이 값)
        • 프로젝트 독창성, 개발 융통성, 리스크 해결 프로세스, 단결 정도, 프로세스 성숙도 수준 반영
      • M : 프로젝트와 프로세스 속서들을 근거로 추산한 승수

 


초기 설계 모델 - 승수 M

  • 추정치를 증가 또는 감소시키는 7개의 프로젝트와 프로세스 속성들을 근거로 함
    • M = PERS*PREX*RCPX*RUSE*PDIF*SCED*FSIL
      • PERS : 개인의 능력
      • PREX : 개인의 경험
      • RCPX : 제품 신뢰도와 복잡도
      • RUSE : 요구되는 재사용
      • PDIF : 플랫폼 난이도
      • SCED : 일정
      • FSIL : 지원 설비들

  • 속성 값들은 6점 척도를 사용해 추정
    • 1점 매우 낮음, 6점 매우 높음
    • PERS = 6인 경우에는 전문가 직원이 프로젝트의 작업에서 이용 가능하다는 것을 의미

 


재사용 모델

  • 재사용 가능한 코드 또는 생성된 코드를 통합하기 위해서 요구되는 노력을 추정하기 위해 사용되는 모델
  • 두 종류의 재사용되는 코드 고려
    • 블랙박스 코드
      • 코드에 대한 이해 없이 또는 코드를 수정하지 않고 재사용될 수 있는 코드
      • 블랙박스 코드에 대한 개발 노력은 0으로 가정
      • 예시
        • UML 모델들로부터 자동 생성되는 컴포넌트들
        • 그래픽 라이브러리 같은 애플리케이션 라이브러리

    • 화이트박스 코드
      • 새로운 코드 또는 다른 재사용되는 컴포넌트들과 통합하기 위해 수정되어야 하는 재사용 가능 코드
      • 재사용을 위해 코드가 이해되고 수정되어야 하기 때문에 개발 노력 요구
        • 영향을 미치는 세 가지 요인
          • 어떤 컴포넌트가 개발 중인 시스템에서 재사용 가능성에 대해 평가하는 것에 포함된 노력
          • 재사용되는 코드를 이해하기 위해 요구되는 노력
          • 재사용되는 코드를 개발 중인 시스템에 맞추고 통합하기 위해 수정되는데 요구되는 노력

  • COCOMO 초기 설계 모델을 사용하여 계산, 시스템의 총 코드 라인 수를 근거로 함
    • 코드 크기는 컴포넌트들을 위해 개발되은 새로운 코드 더하기 기존 코드를 재사용하고 통합하는 것에
      연관된 노력을 감안하는 추가 인자를 포함
    • 동등한 소스 코드 라인 수를 계산하기 위해 사용되는 공식
      • ESLOC = ASLOC*(1- AT/100)*AAM
        • ESLOC : 동등한 새로운 소스 코드 라인 수
        • ASLOC : 재사용되는 컴포넌트에서 변경되어야 하는 코드 라인 수의 추정치
        • AT : 재사용되는 컴포넌트에서 자동적으로 수정될 수 있는 코드 백분율
        • AAM : 컴포넌트를 재사용하기 위해 요구되는 추가적인 노력을 반영하는 변형 조정 승수

    • 단순화했을 때 AAM은 3개 컴포넌트들의 합
      • 평가 인자 : 컴포넌트들을 재사용할 것인지 아닌지를 판단하는 것에 포함된 노력
      • 이해 컴포넌트 : 재사용될 코드를 이해하는 비용들과 재사용 중인 코드에 대한 엔지니어의 익숙함
      • 변형 컴포넌트 : 재사용되는 코드를 변경하는 비용(설계, 코드, 통합 변경 포함)

  • 재사용 노력을 추정하는 최종 공식
    • Effort = A*ESLOC^B*M
      • A, B, M은 초기 설계 모델에서 사용되는 것과 같은 값
      • 총노력을 계산하기 위해 Size 매개변수를 ESLOC으로 변경하여 표준 추정 공식 적용

 


포스트 아키텍처 모델

  • 시스템에 대한 초기 아키텍처 설계가 있을 때 사용
    • 프로젝트 크기에 대한 더 정확한 추정치를 구할 수 있어야 함
      • 시스템이 어떻게 서브시스템과 컴포넌트들로 나누어질 것인지를 알고 있다고 가정

  • 초기 설계 추정치에서 사용한 것과 같은 기본 공식 사용
    • PM = A*Size^B*M

  • 다음 3개의 코드 추정치들을 더하여 전체 코드 크기에 대한 추정치를 구할 수 있음
    • 개발되어야 하는 새로운 코드 라인의 총 수에 대한 추정치(SLOC)
    • 재사용 모델을 사용하여 계산된 동등한 소스 코드 라인 수(ESLOC)에 근거한 재사용 비용에 대한 추정치
    • 시스템 요구사항 변경으로 변경될 것 같은 코드의 라인 수에 대한 추정치

 


포스트 아키텍처 모델 - 지수 항목 B

  • 노력 계산 공식의 지수항목(B)은 프로젝트 복잡도의 수준과 관련
  • B의 값은 5가지 인자들을 기초로 함
    • 아키텍처/리스크 해결 : 수행되는 리스크 분석 정도를 반영
      • 매우 낮음 → 분석이 거의 없음
      • 아주 높음 → 완전하고 철저한 분석

    • 개발 융통성 : 개발 프로세스의 융통성 정도를 반영
      • 매우 낮음 → 미리 정해진 프로세스
      • 아주 높음 → 고객이 일반적인 목표만을 설정한 것

    • 선행성 : 이런 유형의 프로젝트에 대한 조직의 과거 경험을 반영
      • 매우 낮음 → 과거 경험이 전혀 없음
      • 아주 높음 → 조직이 이런 응용분야에 완전히 익숙하다는 것

    • 팀 단합 정도 : 개발 팀이 서로를 얼마나 잘 알고 있고 함께 일한 정도를 반영
      • 매우 낮음 → 소통이 매우 어렵다
      • 아주 높음 → 소통에 아무런 문제가 없는 잘 통합되고 효과적인 팀

    • 프로세스 성숙 : 조직의 프로세스 성숙도를 반영
      • 이 값의 계산은 CMM 성숙도 질문지에 의존
      • 추정치는 5 - (CMM 성숙도 레벨)로 구할 수 있음

 


포스트 아키텍처 모델 - 승수

  • 전체 노력 추정치는 제품, 프로세스, 조직의 속성들에 대한 17개의 광범위한 집합을 사용하여 정제
  • 주요 속성
    • 제품 속성 : 개발 중인 소프트웨어 제품의 필수 특성과 관련
    • 컴퓨터 속성 : 하드웨어 플랫폼이 소프트웨어에 부과하는 제약과 관련
    • 인사 특성 : 프로젝트에 참여하는 사람들의 경험과 능력을 고려한 승수
    • 프로젝트 속성 : 소프트웨어 개발 프로젝트의 특정 특성과 관련

 


프로젝트 소요시간과 인원배정

  • 프로젝트 관리자가 추정해야 하는 항목
    • 프로젝트의 전체적인 비용
    • 소프트웨어 시스템을 개발하는데 요구되는 노력
    • 소프트웨어 시스템 개발 소요 시간
    • 직원들이 소프트웨어 작업을 위해 필요한 기간

  • COCOMO 모델은 프로젝트를 완료하기 위해 필요한 시간을 추정할 수 있는 공식을 포함
    • TDEV = 3*(PM)^{0.33+0.2(B-1.01)}
      • TDEV : 프로젝트 일정에 관련된 모든 승수들을 무시한 프로젝트에 대한 명목 스케줄
      • PM : COCOMO 모델에 의해 계산되는 노력
      • B : 초기 설계 모델에서 논의한 복잡도 관련 지수

  • 필요한 시간은 프로젝트에 투입된 사람의 수와 무관함

 


인원 배정 요구사항

  • 프로젝트에 사람을 추가로 투입하면 기존 팀 멤버들의 생산성은 감소
  • 프로젝트에 참여하는 사람의 수는 프로젝트 단계에 따라 달라짐
    • 시작 단계 → 초기 설계를 수행하기 위해 적은 수의 사람 필요
    • 시스템의 개발과 테스팅 중 → 가장 큰 규모 필요
    • 시스템 배포 준비 → 규모가 줄어듦

  • 일반적으로 많은 사람들이 프로젝트에 참여할 때에, 더 많은 총노력이 필요함
  • 프로젝트 인원의 급격한 증가는 종종 일정 지연과 관련 있음