프로젝트 계획 작업에서는 비용 예측과 기간 예측이 정말 정말 중요하다.
그래서 그러한 예측은 어떻게 하는지 알아보자.
소프트웨어 개발 비용의 대부분은 인력에 대한 비용이라서 대부분 MM(man - month)로 초점이 맞춰져있다.
그 이유는 소프트웨어는 다른 공학과는 다르게 원자재라는 것이 거의 없다.
인건비 + 하드웨어 + 소프트웨어 비용 + 사무실, 재료비 등 이것이 비용의 전부인 경우가 많다.
그 또한 인건비가 대부분이라 비용 예측이 사실 노력 예측이라고 말해도 과언이 아니다.
그렇다면 노력 예측은 어떻게 해야하는 것일까?
건축 공사와 달리 개발자 중심
개발자의 능력에 따른 생산성의 차이
다양한 개발 프로세스로 인한 표준화/자동화의 어려움
사람 by 사람이다 보니까 예측이 너무 어렵다.
그래도 비용에 관련된 내용을 목록화 해보았다.
우선 노력을 정량적으로 예측하는 방법은 1. 소요 기간 2. 프로그램 규모
기준으로 위 2가지를 사용하여 예측할 수 있다.
소요 기간이 기준이 되는 방법을 상향식(bottom - up)이라고 한다.
소요 기간을 구하고 여기에 투입되어야 할 인력 과 투입 인력의 참여도를 곱하여
최종 인건 비용을 계산한다.
소작업에 대한 노력을 일일이 예측하여 계획할 수 있다는 장점이 있다.
그렇지만 개인의 주관에 의한 추정도 될 수 있다.
프로그램의 규모가 기준이 되는 방법은 하향식 (top - down)이라고 한다.
프로그램의 규모를 예측하고 과거 경험을 바탕으로 예측한 규모에 대한 소요 인력과 기간을 추정한다.
프로그램의 규모는 LOC로 나타내기도 하며 기능 점수(functional points)로 나타내기도 한다.
위에서 노력 예측은 주관적, 아니면 모델을 이용한다고 했는데
그 모델 중에 유명한 모델 COCOMO 코코모가 있다. 이름 귀엽네
약자는 Constructive Cost Model이다.
Boehm이라는 사람이 개발했다고 한다. (회귀분석을 통해서)
노력= A * (Size)^B * M
이라는 위의 공식을 바탕으로 만들어졌다.
A는 소프트웨어의 유형
B는 1에서 1.5 사이의 값으로 노력은 규모에 선형적으로 비례한다는 뜻을 가진다
M은 프로젝트에 영향을 주는 다른 요소들을 말한다.
ex 제품의 성격, 개발 구성원의 특성 등 노력을 보정하기 위한 요소이다.
기본적인 공식은 이렇다
**프로그램이 유기형인지, 반결합형인지, 내장형인지 구분할 줄 알아야 한다.
// 저기 산정 공식에서 **는 ^를 말한다. (지수를 말한다)
**시스템의 복잡도: 내장형>> 반결합형 >> 유기형
** KDSI(Kilo Delivery Source Instruction) 규모를 뜻한다.
예를 들자면
**CAD 시스템은 반결합형 시스템이다.
하지만 위의 기본공식에서는 M이 고려되질 않았다. 보정이 없단 얘기다.
그래서 보정을 적용한 COCOMO, 중간 COCOMO 형식이 나왔다. M은 이 표를보고 집어넣는 것이다.
노력에 가중치를 두는 것이다. 보다 정확한 예측을 위해서
이러한 계산을 아무리해도 한계가 있다.
첫 번째로 프로젝트 초기 단계에서 Size 값 자체를 구하기 어렵다. 요구 명세로 LOC를 파악하는 것은 힘들다. 그래서 기능의 규모를 대신해서 예측하고는 한다.
두 번째로 모델에서 B와 M의 값에 영향을 주는 요소들이 너무 주관적이다. 판단하는 사람마다 개발 되어질 시스템의 경험정도가 달라서 값도 달라질 것이다.
세 번째로 소프트웨어 제품을 하나의 개체로 보는 경향이 있는데 사실 메인 아래 서브 시스템으로 구성되어 있는 경우가 많다. 다시 말해서 일부는 유기형 다른 일부는 내장형인 경우도 있다는 말이다.
위의 COCOMO를 요약하자면
한계가 있다면 한계를 돌파하는 것이 사람이다.
그래서 1995년에 COCOMO II 모델을 만들었다.
원시코드의 라인수 예측의 한계점을 단계별로 값을 예측해서 인건비를 예측하는 방법으로 바꿨다.
3단계가 있다.
우선 구하는 방법은 이렇다.
1. 어플리케이션을 구성하는 화면, 보고서, 3세대 언어 컴포넌트의 숫자 파악
2. 화면과 보고서의 복잡도 수준 결정
3. 화면과 보고서, 3세대 언어 컴포넌트를 위한 복잡도 가중치 결정
4. 화면,보고서,3세대 언어 컴포넌트의 개수에 가중치를 곱하여 객체점수(Object point, ) 계산
5. 재사용률(reuse)를 예측하여 NOP(New Object Point) 계산
6. 객체 점수 생산성(PROD) 결정
7. 객체 점수 생산성을 식 PM=NOP/PROD에 대입하여 최종 PM(Person Month) 계산
**가중치, 복잡도 수준 같은 것들은 표를 보고 결정한다
예를 들자면
이런 식으로 계산한다
'컴퓨터(Computer Science) > 소프트웨어공학(Software engineering)' 카테고리의 다른 글
프로젝트 계획 (4) -스케줄링(Scheduling) [ 소프트웨어공학] (0) | 2020.04.17 |
---|---|
프로젝트 계획 (3) -기능점수[ 소프트웨어공학] (0) | 2020.04.17 |
프로젝트 계획 (1) [ 소프트웨어공학] (0) | 2020.04.16 |
방법론 개념과 특징 [소프트웨어공학] (0) | 2020.04.15 |
지원 프로세스 개념과 특징 [소프트웨어공학] (0) | 2020.04.15 |