ISO/IEC 29881:FiSMA 功能规模度量——原理与工程实践

FiSMA 功能规模度量方法技术指南、服务分类、与 COSMIC 和 IFPUG 的比较及实际估算应用

ISO/IEC 29881 定义了 FiSMA(芬兰软件测量协会)功能规模度量方法,这是一种从用户角度量化软件功能规模的标准化方法。与传统的代码行度量不同,FiSMA 基于提供给用户的功能服务的数量和复杂度来度量软件规模,从而在整个软件开发生命周期中实现更准确的项目估算、生产力基准测试和合同管理。

FiSMA 最初作为芬兰软件行业的功能规模度量标准开发,后来被采纳为 ISO 标准,以提供 COSMIC(ISO/IEC 19761)和 IFPUG(ISO/IEC 20926)功能规模度量方法的替代方案。FiSMA 特别适用于现代敏捷和面向服务的架构。

FiSMA 度量原理与服务类型

FiSMA 通过识别和分类软件系统向用户提供的服务来度量功能规模。标准定义了四种基本服务类型:交互式服务(涉及输入、输出和导航的基于对话框的用户交互)、内部数据服务(数据存储和检索操作)、接口服务(与外部系统的通信)以及数据操作服务(批处理和数据转换操作)。每种服务根据其复杂度分配功能规模单位(FSU),复杂度由涉及的数据元素数量、数据组数量和验证规则数量决定。

FiSMA 度量过程包括四个阶段:目的定义(确定度量的范围和视角)、服务识别(从需求或设计规范中识别所有用户可见的服务)、服务分类与度量(基于复杂度分配 FSU 值)以及结果聚合(按服务类别和总计汇总规模)。

服务类型 描述 复杂度因素 典型 FSU 范围
交互式服务 带输入/输出字段的用户对话框 字段数量、验证规则、导航深度 每服务 4-25 FSU
内部数据服务 持久数据读取/写入/删除 实体数量、关系复杂度 每服务 3-18 FSU
接口服务 外部系统通信 消息类型、协议复杂度、映射规则 每服务 5-30 FSU
数据操作 批处理和计算 算法复杂度、数据量 每服务 3-20 FSU
FiSMA 对于微服务架构的度量特别有效,每个微服务通常映射到一个或少数几个 FiSMA 服务类型。一个电商支付微服务可能包括一个交互式服务(支付表单)、两个内部数据服务(交易记录、退款状态)和两个接口服务(支付网关、欺诈检测)。这种服务级别的粒度比在分布式仓库中统计代码行提供了更有意义的规模度量。

与 COSMIC 和 IFPUG 方法的比较

每种功能规模度量方法都有不同的特点。IFPUG(ISO/IEC 20926)侧重于计数五种功能类型:外部输入、输出、查询、内部逻辑文件和外部接口文件。COSMIC(ISO/IEC 19761)度量由功能过程触发的数据移动——输入、输出、读取、写入。FiSMA 的不同之处在于以服务作为规模的主要度量单位,更好地适应面向服务和事件驱动的架构。

FiSMA 面向服务的方法为现代开发范式提供了优势:它自然适用于 RESTful API 规模度量(每个端点是一个服务)、微服务分解(服务直接映射到限界上下文)和敏捷用户故事估算(用户故事通常涵盖一个或两个服务)。经验研究表明,FiSMA 度量与开发工作量的相关性 R² 值为 0.82-0.91,在不同项目类型上与 COSMIC 和 IFPUG 相当或略优。

FiSMA、COSMIC 和 IFPUG 之间的选择会显著影响报告的功能规模。使用 FiSMA 度量为 1000 FSU 的项目在使用 COSMIC 功能点时可能为 800-1200,使用 IFPUG 功能点时可能为 600-1500,具体取决于架构风格。切勿在未经校准转换模型的情况下混用不同方法的度量数据。标准提供了转换指南,但强调不同方法服务于不同的分析目的。

在估算和基准测试中的实际应用

FiSMA 功能规模在用作参数化估算模型的输入时最有价值。标准建议通过将实际开发工作量(人时)除以交付服务功能规模来建立组织生产力基线。一经校准,这些基线可使新开发项目的工作量估算精度达到 ±25%——显著优于仅依靠专家判断(通常为 ±40-60%)。

对于合同管理,FiSMA 提供了独立于技术的软件功能规范。基于 FiSMA 度量的固定价格合同减少了范围说明中的歧义,为变更单谈判提供了客观基础。标准包括一份合同附件模板,内含度量惯例、争议度量的升级程序以及与交付功能规模挂钩的验收标准。

功能规模度量不能替代技术复杂度评估。一个实现复杂密码学算法的 100 FSU 服务所需工作量远多于提供简单 CRUD 操作的 100 FSU 服务。FiSMA 明确指出,规模必须由技术复杂度因素、团队能力和质量要求补充,才能产生可靠的工作量估算。仅依赖功能规模进行项目规划将导致重大估算误差。

常见问题解答

问:FiSMA 可以应用于非功能需求吗?

答:不能。FiSMA 专门度量功能规模——软件为其用户做什么。非功能需求(性能、安全性、可扩展性)必须单独捕获,并作为成本驱动因素或复杂度乘数纳入估算模型。标准建议使用 ISO/IEC 25010 来构建非功能需求组合。

问:FiSMA 如何处理复用和 COTS 组件?

答:当使用商业现成(COTS)组件或从现有系统复用实现某个服务时,该服务的功能规模仍然全量计数,因为用户感知的功能保持不变。然而,所需的开发工作量可能减少——这种区别在估算建模阶段而非度量阶段处理。

问:FiSMA 是否适用于敏捷和 DevOps 项目?

答:适用。FiSMA 面向服务的度量与敏捷用户故事映射和迭代交付高度契合。标准建议将总功能规模分解为与 Sprint 发布一致的部分,从而实现速度跟踪和发布规划。服务级别的粒度也支持随着功能在 Sprint 间演进进行持续度量。

问:FiSMA 提供哪些培训和认证?

答:FiSMA 维护功能规模度量从业人员的认证计划。标准建议组织指定经过认证的 FiSMA 度量师进行关键合同的度量,确保一致性和对 ISO/IEC 29881 度量规则的符合性。认证包括通过笔试和实际案例研究证明在服务识别、分类和度量方面的能力。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注