什么是 COSMIC 功能点,它与工时估算有何不同?

位于匈牙利布达佩斯的软件开发公司 Mesterséges Intelligencia Központ Kft. 以 COSMIC 功能点度量软件的规模:这样,规模就是软件本身的属性,而不是估算者的感觉,因此可以核查、可以重新度量,也可以用来比较两份报价。

要点:COSMIC(ISO/IEC 19761)度量软件的功能规模:每一次数据移动,即 Entry(输入)、Exit(输出)、Read(读取)、Write(写入),都计为 1 个 COSMIC 功能点(CFP)。工时估算说明的是估算者预期有多少工作量;度量出的规模说明的是任务有多大。因此,规模可以核查、可以重新度量,也可以用来比较两份报价;而工作量则可以根据规模和实践中测得的生产率推算出来。

什么是功能规模度量?

软件的规模可以用多种方式表示:代码行数、小时数、点数。功能规模度量(英文为 functional size measurement,FSM)度量的是从用户的角度看软件必须能做什么,而不是它如何实现。其基本概念由 ISO/IEC 14143-1:2007 标准规定;根据该标准的介绍,其目的正是让度量关注用户所要求的功能,而不是实现方式。

度量的基础是功能性用户需求(functional user requirements,FUR)的范围:即用户需求中描述软件必须执行哪些任务、提供哪些服务的那一部分。性能、安全性或所选技术不属于这一范围,我们会在下文的局限性部分讨论它们。

目前存在多种标准化的功能规模度量方法。最知名的是 COSMIC(ISO/IEC 19761:2011)和 IFPUG 方法(ISO/IEC 20926:2009);ISO 还标准化了其他方法(NESMA、FiSMA、Mk II)。它们都以需求为依据,但规则和计量单位各不相同,因此用不同方法度量出的数值无法直接比较。

什么是 COSMIC?

COSMIC 是 Common Software Measurement International Consortium(通用软件度量国际联盟)的缩写:这是一个非营利组织,负责维护该方法并组织度量人员的认证。该方法于 20 世纪 90 年代末在早期功能点方法的基础上发展而来,2003 年成为 ISO 标准,现行版本为 ISO/IEC 19761:2011。该方法的详细说明,即 COSMIC Measurement Manual(COSMIC 度量手册)5.0 版,可以免费下载;其第一部分于 2021 年发布,第二部分于 2024 年发布。

根据该标准,该方法适用于度量应用软件(例如业务系统)、实时软件以及两者的混合。也就是说,ERP、CRM 或网店系统可以用它来度量,控制软件也同样可以。

COSMIC 模型的概念

COSMIC 用一个简单的模型来描述软件:软件跨越其边界与功能用户交换数据,并在边界之内从持久存储中读取数据、向其中写入数据。

概念含义示例
功能用户向软件发送数据或期待从软件获得数据的人或物:人、其他软件或设备业务员、开票系统
边界被度量软件与其功能用户之间的概念性界面Web 界面以及向其他系统开放的接口
触发事件功能用户为响应它而启动一个功能处理的事件新客户前来登记
功能处理需求中最基本的、可独立执行的单元,由一组相互关联的数据移动组成“录入新客户”
数据组一组数据属性,描述软件需要处理其数据的某一个事物客户:姓名、地址、税号、电子邮件
数据移动单个数据组的移动;共有四种类型见下文

四种数据移动:

以下是决定计数结果的几条度量规则:

结果采用比率标度,也就是说,规模可以相加和比较:两个各为 40 CFP 的部分合起来是 80 CFP,而且可以按功能组分别列出小计。

完整示例:“录入新客户”

我们来看一项简单的需求:“业务员录入新客户的数据(姓名、地址、税号、电子邮件)。系统检查该客户是否已经登记在册,保存数据,并反馈成功或错误。”度量步骤如下:

  1. 功能用户是业务员,触发事件是新客户前来登记。
  2. 数据组是“客户”;四个数据属性描述的是同一个事物,因此构成一个数据组。
  3. 数据移动根据需求中的句子来识别,并逐一计数。
步骤数据移动数据组规模
业务员提交表单Entry(输入)客户1 CFP
系统检查该客户是否已存在Read(读取)客户1 CFP
系统保存新客户Write(写入)客户1 CFP
反馈成功或任何错误Exit(输出)错误消息和确认消息1 CFP
合计四次数据移动一个数据组4 CFP

COSMIC 网站上发布的指南中的“录入新员工”示例也是以同样的方式构建的。需求的变化会这样体现在规模上:

这个示例也说明了为什么度量结果可以核查:每个 CFP 背后都有一项具名的需求、一个数据组和一条规则。如果有人提出异议,可以准确地指出所涉及的是哪一行。

尽早度量,随后细化

COSMIC 度量从确定度量的目的和范围开始:度量什么,包括哪些内容,结果用于何处。精确的度量需要足够详细的需求,能够从中识别出功能处理及其数据移动。在项目初期,这样的需求往往还不存在;针对这种情况,COSMIC 发布了用于早期规模估算的近似方法,等需求细化之后,再进行精确度量。

该方法的指南还提醒,许多起初看似非功能性的需求(例如响应时间或易用性)会在项目进行过程中转化为软件功能,从而使规模看起来有所增长。这不是度量的缺陷,而是表明需求变得更加精确了。因此在实践中,最好逐项编写规格说明,用同样的方法重新度量变更,并单独列出每项变更的规模。这样,范围的增长就不会悄无声息地发生,而是能以数字的形式清楚呈现。

对比:工时、故事点、IFPUG 和 COSMIC

要素工时估算故事点(story point)IFPUG 功能点COSMIC 功能点
表达的内容估算者预期的工作量团队的相对估算;并不总是清楚它表示的是规模、工作量还是时间功能规模功能规模
是否标准化否否是,ISO/IEC 20926:2009是,ISO/IEC 19761:2011
取决于什么估算者的经验、谨慎程度和团队具体团队;不同团队含义不同需求需求
外部能否核查只能依据估算者的解释在团队之外几乎不能能,依据公开的规则能,依据公开且可免费获取的规则
计量单位小时团队自己的点数IFPUG 功能点CFP,1 CFP = 1 次数据移动
最适合的用途规划简短、熟悉的任务团队自己的冲刺(sprint)规划度量规模、进行比较度量规模、进行比较,作为报价和进度安排的依据

工时估算并不是一个糟糕的工具,只是它度量的是别的东西:预期的工作量,而这不仅取决于任务的规模,还取决于团队的知识、工具和谨慎程度。故事点对团队内部的规划很有用,但根据 COSMIC 网站上发布的指南,它是主观的,其含义因团队而异。IFPUG 和 COSMIC 都是标准化的功能规模,但规则不同,因此两种方法得出的数值不能相互替换。

为什么度量出的规模是更可靠的依据?

准确地回答标题中的问题:COSMIC 并不是把工时估算得更准,而是度量任务有多大,正是这一点让工作量的估算变得更加可靠。原因如下:

COSMIC 的指南引用了多项研究,在这些研究中,以 CFP 度量的规模比以故事点表示的估算与实际工作量的关联更为紧密。同一份指南还提醒,只有当开发过程具有足够的可重复性,并且工作量主要由规模决定时,根据规模估算出的工作量才是可靠的。因此,度量出的规模是更好的出发点,但要做出好的估算,还需要了解生产率。

COSMIC 不度量什么?

COSMIC 规模度量的是功能,该方法的说明也公开指出了这一点。它无法体现的内容包括:

因此,一份好的报价会在度量出的规模之外,单独列出规模无法体现的内容:集成、非功能性需求、定制界面和美术、多平台、数据迁移、复杂计算以及实时运行。我们的报价就是这样列出这些项目的,详情请见定价方式页面。

我们在自己的工作中如何使用它?

我们以 COSMIC 功能点度量开发工作的功能规模。为此,我们构建了自己的、由人工智能辅助的工作流程,度量结果由人在复核环节中进行检查。步骤如下:

  1. 逐项的规格说明:我们把开发工作拆分为若干功能组,并用同一个模板描述每个功能组:目标、参与者、数据、功能、AI 功能,以及不包含的内容(参见我们的工作方式)。
  2. 多次独立计数:每个功能组由多个语言模型分别计数多次;各次计数之间的离散程度反映了不确定性。
  3. 核对环节:确保每个功能处理恰好只计算一次,即使它出现在多份描述中。
  4. 复核:我们审查度量结果,澄清不确定之处,必要时手动推翻自动合并的结果。
  5. 锁定:完成的度量结果可以锁定为不可更改的版本,并以此作为合同的依据。

在对现有系统进行后续开发时,我们会单独描述现有部分,因此只有新增部分计入规模。度量过程还会标出功能规模无法体现的内容。

规模如何转化为报价和进度安排?

报价中的价格由度量出的规模得出,并加上规模无法体现的项目。由于我们也能看到每个功能组的规模,进度安排也以此为基础:各阶段的顺序、演示的内容以及期限。如果过程中出现新的需求,我们会用同样的方式进行度量,从而可以看出范围变化了多少,以及这对价格和进度安排意味着什么。因此,我们只在度量之后才给出具体的价格和期限,而不是根据第一次谈话就给出。

根据规模比较两份报价

如果您向多家开发商索取报价,规模有助于判断这些报价是否针对同一项任务。建议按以下步骤进行:

  1. 同一份规格说明:每个投标方都拿到同一份逐项描述。
  2. 规模和功能处理清单:请询问对方,价格是针对多大的规模、哪些功能处理给出的。
  3. 差异的原因:如果两份报价不同,请查看差异是在于规模、规模无法体现的项目,还是单位规模的价格。
  4. 单列项目:请询问哪些内容作为单独一行列出(集成、数据迁移、运行),哪些内容不包含在价格中。
  5. 变更的处理:请询问过程中的变更如何度量和定价。

即使某个投标方不度量功能规模,只要它是针对同一份逐项功能处理清单报价的,其报价仍然可以比较。关于选择开发商的其他方面,我们在如何选择软件开发公司?一文中有介绍;至于是否真的需要定制开发,定制软件还是现成方案(SaaS)?一文可以帮助您做出判断。

常见问题

什么是 COSMIC 功能点?

COSMIC 功能点(CFP)是 ISO/IEC 19761 标准规定的软件功能规模计量单位。一个 CFP 就是一次数据移动:在一个功能处理中对一个数据组的一次输入、输出、读取或写入。软件的规模是其各功能处理的数据移动之和。

它与工时估算有何不同?

工时估算说明的是预期的工作量,它取决于估算者和团队。COSMIC 依据公开的规则,从需求出发度量任务的规模,因此其他人根据同一份规格说明也能得出相同的结果。随后,工时可以根据规模和实践中测得的生产率推算出来。

COSMIC 不度量什么?

根据该标准,它并非为度量复杂数学算法和连续信号(音频、图像)处理而设计,也不以 CFP 体现真正的非功能性需求,例如性能约束或技术约束。一份好的报价会把这些内容作为单独的项目列出。

由谁度量,度量结果能否核查?

度量由熟悉该方法的度量人员进行;在我们这里,由人工智能辅助的工作流程负责计数,再由人复核结果。规则是公开的,度量按功能处理逐一记录在案,因此另一位熟悉该方法的专业人士可以根据同一份规格说明进行核查。

规模如何转化为报价?

价格由度量出的规模得出,并加上规模无法体现的内容:集成、非功能性需求、定制美术、多平台、数据迁移。进度安排以各功能组的规模为基础,变更也以同样的方式度量。详情请见定价方式页面。

我们如何提供帮助?

如果您正在规划定制软件,我们会和您一起编写逐项的规格说明,以 COSMIC 功能点度量其规模,并据此给出报价和进度安排。可应要求签署保密协议(NDA),交付后我们还承担运行与维护工作。源代码和使用权由合同约定。首次咨询免费:请通过联系我们页面上的联系方式给我们写信。

参考来源