본문 바로가기
소프트웨어공학

[소프트웨어공학] 3. Cost Estimation

by leziwn.cs 2023. 9. 13.
Estimation uncertainty

Estimation uncertainty

--> 예측 범위가 점차 줄어든다.

 

 

Estimation techniques
  • 조직은 소프트웨어 노력, 비용을 추정해야 한다.
  • 비용 추정에 사용할 수 있는 두 가지 유형의 기술:
    - 경험 기반 기법(Experience-based approaches): 관리자의 과거 프로젝트 경험, 애플리케이션 도메인을 근거로 추정
    - 알고리즘 비용 모델(Algorithmic cost modeling): 제품 속성의 추정치(크기 등), 프로세스 특성, 참여한 직원들의 경험을 근거로 하는 공식적 접근법

 

1) Experience-based approaches

: 과거 프로젝트 경험과, 이러한 프로젝트에서 소프트웨어 개발 활동에 들인 노력에 기반한 판단에 의존한다.

--> But, 기술의 변화는 이전의 추정 경험들이 새로운 시스템에 도움이 되지 않게 할 수 있다.

 

2) Algorithmic cost modeling

: 프로젝트 크기의 추정치, 개발되는 소프트웨어의 유형, 다른 팀, 프로세스, 제품 요인들을 근거로 하는 수학적 공식을 사용한다.

Algorithmic cost modeling

  • Size: 비용 추정에 가장 일반적으로 사용하는 제품 속성, "코드 크기"

--> 대부분의 모델들이 유사하지만, A, B, M에 대해 다른 값을 가진다.

 

 

Estimation techniques - Algorithmic cost modeling
Estimation accuracy

Algorithmic cost modeling

  • Size: 소프트웨어 시스템의 크기는 완성되어야 정확하게 알 수 있다.

▷ 최종 크기에 영향을 미치는 몇 가지 요소

  • COTS와 컴포넌트의 사용 
    - COTS: 상업적인 소프트웨어를 얼마나 사용하는가?
    - 컴포넌트: 기존에 사용했던 컴포넌트들을 얼마나 활용하는가?
  • 프로그래밍 언어
  • Size: 개발 프로세스가 진행됨에 따라 Size(크기) 추정치가 더 정확해진다.
  • M: M과 M에 기여하는 요인들의 추정치는 주관적이다.

 

Size related measures

1. 코드 라인(LOC)

  • 시스템의 크기와 문서의 양 사이에 선형 관계가 있다고 가정한다.
  • 동일한 기능을 구현할 때, 고급 언어 코드 크기 < 저급 언어 코드 크기
  • --> 코드 라인을 기반으로 한 생산성 측정은 장황한 코드를 작성하는 프로그래머가 간결한 코드를 작성하는 프로그래머보다 더 생산적임을 시사한다. (부정확)

코드 라인(LOC)를 기반으로 한 생산성(Productivity) 평가: 부정확하다.

 

2. 기능 점수(Function Points)

  • 프로그램 특성의 조합 기반
    - 외부 입출력, 사용자 상호작용, 외부 인터페이스, 시스템에서 사용하는 파일
  • 각각의 연관된 가중치가 존재한다. 
    --> 미보정 기능 점수(UFP): 각 유형의 요소에 가중치를 곱하고, 모든 값을 합산하여 계산한다.

미보정 기능 점수(UFP)
UFP 계산 - 예

 

--> 기술 복잡도(TCF): 기능 점수(FP) 계산을 위한 기술 인자

  • 영향도(DI; Degree of Influence): 14개의 factor들 각각에 대하여 0(not present/no influence) ~ 5(string influence)의 가중치 값을 부여한 후, 14 factor들의 가중치 값을 더한다.

영향도(DI; Degree of Influence)

▷ 기능 점수(FP; Function Points) = 미보정 기능 점수(UFP) * 기술 복잡도(TCF)

 

▶ 코드 크기(Size) = 평균 코드 줄 수(AVC; Average number of lines of Code) * 기능 점수(FP; Function Points)

  • 평균 코드 줄 수(AVC; Average number of lines of Code)

평균 코드 줄 수(AVC; Average number of lines of Code)

 

 

Algorithmic cost modeling: The COCOMO model
  • 프로젝트 경험에 기반한 실증적 모델
  • 문서화가 잘 되어 있으며, 특정 소프트웨어 업체와 관계없이 '독립적'인 모델
  • 초기 버전(COCOMO 81) 공개부터 다양한 인스턴스화를 거쳐 COCOMO 2까지 오랜 역사를 가진다.

 

The COCOMO 81

Compute Nominal Effort

  • Effort = A * Size^B * M

M
Effort = A * Size^B * M

 

COCOMO 2 model

: 소프트웨어 개발에 대한 현대적 접근법들에 근거하여 더 자세한 추정치를 생성하는 여러 서브 모델들을 포함한다.

▶ COCOMO 2의 서브 모델

  • 애플리케이션 결함 모델: 기존 컴포넌트들을 이용하여 소프트웨어를 구성할 때 사용한다.
  • 초기 설계 모델: 요구사항이 도출된 이후, 시스템 설계의 초기 단계동안 사용한다.
  • 재사용 모델: 재사용 가능한 구성요소들을 통합하는 노력을 계산할 때 사용한다.
  • 포스트 아키텍처 모델: 시스템 아키텍처가 설계되고, 시스템에 대한 추가 정보가 제공되면 사용한다.