대부분의 일이 계획을 잘 세워야 성공하듯, S/W 개발 또한 사전에 계획을 잘 세워야 성공할 수 있다.

S/W 개발 계획에는 크게 3가지가 있다.

  1. 비용 계획
  2. 일정 계획
  3. 인력 계획

 

만약 계획없이 S/W 개발을 한다면?

일정은 지연될 것이고, 비용은 초과할 것이고, 품질은 저하될 것이다. 그로 인해 유지보수의 비용 또한 증가할 것.

 

 

 

비용 계획


비용 계획을 잘 세우기 위해선 당연히 S/W 개발에 대한 비용을 어떻게 산정할 것인가에 대한 이해가 필요하다.

S/W 개발은 전자 제품 생산이나 건축 공사와는 달리 사람(개발자)이 중심이 되고 사람에 매우 의존적이다.

그렇다보니 명확한 개발비 산출이 어렵다.

 

S/W 개발 비용에 영향을 주는 요소는 다음과 같은 것들이 있다.

  1. 개발자의 역량
  2. SW의 복잡도 (단순 응용 앱인지, 유틸리티인지, 시스템 프로그램인지에 따라 난이도가 달라진다.)
  3. SW의 크기 (규모가 클수록 참여 인력도 많아지고 그러면 당연히 복잡도 또한 상승한다.)
  4. 개발 기간
  5. 요구되는 신뢰도 수준 (신뢰도가 높아질수록 만들기 까다롭다.)
  6. 기술 수준 (사용하는 기술의 생산성에 따라 개발기간이 줄어든다. 예를 들어 C보다 파이썬이 생산성이 좋다.)

 

그럼 이제 가장 중요한 S/W 개발 비용을 산정하기 위한 기법들은 어떤 것들이 있는지 알아보자.

S/W 개발 비용을 산정하기 위한 기법은 다음과 같은 것들이 있다.

  1. 하향식 산정 기법 (Top-Down)
        전문가 판단 기법
        델파이 기법
  2. 상향식 산정 기법 (Botton-Up)
        원시 코드 라인 수 (LOC, Line Of Code)
        개발 단계별 노력 기법
  3. 수학적 산정 기법
        COCOMO 기법
        Putnam 기법
        기능 점수 방법

 

3가지 S/W 개발 비용 산정 방식에 대해 알아보자.

 

 

 

1. 하향식 산정 기법 (Top-Down)


하향식 산정 기법은 과거의 유사 경험을 바탕으로 회의를 통해 산정하는 비과학적인 기법이다.

3가지 방식 중 가장 기준이 없고, 부정확한 방식이다. (길게 정리할 것도 없음)

 

1) 전문가 판단 기법

    조직 내 경험이 있는 2명 이상의 전문가에게 비용 산정을 의뢰하는 것

 

2) 델파이 기법

위의 전문가 판단 기법의 주관적인 편견을 보완하기 위해 익명으로 투표하는 것처럼 여러 전문가의 의견을 익명으로 종합하여 판단한다. 익명으로 하는 이유는 전문가들 사이에서도 입지나 영향력이 서로 다르기 때문에 어떤 영향력이 있는 한 사람의 의견에 치우치는 문제를 방지하기 위함이다.

 

 

 

2. 상향식 산정 기법 (Bottom-Up)


상향식 산정 기법은 프로젝트의 세부 작업 단위별로 비용을 산정한 후 전체 비용을 합산하여 산정하는 방식이다.

이 방식도 어느정도 개인의 주관에 따르지만 하향식보단 정확하다.

 

1) 원시 코드 라인 수 (LOC, Line Of Code) 기법

각 기능의 원시 코드 라인 수의 비관치(가장 많은 라인 수), 낙관치(가장 적은 라인 수), 중간치(기대치, 평균 라인 수)를 측정 후 예측치를 구하고, 이를 이용해 노력, 개발 비용, 개발 기간, 생산성 4가지의 비용을 산정하는 기법

  • 낙관치 : 한 모듈의 라인 수를 가장 적게 생각할 때의 예상 라인 수 (가중치 1 부여)
  • 비관치 : 한 모듈의 라인 수를 가장 많게 생각할 때의 예상 라인 수 (가중치 1 부여)
  • 중간치 : 한 모듈의 라인 수를 보통이라고 생각할 때의 예상 라인 수 (가중치 4 부여)
  • 추정 LOC : (낙관치 + 4 $\times$ 중간치 + 비관치) / 6

LOC 기법에서는 4가지의 비용을 산정한다.

  1. 노력$^{M/M}$ : 한 달 안에 개발을 완료하기 위해 필요한 개발자의 수
                = 개발 기간 $\times$ 참여 인원 = 추정 LOC / 1인당 월평균 생산 코드 라인 수
  2. 개발 비용 = 노력$^{M/M}\;\times$ 단위 비용(1인당 월평균 인건비)
  3. 개발 기간 = 노력$^{M/M}$ / 참여 인원
  4. 생산성 : 1인당 월에 생산하는 코드 라인 수
             = LOC / 노력$^{M/M}$

 

노력에서 상단에 붙인 M/MMan/Month의 약자로 프로젝트를 한 달 안에 완료해야할 때 필요한 개발자의 수를 나타낸 것.

위의 산정 공식을 보면 알겠지만 노력$^{M/M}$을 구하는 산정 공식은 2가지.

 

문제 1) SW 개발 기간은 1년이다. 5명의 개발자가 1년동안, 7명의 개발자가 5개월 동안 참여한다면 이 SW 개발의 노력$^{M/M}$은 얼마인가?

    답 : (5명 $\times$ 12개월) + (7명 $\times$ 5개월) = 95$^{M/M}$

 

문제 2) LOC 기법에 의하여 예측된 총 라인 수가 30,000라인, 개발에 참여할 개발자가 5명, 개발자들의 평균 생산성이 월간 300라인일 때 개발에 소요되는 기간은?

    답 : 노력$^{M/M}$ = LOC / 1인당 월평균 생산 코드 라인 수 = 30000 / 300 = 100명

         개발 기간 = 노력$^{M/M}$ / 투입인원 = 100 / 5 = 20개월

 

2) 개발 단계별 노력 (Effort Per Task) 기법

위의 LOC 기법은 코딩에 대한 비용만 산정한다. 하지만 실제론 요구 분석, 설계 등의 단계에서도 많은 비용이 든다. 해당 기법은 LOC 기법을 확장한 기법으로, LOC 기법을 코딩 단계뿐만 아니라 SW 개발 생명주기 각 단계별로 적용시켜 모든 단계에서의 비용을 산정하는 기법이다.

 

SW 개발 생명주기

    계획 - 요구사항 정의$\circ$분석 - 설계 - 코딩 - 테스트 - 유지보수

 

 

 

3. 수학적 산정 기법


수학적 산정 기법은 상향식 산정 기법에 속하며 경험적 추정 기법 또는 실험적 추정 기법이라고도 한다.

 

1) COCOMO 방법

개발할 S/W의 규모(LOC)를 예측한 후 S/W 종류에 따라 각 비용 산정 공식에 대입하여 비용을 산정한다.

쉽게 생각하면 위의 LOC 기법을 S/W 종류에 따라 다르게 적용시키는 것. (S/W 종류에 따라 난이도가 천차만별이니)

그럼 여기서 말하는 S/W 종류(=개발 유형)는 뭘까?

S/W 종류(=개발 유형)는 S/W의 규모, 복잡도 등에 따라 아래의 그림과 같이 분류해볼 수 있다.

 

S/W의 종류를 선택했다면 다음으로는 어떤 COCOMO 모델을 사용할지를 선택해야 한다. 

COCOMO 모델은 총 3가지가 있다.