소프트웨어 규모 산정
컴퓨터를 기반한 시스템을 구축하면서 가장 비용이 많이 든 요소는 다름이 아니라 소프트웨어이다. 그래서 소프트웨어의 규모를 알아내는 일이 매우 중요하며 그 역사도 매우 깊다. 이러한 소프트웨어 비용은 사람, 기술, 환경 및 이를 둘러싼 정치, 정책이란 여러 변수의 영향을 많이 받는다.
그래서 소프트웨어 비용의 신뢰성을 높이고 그 노력을 추정하기 위해 많은 방법이 있었다. 프로젝트가 끝날 때까지 추정을 미뤄보기도 하고 소프트웨어 공학을 활용하여 활동들을 분해하여 분석하기도 했으며 과거의 경험과 데이터를 바탕으로 추정하고 도구를 사용하기도 했다.
특히 개발 프로젝트의 대상인 소프트웨어의 범위를 양적인 크기와 질적인 수준으로 측정하여 규모를 파악함으로써 소요 공수, 투입자원 및 소요 기간을 파악하여 실행할 수 있는 계획을 수립하기 위해 규모를 산정한다. 이를 통해 투입인력 개개인의 생산성을 측정할 수 있으며 원가를 파악하여 비가시적인 소프트웨어 개발에 대한 최소한의 재무적 성과를 구축할 수 있다. 또한 조직의 실효성 있는 경영계획과 정책 수립에 크게 이바지를 할 수 있다.
앞선 글에서도 언급했었지만 소프트웨어 규모를 산정하는 방법은 다양하다. 양적 규모를 산정하는 방법에는 LOC(Line Of Code) 방식, Putnam(생명주기 예측) 모델 및 CoCoMo(Constructive Cost Model) 등이 있고 질적 규모를 산정하는 방법에는 Function Point, McCabe 회전 복잡도, Halstead 소프트웨어과학 등이 있다. 과거에는 소프트웨어도 단순하고 규모가 크지 않아 양적 규모 산정 방법만으로도 충분했으나 근래에는 소프트웨어의 복잡도도 증가하고 그 규모도 너무나 커져서 질적 규모 산정 방법으로 접근하며 그중에서 Fuction Point를 많이 사용하는 추세이다.
기능점수방식(Function Point)
Fuction Point는 사용자 관점에서의 소프트웨어 개발 규모를 측정하기 위한 표준 ISO/IEC 14143(FSM: Functional Size Measurement)기법으로서 사용자가 요구하여 받는 기능들을 측정하고 구현 기술과 무관하게 소프트웨어 개발 및 유지보수의 규모를 산정할 수 있다. 여기서 기능점수란 사용자 관점에서의 측정된 소프트웨어 기능의 양을 말하며 소프트웨어 기능은 논리적 의미에 따라 데이터와 트랜잭션으로 크게 나눠 볼 수 있다.
기능점수방식에서도 크게 일반적인 기능점수 산정 방법(정통 법)과 평균 복잡도를 적용하는 방법(간이 법)의 두 가지가 있으며 정통 법은 소프트웨어 기능을 도출, 각 기능의 유형별 복잡도를 고려하는 일반적인 방법으로 소프트웨어 개발 설계공정 후에 보통 사용되며, 간이 법은 기능의 복잡도를 판단하기 어려운 경우에 적용하며 계산 절차는 정통법과 동일하나 기능점수를 기능 유형별 평균 복잡도를 적용하여 산출한다. 이는 보통 기획 및 발주단계에서 사용된다.
< 비용과 노력 추정 매트릭스 >
기능점수방식은 기능을 중심으로 하는 소프트웨어와 개발과정에 대한 간접척도를 다루며 프로젝트 완료 후 생산성 평가목적으로 개발되었으나 사전 예측 모델로도 이용되고 있다. 이를 좀 더 살펴보면 생산성은 FP/노력으로 볼 수 있으며 품질은 오류 발생률(오류 수/FP)로 측정할 수 있다. 결함 수를 FP로 나누면 결함 발생률이며 비용효율성(=비용/FP) 및 문서화를 위한 측정도 가능하다.
이런 기능점수방식은 프로그래밍 언어와 독립적이어서 환경에 영향을 받지 않는 큰 장점이 있다. 하지만 보다시피 이를 잘 활용하기 위해서 숙련된 기술이 필요하고 주관적인 자료들도 많고 수집도 어려운 점이 있다. 특히 사용자 관점에서 이뤄지다 보니 감춰진 측정항목들이 있으며 사용되고 있는 파일 수를 정확히 파악하기가 어렵다.
아래는 기능점수에서 사용하는 5가지 측정 항목이다.
EI(External Input)는 외부 입력측정(사용자 입력 개수), EO(External Output)는 외부 출력측정(사용자 출력 개수), EQ(External inQuery)는 외부 조회측정(사용자 질의 개수)이다. ILF(Internal Logical File)은 내부파일 개수, EIF(External Interface File)는 외부 인터페이스 개수이다.
계산 방법
🚩 단계1 : FP 테이블에 따른 기능 수 계산
기능유형 Count | 단순 | 보통 | 복잡 | 기능수(FC)
외부 입력: [ ]* 3 4 6 = [ ]
외부 출력: [ ]* 4 5 7 = [ ]
외부 조회: [ ]* 3 4 6 = [ ]
내부 논리파일: [ ]* 7 10 15 = [ ]
외부 인터페이스 파일: [ ]* 5 7 10 = [ ]
🚩 단계2 : 복잡도 조정값 계산
14개 기술적 복잡도 요소에 영향도(0 ~ 5의 정수 표시)를 평가하여 합산하여 계산한다. 총영향도(0~70)는 항목(14개)에 영향도(0~5)를 곱하며 기술적 복잡도(TCF)는 0.65 +0.01 * 총영향도로 나타낼 수 있다. 여기서 14개 요소에는 통신, 분산처리, 시스템성능, 사용 빈도, 트랜잭션 비율, 온라인 요구, 온라인복잡도, 파일갱신, 재사용성, 처리 복잡성, 유지보수성, 회복성, 이식성, 분산성이 있다.
🚩 단계3 : FP 계산
기능점수(FP)를 계산하며 FC (기능 수)에 TCF (기술적 복잡도)를 곱한다.
🚩 단계4 : 경험 데이터 이용 프로젝트 비용과 개발 노력 추정
전체적인 프로젝트 비용은 FP에 FP 당 비용(경험치)을 곱하며, 개발 노력은 FP를 생산성(경험치)으로 나눠 측정한다.
※ 직접 해봐야 안다.
쉽지는 않다. 과거의 유사 사례 경험, 양식들이 있다면 우선은 먼저 자료를 구해서 진행하고 있는 프로젝트에 적용해 보길 바란다. 쉬운 방식으로 몇 번 하다 보면 얼추 감이 온다. 그러면서 다른 산정 방법도 같이 하여 서로 값을 비교해보는 것도 좋다. 자주 해보고 나만의 경험을 쌓고 데이터를 쌓아가면서 공부를 해봐야 한다.