추정 기법
- 조직은 소프트웨어 노력과 비용 추정치를 만들어야 함
- 두 종류의 기법을 사용하여 추정치를 구함
경험 기반 기법
- 관리자의 과거 프로젝트 경험과 애플리케이션 도메인을 근거로 노력 요구사항을 추정
- 관리자의 과거 프로젝트 경험과 애플리케이션 도메인을 근거로 노력 요구사항을 추정
알고리즘 비용 모델
- 프로젝트 노력을 계산하기 위해 크기와 같은 제품 속성의 추정치, 프로세스 특성,
참여한 직원들의 경험을 근거로 하는 공식적 접근법 사용
- 프로젝트 노력을 계산하기 위해 크기와 같은 제품 속성의 추정치, 프로세스 특성,
추정 불확실성
경험 기반 접근법
- 관리자의 경험, 이 프로젝트에서 소프트웨어 개발에 관련된 활동들을 위해 투입된 실제 노력에 의존
- 전형적으로 프로젝트에서 생성되는 산출물들과 개발될 여러 소프트웨어 컴포넌트 또는 시스템 식별
- 스프레드 시트로 문서화, 개별적 추정, 필요한 총 노력 계산
- 그룹 내의 멤버들에게 자신의 추정치를 설명할 것을 요청하는 것은 도움이 됨
경험 기반 접근의 어려움
- 새로운 소프트웨어 프로젝트가 이전 프로젝트들과 공통적인 것이 많이 없을 때 문제 발생
- 소프트웨어 개발은 매우 빨리 변화, 프로젝트는 익숙하지 않은 기법들을 사용할 것이다.
- 예 : 웹 서비스, 애플리케이션 시스템 설정, HTML5
- 예 : 웹 서비스, 애플리케이션 시스템 설정, 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 : 애플리케이션 점수 생산성
- PM = frac {NAP*(1-frac {% reuse}{100})}{PROD}
초기 설계 모델
- 프로젝트 초기 단계동안 사용될 수 있음
- 시스템에 대한 상세한 아키텍처 설계 X, 사용자 요구사항들이 합의된 시점
- 목표 : 빠르게 근접한 비용 추정치를 구하는 것
- 알고리즘 모델에 대한 대표 공식을 근거로 추정치를 구함
- Effort = A*Size^B*M
- A : 초기 값으로 2.94를 적용하여 사용
- Size : 소스코드의 라인 수를 천 단위로 나타낸 KSLOC로 표현
- B : 프로젝트 크기가 증가함에 따라 요구되는 증가된 노력을 반영(1.1 ~ 1.24 사이 값)
- 프로젝트 독창성, 개발 융통성, 리스크 해결 프로세스, 단결 정도, 프로세스 성숙도 수준 반영
- M : 프로젝트와 프로세스 속서들을 근거로 추산한 승수
- Effort = A*Size^B*M
초기 설계 모델 - 승수 M
- 추정치를 증가 또는 감소시키는 7개의 프로젝트와 프로세스 속성들을 근거로 함
- M = PERS*PREX*RCPX*RUSE*PDIF*SCED*FSIL
- PERS : 개인의 능력
- PREX : 개인의 경험
- RCPX : 제품 신뢰도와 복잡도
- RUSE : 요구되는 재사용
- PDIF : 플랫폼 난이도
- SCED : 일정
- FSIL : 지원 설비들
- M = 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 : 컴포넌트를 재사용하기 위해 요구되는 추가적인 노력을 반영하는 변형 조정 승수
- ESLOC = ASLOC*(1- AT/100)*AAM
- 단순화했을 때 AAM은 3개 컴포넌트들의 합
평가 인자
: 컴포넌트들을 재사용할 것인지 아닌지를 판단하는 것에 포함된 노력이해 컴포넌트
: 재사용될 코드를 이해하는 비용들과 재사용 중인 코드에 대한 엔지니어의 익숙함변형 컴포넌트
: 재사용되는 코드를 변경하는 비용(설계, 코드, 통합 변경 포함)
- 코드 크기는 컴포넌트들을 위해 개발되은 새로운 코드 더하기 기존 코드를 재사용하고 통합하는 것에
- 재사용 노력을 추정하는 최종 공식
- Effort = A*ESLOC^B*M
- A, B, M은 초기 설계 모델에서 사용되는 것과 같은 값
- 총노력을 계산하기 위해 Size 매개변수를 ESLOC으로 변경하여 표준 추정 공식 적용
- Effort = A*ESLOC^B*M
포스트 아키텍처 모델
- 시스템에 대한 초기 아키텍처 설계가 있을 때 사용
- 프로젝트 크기에 대한 더 정확한 추정치를 구할 수 있어야 함
- 시스템이 어떻게 서브시스템과 컴포넌트들로 나누어질 것인지를 알고 있다고 가정
- 시스템이 어떻게 서브시스템과 컴포넌트들로 나누어질 것인지를 알고 있다고 가정
- 프로젝트 크기에 대한 더 정확한 추정치를 구할 수 있어야 함
- 초기 설계 추정치에서 사용한 것과 같은 기본 공식 사용
- PM = A*Size^B*M
- 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 : 초기 설계 모델에서 논의한 복잡도 관련 지수
- TDEV = 3*(PM)^{0.33+0.2(B-1.01)}
- 필요한 시간은 프로젝트에 투입된 사람의 수와 무관함
인원 배정 요구사항
- 프로젝트에 사람을 추가로 투입하면 기존 팀 멤버들의 생산성은 감소
- 프로젝트에 참여하는 사람의 수는 프로젝트 단계에 따라 달라짐
- 시작 단계 → 초기 설계를 수행하기 위해 적은 수의 사람 필요
- 시스템의 개발과 테스팅 중 → 가장 큰 규모 필요
- 시스템 배포 준비 → 규모가 줄어듦
- 일반적으로 많은 사람들이 프로젝트에 참여할 때에, 더 많은 총노력이 필요함
- 프로젝트 인원의 급격한 증가는 종종 일정 지연과 관련 있음