소프트웨어 개발 비용 산정
소프트웨어 개발 비용 산정이란 개발에 필요한 자원, 인원, 기간 등으로 소프트웨어 프로젝트의 규모를 파악하여 미리 소프트웨어 개발에 필요한 비용을 산정하는 것을 말한다. 비용이 너무 낮으면 개발팀에 부담이 되고, 높으면 효율성이 저하되기 때문에 적정선에서 잘 산정해야 한다. 그러나 개발자의 역량이 개발 기간과 품질에 영향을 주고 소프트웨어 개발 프로세스는 다양하므로 표준화나 자동화가 어렵다. 이러한 상황으로 인해 소프트웨어 개발 비용을 산정하기란 까다로운데, 정해진 산출법을 통해서 동일한 결과를 얻을 수 있는 개발 비용 산정 방법 몇 가지를 소개한다.
하향식 비용 산정 기법
과거의 유사한 경험을 바탕으로 전문 지식이 많은 개발자가 회의를 통해 개발 비용을 산정하는 비과학적인 기법이다. 프로젝트의 전체 비용을 산정하고 작업별로 비용을 세분화한다. 팀 내에서 경험이 풍부한 2명 이상의 전문가들에게 비용 산정을 의뢰하는 전문가 판단 기법은 가장 편리하고 신속하게 비용을 산정할 수 있기에 의뢰자로부터 신뢰를 얻을 수 있다. 하지만 과거의 프로젝트와 완전히 동일하지 않으므로 프로젝트에 예상치 못한 요소들이 있다는 점을 간과할 수 있고, 비용 산정의 결과가 개인적이고 주관적일 수 있다는 한계점도 있다. 한 명의 조정자(Coordinator)와 다수 전문가의 의견을 취합하여 비용을 산정하는 델파이(Delphi) 기법은 우선 여러 전문가가 모여서 각자의 의견대로 비용을 산정한 후에 익명으로 조정자에게 제출한다. 조정자는 각 전문가의 의견을 낭독하여 서로 의견을 공유할 수 있도록 하고 조율 과정을 반복해서 최종적으로 일치되는 비용이 도출되면 이를 개발 비용으로 산정한다.
상향식 비용 산정 기법
하향식 비용 산정 기법과는 반대로 진행되는데 프로젝트의 세부 작업 단위별로 비용을 먼저 산정한 후에 이를 합산하여 전체 프로젝트의 개발 비용을 산정하는 기법이다. 소프트웨어 각 기능의 원시 코드 라인 수의 비관치, 낙관치, 기대치를 구하여 예측치를 구하고 이를 이용하여 비용을 산정하는 기법인 LOC(Line Of sourceCode, 원시 코드 라인 수)는 측정이 용이하고 이해하기 쉬워서 많이 사용된다. LOC기법은 개발하려는 소프트웨어의 코딩만을 고려하여 비용을 산정하는데 실제로 요구 분석, 설계 등의 단계에서도 인력과 자원을 필요로 한다. 이를 보완하기 위해 고안된 개발 단계별 노력(Effort Per Task) 기법은 소프트웨어 개발 생명 주기의 단계별로 비용을 산정한다. 따라서 LOC보다 정확한 값을 도출할 수 있다.
수학적 산정 기법
이 또한 상향식 비용 산정 기법의 하나로, 경험적 추정 기법 또는 실험적 추정 기법이라고도 한다. COCOMO(COnstructive COst MOdel) 모형, Putnam 모형, 기능 점수(FP) 모형이 있으며, 각 모형에서는 지정된 수학적 공식을 사용하여 비용을 산정하는데, 이 공식은 과거 유사한 프로젝트를 기반으로 경험적으로 유도된 것이다. COCOMO 모형은 비용을 산정할 때 개발할 소프트웨어의 규모(LOC) 즉, 원시 코드의 라인 수를 예측한 후 소프트웨어의 종류에 따라 각각의 공식에 대입하여 비용을 산정한다. Putnam 모형은 소프트웨어 개발 생명 주기의 전 과정 동안 사용되는 노력의 분포를 가정하여 가시화해주는데, 시간에 따른 함수로 표현되는 Rayleigh-Norden 곡선의 노력 분포도를 기초로 하고 주로 대형 프로젝트에 활용된다. 기능 점수(FP) 모형은 기능 점수(Function Point)를 구한 후 이를 토대로 비용을 산정한다. 기능 점수란 개발하려는 소프트웨어 기능의 크기를 측정하는 단위이다. 데이터의 입출력과 데이터베이스 테이블, 인터페이스 등의 수를 판단 근거로 삼고 라인 수와 무관하게 기능이 많으면 규모도 크고 복잡도도 높다고 판단한다. 이와 같은 방법은 사무용 또는 관리용 소프트웨어에서 유용하다. 측정의 일관성을 위해서 개발의 기술이나 방법, 제품의 품질 수준 등은 고려하지 않는다. 즉 소프트웨어 개발 언어와 무관하게 산정되고, 경험을 바탕으로 단순, 보통, 복잡한 정도에 따라서 각각 가중치를 부여한다. 소프트웨어 개발 생명 주기의 전체 단계에서 사용할 수 있다.
'소프트웨어 공학' 카테고리의 다른 글
데이터 모델의 구성요소 : 개체, 속성, 관계 (0) | 2021.11.19 |
---|---|
관계 대수의 개념과 연산자 및 관계 해석 (0) | 2021.11.19 |
암호 알고리즘의 정의와 암호화 기법의 종류 (0) | 2021.11.18 |
미들웨어(Middleware)의 정의 및 종류 (0) | 2021.11.18 |
릴리즈 노트 작성 시 고려사항과 작성 순서 (0) | 2021.11.18 |
댓글