Estimation uncertainty

--> 예측 범위가 점차 줄어든다.
Estimation techniques
- 조직은 소프트웨어 노력, 비용을 추정해야 한다.
- 비용 추정에 사용할 수 있는 두 가지 유형의 기술:
- 경험 기반 기법(Experience-based approaches): 관리자의 과거 프로젝트 경험, 애플리케이션 도메인을 근거로 추정
- 알고리즘 비용 모델(Algorithmic cost modeling): 제품 속성의 추정치(크기 등), 프로세스 특성, 참여한 직원들의 경험을 근거로 하는 공식적 접근법
1) Experience-based approaches
: 과거 프로젝트 경험과, 이러한 프로젝트에서 소프트웨어 개발 활동에 들인 노력에 기반한 판단에 의존한다.
--> But, 기술의 변화는 이전의 추정 경험들이 새로운 시스템에 도움이 되지 않게 할 수 있다.
2) Algorithmic cost modeling
: 프로젝트 크기의 추정치, 개발되는 소프트웨어의 유형, 다른 팀, 프로세스, 제품 요인들을 근거로 하는 수학적 공식을 사용한다.

- Size: 비용 추정에 가장 일반적으로 사용하는 제품 속성, "코드 크기"
--> 대부분의 모델들이 유사하지만, A, B, M에 대해 다른 값을 가진다.
Estimation techniques - Algorithmic cost modeling
Estimation accuracy

- Size: 소프트웨어 시스템의 크기는 완성되어야 정확하게 알 수 있다.
▷ 최종 크기에 영향을 미치는 몇 가지 요소
- COTS와 컴포넌트의 사용
- COTS: 상업적인 소프트웨어를 얼마나 사용하는가?
- 컴포넌트: 기존에 사용했던 컴포넌트들을 얼마나 활용하는가? - 프로그래밍 언어
- Size: 개발 프로세스가 진행됨에 따라 Size(크기) 추정치가 더 정확해진다.
- M: M과 M에 기여하는 요인들의 추정치는 주관적이다.
Size related measures
1. 코드 라인(LOC)
- 시스템의 크기와 문서의 양 사이에 선형 관계가 있다고 가정한다.
- 동일한 기능을 구현할 때, 고급 언어 코드 크기 < 저급 언어 코드 크기
- --> 코드 라인을 기반으로 한 생산성 측정은 장황한 코드를 작성하는 프로그래머가 간결한 코드를 작성하는 프로그래머보다 더 생산적임을 시사한다. (부정확)

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


--> 기술 복잡도(TCF): 기능 점수(FP) 계산을 위한 기술 인자
- 영향도(DI; Degree of Influence): 14개의 factor들 각각에 대하여 0(not present/no influence) ~ 5(string influence)의 가중치 값을 부여한 후, 14 factor들의 가중치 값을 더한다.

▷ 기능 점수(FP; Function Points) = 미보정 기능 점수(UFP) * 기술 복잡도(TCF)
▶ 코드 크기(Size) = 평균 코드 줄 수(AVC; Average number of lines of Code) * 기능 점수(FP; Function Points)
- 평균 코드 줄 수(AVC; Average number of lines of Code)

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


- Effort = A * Size^B * M


COCOMO 2 model
: 소프트웨어 개발에 대한 현대적 접근법들에 근거하여 더 자세한 추정치를 생성하는 여러 서브 모델들을 포함한다.
▶ COCOMO 2의 서브 모델
- 애플리케이션 결함 모델: 기존 컴포넌트들을 이용하여 소프트웨어를 구성할 때 사용한다.
- 초기 설계 모델: 요구사항이 도출된 이후, 시스템 설계의 초기 단계동안 사용한다.
- 재사용 모델: 재사용 가능한 구성요소들을 통합하는 노력을 계산할 때 사용한다.
- 포스트 아키텍처 모델: 시스템 아키텍처가 설계되고, 시스템에 대한 추가 정보가 제공되면 사용한다.
'소프트웨어공학' 카테고리의 다른 글
| [소프트웨어공학] 4. Software Processes (2) (0) | 2023.09.21 |
|---|---|
| [소프트웨어공학] 4. Software Processes (1) (0) | 2023.09.21 |
| [소프트웨어공학] 2. Project Planning (0) | 2023.09.12 |
| [소프트웨어공학] 1. An Introduction to Software Engineering (0) | 2023.09.07 |
| [소프트웨어 공학] Ch2: 소프트웨어 프로세스 (0) | 2023.08.06 |