저번 글에서 말했는데 LOC 산정이 힘들어서 기능점수로 규모를 파악할 수도 있다고 했다.
그래서 이번엔 기능 점수에 대해 알아보려고 한다.
**COCOMO II에서 기능점수를 이용한다.
기능 점수란 소프트웨어 시스템이 가지는 기능을 정량화한 것이다.
LOC의 예측은 힘들기 때문에 시스템이 가질 기능의 개수로 규모를 판단하는 것이다.
** 이 방법은 경험 중심적인 방법으로 비즈니스 응용 분야의 소프트웨어 개발비용 산정에 정확하다고 한다.
** 기능 점수를 이용해서 예측하려면 생산성 메트릭이 있어야한다. 다시 말해서 단위 시간당 프로그래머의 생산성을 기능 점수로 표현한 자료가 있어야한다.
기능 점수(function points)
소프트웨어 규모를 측정하는 방법
기능적 요구 사항이 중심이 되는 측정 방법
소프트웨어의 요구 사항 복잡도를 측정
구현 관점 아닌 사용자 관점의 요구 기능을 정량적으로 산정
측정의 일관성 유지를 위해 개발 기술, 개발 방법, 품질 수준 등은 고려하지 않음
소프트웨어 개발에 사용되는 언어와 무관
정확한 라인수는 예측 불가능
**이 5가지는 알고있어야한다
전체를 봤으니 세부사항도 살펴보자
데이터 기능
내부 논리 파일 (ILF: Internal Logical File)
개발 대상 SW가 직접 생성/관리하는 데이터
사용자가 등록/수정/삭제/조회를 하기 위한 대상
데이터베이스 테이블, 시스템 내부에서 다루는 파일 등
외부 연계 파일, EIF: External Interface File
측정 대상 SW에서는 참조만 하고, 외부 다른 SW가 관장하는 파일
트랜젝션기능
외부 입력 EI, External Input
대상 SW의 ILF (DB 또는 File)에 데이터를 등록하거나, 수정·삭제하는 것
(예) 학생 정보 등록, 수정, 삭제
외부 출력 EO, External Output
계산하는 로직을 거쳐 데이터나 제어 정보를 사용자에게 reporting하는 기능
수학적 계산 로직이 하나 이상 존재하며 그에 따른 파생 데이터도 존재
(예) 학생 학점 조회, 통계 리포팅 등
외부 조회 EI, External Inquiry
단순히 ILF, EIF의 데이터를 가져와서 별도의 가공 처리 없이 그대로 출력하는 대화식 기능
(예) 학생 주소 검색, 학생 정보 조회
(비교) External Output: 별도의 가공을 수행하는 로직(알고리즘)이 존재
그럼 각 세부사항마다 계산하는 방법은 어떻게 될까?
순서는 이렇게 된다.
1. 5 가지 기능 분야에 해당되는 개수를 파악
2. 5 각 기능에 대한 복잡도(단순, 중간, 복잡)를 결정
3. 각 기능 분야의 개수와 복잡도 가중치를 곱하여 총 기능 점수(GFP)를 구한다.
4. 14개의 질문을 이용하여 각 처리 복잡도의 정도에 따라 0에서 5까지 할당한다.
5. 처리 복잡도 보정계수(PCA)를 식을 이용하여 구한다.
6. 식에 넣어 기능 점수를 구한다.
그냥 넘어가면 이해가 안되니까 예를 살짝 건드리고 넘어가자
표를 이용한다.
5가지 기능 요소별 개수 파악 & 복잡도 가중치 반영
EI = 10개, EO = 5개, EQ = 8개, ILF = 30개, EIF = 4개
복잡도는 모두 단순
처리 복잡도 (Processing Complexity)
신뢰도 높은 백업, 분산처리기능은 높이 요구됨 (5점)
나머지 질문에 대한 처리복잡도는 보통 (3점)
생산성
60 FP/week => 240FP/month
계산
표에 대입하여 GFP를 구한다.
GFP = (10 X 3) + (5 X 4) + (8 X 3) + (30 X 7) + (4 X 5) = 304 FP
처리 복잡도 보정 계수 구하면
PCA = 0.65 + 0.01 X (12 X 3 + 2 X 5) = 1.11
FP를 보정
FP = GFP X PCA = 304 X 1.11 = 337.44 FP
추정 노력(E) = FP / 생산성 = 337.44 / 240 = 1.406 MM
**아까 위에서 단위시간당 생산성 메트릭이 있어야 한다는 것은 변환하기 위해서라 했듯이
이 식에 쓰인다
LOC 대신 기능점수를 구해서 규모를 판단한다고 했는데
기능점수는 이렇게 이용한다.
총 라인수 = FP * 원하는 언어의 1점 당 LOC
* 기능 점수 1을 구현하기 위한 LOC
어셈블리 언어(324), C언어(150), Pascal(91),
Ada(71), APL(32), SmallTalk(21)
*개발 노력
FP만 산정한 경우: 개발 노력 (MM) = FP/생산성(FP/MM)
LOC 산출 가정: 개발 노력 (MM)= LOC/생산성(LOC/MM)
'컴퓨터(Computer Science) > 소프트웨어공학(Software engineering)' 카테고리의 다른 글
프로젝트 계획(5) - 팀 구성, 조직 계획 [소프트웨어공학] (0) | 2020.04.17 |
---|---|
프로젝트 계획 (4) -스케줄링(Scheduling) [ 소프트웨어공학] (0) | 2020.04.17 |
프로젝트 계획 (2) - COCOMO [ 소프트웨어공학] (0) | 2020.04.16 |
프로젝트 계획 (1) [ 소프트웨어공학] (0) | 2020.04.16 |
방법론 개념과 특징 [소프트웨어공학] (0) | 2020.04.15 |