前言
本文的目标读者是从事软件行业想快速了解软件开发过程工作量评估的人员。软件工作量评估方法很多,如代码行法、类比法、WBS、故事点、用例点、NESMA、FPA、cosmic、COCOMOⅡ等。本文只是选取主流评估方法进行简述,每一种方法在实际操作过程中有若干条计数规则,在此并未阐述,并不能作为评估工作的实施指南。实际使用方法时,需以各方法发布机构发布的官方文档为准。
一、 功能点 FPA 方法
(一) 简介
FPA 是从用户角度出发度量软件规模的一种方法。它从用户的角度出发,将系统分为数据功能和事物功能两大类,分别根据具体的规则来计算功能点,最后结合系统的特征因子来调整功能点数, 从而得到最终的系统规模。
FPA 较适用于商业数据处理、管理信息系统的估算,因为它能更好地反映系统需求上的复杂度和数量。从满足客户需求的角度讲,FPA 具有阶段性,对用户早期参与项目管理、项目经理制定项目计划更有意义。
(二) 重要概念
功能点估算法是从用户视角出发,对软件的规模从逻辑设计的角度进行度量的标准方法。
在功能点估算的过程中,以下概念应贯穿始终:
1、 用户视角
用户视角(User View)是指功能点被用户所认可,由用户需求书面正式描述,且独立于所采用的开发技术。
2、 穿越系统边界
穿越系统边界(Application Boundary)是指数据或控制信息由系统内发送到系统外,或由系统外发送到系统内。 是否穿越系统边界是 FPA 重要的判断标准。
3、 IPO 的异同
输入(Input)、处理过程(Process)和输出(Output)的同与不同亦是FPA 重要的判断标准。
(三) FPA 估算方法基本步骤
1、 收集可得的文档
文档可以包括需求、数据/对象模型、类图、数据流图、用例、过程描述、报表显示、界面显示、用户手册,以及其它软件开发文档。
2、 确定计数范围和边界并识别功能用户需求
计数范围和边界需识别计数目的。不同的计数目的决定了计数范围和软件边界的划分。实际使用过程中通常为系统的管理边界, 特殊系统会以架构为边界。
3、 度量数据功能
数据功能的计算工序(Counting Procedures)包括以下活动:
FPA 将数据功能分为两类,分别为内部逻辑文件(ILF)和外部接口文件(EIF)。
1) 识别内部逻辑文件 ILF
内部逻辑文件(Internal Logical File,简称ILF)是在系统边界内部维护的一组用户可识别的逻辑上相关的数据或控制信息。ILF 的首要目的是保存由被度量系统的一个或多个基本流程维护的数据。
2) 识别外部接口文件EIF
外部接口文件(External Interface File,简称 EIF)是用户可识别的、逻辑相关的数据组或控制信息组,其由被度量应用所引用,但在另一应用边界内维护。EIF 的主要目的是保存由被度量应用的一个或多个基本过程引用的数据。这意味着一个应用的 EIF 必定是另一个应用的ILF。
3) 识别数据功能 DET
数据元素类型(Data Element Types,简称DETs)是指在一个ILF 或EIF 内,用户可认知的、唯一的、非重复的字段。如客户姓名、年龄、地址、联系方式等。
4) 识别数据功能 RET
记录元素类型(Record Element Types,简称 RETs)是指在一个ILF 或EIF 内,用户可认知的数据元素子集。如客户的家庭信息为客户信息的 RET 。
5) 确定ILF 或EIF 的贡献度
根据每一个已确认的 ILF 和EIF 的复杂度(DETs 和RETs 数量),对其进行分类,并赋予未调节功能点数值(Unadjusted Function Points,简称UFP)的过程,即为确定其贡献度。
6) 确定ILF 或EIF 的贡献度值
对用户而言,ILF 与EIF 的业务意义是完全不同。因此,对于贡献度相同的 ILF 和EIF,其未调节功能点值是不同的。
4、 度量事物功能
事物功能的计算工序(Counting Procedures)包括以下活动:
FPA 将事物功能分为三类,外部输入(EI)、外部输出(EO)和外部查询(EQ)。
1) 识别外部输入(EI):是处理来自系统边界外部的数据或控制信息的一个基本过程。其首要目的(Primary Intent,简称 PI) 是维护一个或多个ILFs 或者去改变系统行为。
2) 识别外部输出(EO):是发送数据或控制信息到系统边界外部的一个基本过程。其首要目的(PI)是通过处理逻辑呈现信息给用户,并非或者另外检索数据或控制信息。
3) 识别外部查询(EQ):是发送数据或控制信息到系统边界外部的一个基本过程。其首要目的(PI)是通过从一个 ILF 或EIF 检索数据或控制信息,呈现信息给用户。
4) 基本过程
把功能用户需求组合或分解为最小活动单元,满足以下条件:
1) 对用户有意义,构成一个完整的事务;
2) 自包含;
3) 使应用的业务保持持续状态,
例 :功能用户需求要求提供维护员工信息的功能。该需求被分解为较小的工作单元,如添加员工信息、修改员工信息、删除员工信息和查询员工信息。
5) 识别事物功能 DET
数据元素类型(Data Element Types,简称DET)是指在一个EI、EO 或EQ 内,用户可认知的、唯一的、非重复的字段。
6) 识别事物功能 FTR
引用文件类型(File Types Referenced,简称FTR)是指一个交易功能读取或维护的一个ILF,或者一个交易功能所读取的一个 EIF。
7) 确定EI、EO 和EQ 的贡献度
根据每一个已确认的 EI、EO 和EQ 的复杂度(FTRs 和DETs 数量),对其进行分类,并赋予未调节功能点数值(Unadjusted Function Points)的过程,即为确定其贡献度。
8) 确定EI、EO 和EQ 的贡献度
我们应注意到,贡献度相同的 EI、EQ,其未调节功能点值是相同的;与EI、EQ 贡献度相同的 EO,其未调节功能点值略高。
5、 计算功能规模
1) 计算未调整功能点数
UFP= ILFs+EIFs+EIs+EOs+EQs
2) 确定系统调节因子
在实际软件项目开发过程中因技术因素和环境因素会对软件项目工作量有不同程度的影响。可根据组织级基准库设定相关调整因子(System Adjustment Factor,简称SAF)。如应用类型、质量特征、开发语言、团队背景、评估时点等。
计算调整后的功能点数 AFP=UFP*SAF
3) 确定生产率PDR
可根据系统特点测算组织级系统基准生产率。
4)测算工作量
工作量 AE=AFP*PDR
6、 报告功能点计数结果
将功能点计数过程和工作量计数结果编写报告呈现给读者。
二、 COSMIC 方法
(一) 简介
COSMIC 是通用软件度量国际联盟的简写(Common Software Measurement International Consortium,COSMIC),它成立于1998 年,是一个由全球软件度量专家组成的非盈利自愿性组织,致力于软件规模度量方法的研究与推广。2002 年 1 月COSMIC 所推出的全功能点规模度量方法成为了 ISO 的标准,最新标准为 ISO/IEC 19761:2011“软件工程—COSMIC—功能规模度量方法”。
COSMIC 方法包含了一组应用模型、原则、规则和过程度量给定软件的功能性用户需求的方法。其结果是一个数字化的“量化数值”,根据 COSMIC 方法得到的软件功能规模。它适用于以下领域的软件功能度量:
业务应用软件,这类软件通常用于支持业务管理。如银行、保险、电信等。
实时软件。用于过程控制和自动数据获取软件。如嵌入式程序、中间件。
平台软件,如可复用的构建及设备驱动程序等。
功能规模是通过“数据移动(Data movement)”的个数来度量。
(二) 原理
功能规模是通过“数据移动(Data movement)”的个数来度量。
(三) 度量过程
COSMIC 方法的度量分为三个阶段:
1、 度量策略阶段
确定度量目的
确定度量范围
确定功能用户
确定需求描述详细程度
2、 映射阶段
识别功能处理
识别兴趣对象与数据组(兴趣对象指软件要处理的数据对象,如客户;数据组是一组兴趣对象属性的组 合,如客户姓名、年龄,联系方式等)
识别数据属性
识别数据移动(输入、输出、读、写)
3、 度量阶段
新增需求计数
变更需求计数
本地化规则计数(定制规则)
生成度量报告
(四) 数据移动种类
4 种类型的数据移动:输入(Entry)、输出(eXit)、读(Read) 和写(Write)。
输入(E),是从用户穿越被度量系统的范围传输数据到系统内部,这里提到的用户既包括系统的使用人员,也包括其他软件或者硬件系统。
输出(X),是一个数据组从一个功能处理通过范围移动到需要它的用户。
读(R),是从永久性的存储设备读取数据。
写(W),是存储数据到永久性的存储设备。
(五) 示例
用户借阅图书,图书管理员需录入借阅人信息并保存到数据库中,同时提供查询登记列表功能。此时录入借阅人信息为一个输入 CFP,提示信息为一个输出 CFP,保存录入信息为一个写CFP,查询登记列表功能查询条件输入为一个输入CFP 和从数据库读取登记信息为一个读CFP。然后汇总计算出总功能点数为 5 个 FP。
原则:每一个功能必须有一个输入,一个输出或一个写,即至少2 个CFP
(六) 工作量测算
参考FPA 方法和用例点方法工作量测算方法,设定相关技术调整因子和环境调整因子以及生产率,测算软件工作量。
使用COSMIC 方法要求度量者对软件系统的实现非常清楚,了解系统的内部结构,并对系统能够明确划分出应用层级,以及层级之间的数据处理和数据移动。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。