기초지식공부/소프트웨어공학

비용 산정 방법

DevBabamba 2019. 6. 10. 08:55
반응형

KMooc에 공개 되어 있는 '쉽게 배우는 소프트웨어 공학' 강의 내용을 정리한 것입니다.(강의: 공주대학교 컴퓨터공학부 김치수 교수)

또한, https://terms.naver.com/list.nhn?cid=58528&categoryId=58528를 확인하시면, '쉽게 배우는 소프트웨어 공학' 책 또한 공개되어있으니 참고하여주시면 감사하겠습니다.

1.top-down 산정 기법

  • 과거의 유사 경험을 바탕으로 회의를 통해 산정하는 비과학적인 기법

  • 전문가 판단 기법

    • who : 경험이 많은 전무가가 개발 비용 산정
    • when : 짧은 시간에 개발비를 산정하거나 입찰에 응해야하는 경우 많이 사용
    • 단점 :
    • 수학적 계산 방법보다 경험에만 의존할 경우 부정확할 수 있음
    • 경험 해본 프로젝트와 유사하다고 생각하여 과소 평가할 우려 있음
  • 델파이 기법

    • 전문가의 경험을 중요시 하여 비용 산정 -> 전문가 판단 기법과 공통점
    • 전문가들의 편견이나 분위기에 영향을 받지 않도록 조정자를 둠 -> 전문가 판단 기법과 차이점

2.bottom-up 산정 기법

  • 세부 작업 단위 별로 비용 산정 -> 전체 비용 합산
  • LOC 기법
    • 각 기능의 원시 코드 라인 수의 비관치, 낙관치, 중간치 측정 -> 예측지 산정
  • 개발 단계별 노력
    • 소프트웨어 개발 생명 주기의 각 단계별 (인/월수, M/M)로 노력을 산정

source code line 수(LOC) 기법

  • 비관/낙관/중간치 측정 -> 예측치 계산 -> 비용 산정(노력, 개발비용, 생산성)
  • 낙관치 : 한 모듈의 라인 수를 가장 적게 생각할 때의 예상 라인 수(가중치 1부여)
  • 비관치 : 한 모듈의 라인 수를 가장 많게 생각할 때의 예상 라인 수(가중치 1부여)
  • 중간치 : 한 모듈의 라인 수를 보통이라고 생각할 때의 예상 라인 수(가중치 4부여)
  • 추정LOC : (낙관치 + (4*중간치) + 비관치) / 6

LOC 비용산정 공식

  • 노력(인/월수, M/M)
    • (참여 인원/월) * 개발 기간
    • 추정 LOC / 1인당 월평균 생산 코드 라인 수
  • 개발 비용
    • (m/m) * 단위비용(1인당 월 평균 인건비)
  • 개발기간 : (m/m) / 참여인원
  • 생산성 : LOC / (m/m)

개발 단계별 노력(m/m)기법

  • LOC : 개발하려는 SW의 총 코드 라인 수를 예측하여 구현단계에 대한 m/m을 산정
  • 실제 SW 개발 : 코딩 뿐 아니라 require analysis, design 등의 단계에서도 인력과 자원이 많이 필요
  • 따라서 LOC를 보완한 것이 개발 단계별 노력 기법!
    • m/m을 SDLC(소프트웨어 개발 생명 주기)의 각 단계에 적용하여 단계별로 산정
    • 코딩만 대상으로 산정하는 LOC보다 더 정확

수학적 산정 기법

  • 상향식 비용 산정 기법
  • COCOMO
    • SW의 규모(LOC)예측 후 SW조류에 따라 각 비용 산정 공식에 대입
  • F/P(Fuction Point) <- 정부에서 산정하는 기법!
    • 기능 점수를 구한 후 이를 이용해 비용 산정

COCOMO(COnstructuve COst MOdel)방법

  • 완성될 SW의 크기(LOC)를 추정 하고 이를 준비된 식에 대입하여 MM 예측
    • 개발 비용 산정 시 source code 크기(라인수)에 중심을 둠 -> 라인수 많으면 개발 비용이 많이 듦
  • 개발 비용 계산시 고려 사항
    • 프로그램 유형(난이도)에 따른 가중치
    • 네 가지 특성에 따른 15가지 분류(가중치)
  • cocomo 개발 절치
    • 1.프로그램 유형에 따른 가중치 반영
    • 2.15가지의 비용승수 요소에 따른 보정 계수 반영
    • 3.총 개발 기간 산정

COCOMO 프로그램 유형에 따른 가중치 반영

  • 단순형(organnic) 프로젝트
    • 복잡도와 난이도가 비교적 높지 않은 업무용 소프트웨어
    • 크기가 중소규모 정도, 50KDSI 미만
  • 중간형(semi-detached) 프로젝트
    • 일반 업무용 SW보다 복잡하고 규모가 더 큰 소프트웨어
    • 크기가 300KDSI 미만 (OS, DBMS 등)
  • 내장형(embedded) 프로젝트
    • 자동화 기기나 전자 제품과 같은 하드웨어와 밀접한 관련 있는 SW
    • 300KDSI


COCOMO 15가지의 비용승수 요소에 따른 보정 계수 반영

  • 노력 조정 수치(EAF:Effort Adjustment Factor)
    • 필요한 각 항목별 승수 값을 모두 곱한 값

COCOMO 2 방법

  • 단계별 예측 후 인건비 산정에 반영

-

3.기능점수법

F/P 방법

  • 사용자 관점에서 개발하려는 소프트웨어의 기능을 정량화하여 개발 비용 산정에 활용
    • 소프트웨어 기능의 크기를 측정하는 단위
    • SW 기능 복잡도를 상대적 점수로 표현
    • 입출력, DB table, interface, 조회가 많은 사무용 소프트웨어 유용
    • SW 개발 비용 산정, 유지보수 비 산정, 개발에 필요한 자원 산정시 사용

SW 기능 분류

  • 데이터 기능

    • 내부 논리 파일(ILF: Internal Logical File)
    • 외부 연계 파일(EIF: External Input)
  • 트랜잭션 기능

    • 외부 입력(EI: External Input)
    • 외부 출력(EO: External Output)
    • 외부 조회(EQ: External inQuiry)

정규 기능 점수법

  • file 내의 record 단위까지 알아야 함
  • 설계 단계 이후에 사용하면 유용
  • 기능 도출 후 각 기능의 유형별 복잡도를 구해 기능 점수 산정

-

4.간이기능점수법

  • file 내의 record 단위까지 몰라도 가능함
  • 기획 및 발주 단계에서 사용하면 유용
  • SW 기능을 도출한 후 각 기능에 평균 복잡도를 적용해 기능 점수 산정(평균 가중치가 매년 정해진다)

장점

  • 사용자의 요구사항만으로 기능을 추출하여 측정
  • 객관적인 요구사항만으로 측정
  • 모든 개발 단계에서 사용

단점

  • 높은 분석 능력 필요
  • 기능 점수 전문가 필요
  • 내부 로직 위주의 SW에는 다소 부적합
  • 개발 규모 측정에 적합

사용이유

  • 정규 기능 점수법 사용시 각 기능의 복잡도와 가중치 도출 필요
  • 분석/설계 단계에나 기능의 속성까지 상세히 도출 가능
  • 계획 단계의 예산 수립시 정규 기능 점수법은 사용이 어려움
  • 유형별 복잡도 대신에 평균 복잡도 가중치 사용

가중치

  • 일반복잡도 가중치 : ILF, EIF, EI, EO, EQ의 가중치를 필요시마다 계산해 사용

  • 평균 복잡도 가중치 : 과거 FP(function point)산정 결과를 분석하여 복잡도를 계산한 가중치의 평균값

    • 사용이유 : 예산 수립시 기능 점수 산정할 수 있는 자료 부족
    • 사용 효과 : 복잡도 계산 과정 생략으로 비용산정이 쉽고 빠름
    • 사용 용도 : 정규 기능 점수법 산정한 결과의 검증 시 사용
  • 간이 시능 점수법 : 정규 기능 점수법 산정한 결과의 검증 시 사용

  • 따라서, 간이기능 점수법은 프로젝트 초기단계에서 각 기능의 정확한 요소를 모를 경우 평균 복잡도 가중치를 사용하여 SW기능의 크기 측정

산정절차

ISO 14143

측정 유형 결정

  • 개발 프로젝트 기능 점수(개발 규모 측정)
    • 프로젝트가 완료되어 최초 설치 했을 때의 기능 크기 산정
    • 프로젝트에서 사용자를 위해 제공된 모든 기능 측정
  • 개선 프로젝트 기능 점수(변경 규모 측정)
    • 사용중인 SW에 변경 발생시 변경된 부분의 기능 측정
    • 완료된 프로젝트에서 추가/수정/삭제된 부분만 그 크기 측정
  • Application 기능 점수(응용 규모 측정)
    • 현재 운영중인 application의 기능 측정
    • 개발프로젝트 기능 점수 + 개선프로젝트의 기능 점수

측정 범위와 application 경계 식별

  • 측정 범위에 포함될 요소(subsystem)의 식별

    • 측정 범위 : 기능 점수를 측정하고자 하는 대상
    • 측정 대상 : 몇 개의 application도 포함 가능. 개발하고자 하는 전체 SW(예 : 대학의 종합 정보 시스템). SW의 일부 시스템(예: 종합정보시스템의 학사관리에서 성적관리)
  • application 경계

    • 금번 기능 점수 계산 대상과 제외 대상을 분리하여 경계를 지음
    • 예: 개발 대상 - 학사관리, 예외대상 - 인사,회계관리
  • application 경계 주의사항

    • 사용자 관점(학사, 인사, 회계...)으로 함
    • 개발자 관점은 안됨(client/server ...)
    • 적당한 크기
    • 큰 경우 : 인사/회계/학사관리 - 기능 점수가 과소 산출 가능성 높음
    • 작은 경우 : 학적 / 수업 / 교과 관리 - 기능 점수 과대 산출 가능성 높음

데이터 기능 점수 계산

  • 데이터 FP 계산 = {(내부 논리파일(ILF)개수 * 평균 복잡도) + (외부 연계파일(ELF) 개수 * 평균복잡도)}
  • 다만, 평균 복잡도는 이미 결정되어있음
  • 데이터 기능 점수 = {(ILF * 7.5) + (EIF * 5.4)}
    • 7.5 : 내부 논리 파일의 평균 복잡도
    • 5.4 : 외부 연계 파일의 평균 복잡도
  • 사용자 된점에서 본 기능 점수 5가지 유형

  • 내부 논리 파일(ILF: Internal Logical File)

    • 금번 프로젝트에서 생성하여 관리하는 데이터
    • 예: 대학 정보시스템 DB안에 있는 Table
    • 사용자가 등록/수정/삭제/조회를 하기 위한 대상
    • DB에 존재하는 데이터 모임(DB의 정보)
    • DB 정보 : FP 측정 대상으로 application내부에서 file로 유지
    • DB table, 시스템 내부에서 다루는 file, class등
    • application에 존재하는 데이터를 논리적으로 모아놓은것
  • 외부연계파일(EIF: External Interface File)

    • 금번 프로젝트에서 생성하지 않고 참조만 하는 데이터
    • 예: 대학정보시스템에서 은행 DB안에 있는 '학생 등록금 정보'
    • 측정대상 애플리케이션(대학정보시스템)에서는 참조만 하고 다른 애플리케이션(은행)에서 유지되는 파일

트랜잭션(transaction)기능 계산

  • 트랜잭션 기능
    • 입력, 출력, 조회
  • 트랜잭션 기능 측정
    • 외부입력, 외부출력, 외부조회의 횟수를 세는 것
  • 트랜잭션 FP = {외부입력, 외부출력, 외부조회}의 개수 * 각각의 평균복잡도(가중치)
  • EI(external input)
    • DB에 데이터를 등록하거나, 수정 삭제하는것 (학생 정보 등록,수정,삭제)
  • EO(external output)
    • 계산하는 logic을 거쳐 데이터나 제어 정보를 사용자에세 보여주는 기능.
    • 수학적 계산 logic이 하나 이상 존재하며 그에 따른 파생 데이터도 존재
    • 학생학점 조회
  • EQ(external inquiry)
    • logic이 필요없고 DB에 존재하는 데이터를 찾아 그대로 표시만 해주는 기능
    • 학생 주소 검색, 학생 정보 조회
  • 트랜잭션 기능 점수 = {(EI개수 * 4.0) + (EO개수 * 5.2) + (EQ개수 * 3.9)}
    • 4.0 : 외부입력의 평균 복잡도
    • 5.2 : 외부출력의 평균 복잡도
    • 3.9 : 외부조회의 평균 복잡도

미조정 기능 점수(UFP : Unadjusted Function Point) 계산

  • UFP = data FP +. transaction FP
  • 단순히 기능적인 요구사항에 대해서만 계산
  • 여러가지 특성에 대한 고려를 하지 않음

보정 전 개발원가 계산

  • 보정 전 개발 원가 = 미조정 기능점수 * 기능 점수당 단가
    • 기능 점수당 단가 : 519,203원(출처:SW사업대가산정 가이드)
  • 소프트웨어 개발 전체에 대한 기능 점수
  • 단계별 기능 점수 가중치
    • 분석, 설계, 구현, 테스트를 구분하여 별도의 사업으로 진행할 때 사용
    • SW 개발 단계별 기능 점수 가중치

보정 후 기능 점수 계산

  • 보정이 필요한 이유
    • 기능 점수당 단가 519,203원은 복잡도가 보통일 때의 값
    • 현실에서의 다양한 규모, 에플리케이션 유형, 개발언어, 사용자요구의 품질 및 특성에 따라 보정 필요
  • 규모 보정 계수
    • 규모에 따라 값을 보정
    • 복잡도 증가 -> 생산성 하락 -> 보정 계수를 높임
    • 기능 점수에 따라 달라짐
    • FP < 300 규모 보정 계수 = 0.65
    • FP >= 300 규모 보정 계수 = 공식 사용
  • 애플리케이션 유형 보정 개수
    • SW 유형에 따라 복잡도가 달라 생산성도 달라지는 것을 보정
    • 복잡도 증가 = 개발 노력 증가
    • 단순 정보처리용 < 통신제어용 < 과학 기술용
  • 언어 보정 계수
    • 언어에 따라 생산정도 달라지므로 개발 언어에 따른 보정 계수 적용
  • 품질/특성 보정 계수
  • 보정후 개발 원가 = 보정 전 개발 원가 * (규모보정계수 * 애플리케이션 보정계수 * 언어보정계수 * 품질특성 보정계수)
반응형

'기초지식공부 > 소프트웨어공학' 카테고리의 다른 글

위험분석  (0) 2019.06.11
일정 계획  (0) 2019.06.11
개발 비용 산정  (0) 2019.06.10
계획(Plan)  (0) 2019.06.10
소프트웨어 개발 프로세스 Ⅱ  (0) 2019.03.13