在软件工程和项目管理领域,衡量软件的大小和复杂度是一项基础且重要的工作。这不仅关系到项目前期的估算(包括工作量、成本和时间),也影响到开发过程中的进度跟踪和项目完成后的绩效评估。在众多的衡量方法中,“FPA框架”通常指的是“功能点分析”(Function Point Analysis)。这是一个被广泛接受的标准方法,用于从用户的角度度量软件的功能规模。本文将围绕功能点分析(FPA框架),详细解答围绕其展开的一系列具体问题,而非泛泛而谈其历史或意义。

【fpa框架】是什么?

从核心上讲,FPA框架,即功能点分析,是一种客观地度量软件功能规模的方法。它不依赖于实现软件所使用的编程语言、技术平台或开发方法。它的焦点完全在于用户能够感知到的、系统提供的功能。简单来说,FPA衡量的是“用户向系统要求什么”以及“系统提供给用户什么”。

它具体度量什么?

FPA度量的是通过用户交互和数据管理所提供的功能。这些功能被划分为两大类:

  • 数据功能 (Data Functions): 与系统存储或引用的数据有关的功能。
    • 内部逻辑文件 (Internal Logical Files – ILF): 由系统内部维护、用户通过事务功能(如下述的输入、查询)进行访问的数据集合。它们是系统的主要数据存储。
    • 外部接口文件 (External Interface Files – EIF): 由其他系统维护、本系统只引用而不维护的数据集合。它们是系统与外部世界的接口之一。
  • 事务功能 (Transactional Functions): 与用户通过系统界面进行的动态处理有关的功能。
    • 外部输入 (External Inputs – EI): 用户向系统提交数据或控制信息以改变内部逻辑文件状态或系统行为的功能。例如:录入订单、提交申请。
    • 外部输出 (External Outputs – EO): 系统向用户展示信息(经过处理或计算)的功能。这些输出会改变内部逻辑文件或系统行为。例如:生成报表、打印发票。
    • 外部查询 (External Inquiries – EQ): 用户从系统检索信息并向用户展示的功能。与外部输出不同,查询不会改变内部逻辑文件或系统行为,只是检索并展示。例如:查询客户信息、查看库存。

通过识别和计数这五种类型的功能,并根据其复杂度进行调整,最终得到一个“功能点”的数量,这个数量就是软件的功能规模度量值。

【fpa框架】为什么使用它?

使用FPA框架有多个重要的实践原因,尤其是在软件项目管理和评估方面:

  1. 提供客观、一致的规模度量:

    与代码行数(Lines of Code – LOC)等度量方法不同,FPA不受编程语言、开发工具或程序员编码风格的影响。同一个功能,无论用Java、Python还是C++实现,理论上其功能点计数应该是相同的。这提供了一个独立于技术的、相对客观的软件大小衡量标准,使得不同技术栈、不同团队甚至不同公司之间的项目规模可以进行有意义的比较。

  2. 作为项目估算的基础:

    软件规模是估算项目所需工作量、成本和时间的关键输入。通过历史项目的经验数据(例如,每个功能点平均需要多少人天的工作量),结合新项目的功能点计数,可以相对准确地估算出新项目的资源需求。这比基于猜测或直觉的估算要科学得多。

  3. 衡量开发效率和生产力:

    通过将完成项目所消耗的工作量除以项目的功能点数,可以计算出团队或个人的开发效率(例如,每人月完成了多少功能点)。这有助于评估团队的表现,识别过程瓶颈,并为未来的项目设定更实际的生产力目标。

  4. 支持合同和外包管理:

    在软件外包或固定价格合同中,功能点可以作为定义交付范围和计价的清晰依据。双方可以基于功能点数量签订合同,当需求变更导致功能点数量变化时,可以明确地调整合同范围和价格。这降低了合同风险和争议。

  5. 辅助项目管理和跟踪:

    FPA有助于在项目早期就建立对项目规模的认识。在项目执行过程中,如果需求发生变化,可以通过功能点分析来量化变更对项目规模的影响,从而更准确地评估变更的成本和进度影响。

【fpa框架】在哪里使用?

FPA框架被广泛应用于各种环境和场景:

  • 软件开发组织:

    无论是内部IT部门还是商业软件公司,都使用FPA进行项目估算、预算规划、进度安排和资源分配。

  • 软件外包和咨询公司:

    这些公司经常使用FPA与客户沟通项目范围,进行投标报价,并作为合同交付物计量的标准。

  • 政府和大型机构:

    许多政府部门和大型企业在其软件采购、开发和维护合同中强制要求使用FPA进行规模度量,以确保透明度和可控性。

  • 质量管理和过程改进:

    在CMMI等过程改进框架下,软件度量是关键领域之一。FPA作为一种标准的规模度量方法,是进行生产力、质量(例如,每功能点缺陷数)等度量分析的基础。

  • 项目生命周期中的应用时机:

    FPA最常用于项目的早期阶段,即需求分析和设计阶段,因为这时用户功能已经比较明确。当然,也可以在开发过程中或完成后进行计数,用于跟踪变更或验证最终规模。

【fpa框架】如何量?(如何进行计数)

进行功能点计数是一个系统的过程,通常遵循国际功能点用户组(IFPUG)等组织发布的详细规则。以下是核心的计数步骤和方法:

  1. 确定计数范围和边界:

    明确要计数的软件应用范围以及该应用与外部世界的交互边界。这个边界决定了哪些数据文件是内部的(ILF),哪些是外部引用的(EIF),哪些交互是外部输入、输出或查询。

  2. 识别并计数数据功能:

    遍历系统的所有数据集合(文件或数据库表)。根据它们是由本系统维护还是由外部系统维护,分别识别为ILF或EIF。对于每一个识别出的ILF和EIF,根据其包含的“数据元素类型”(DETs,即用户可识别的、非重复的字段或数据项)和“记录元素类型”(RETs,即逻辑上的分组,如数据库中的记录类型或子类型)的数量,查阅IFPUG提供的复杂度矩阵(通常分为低、中、高),确定该数据功能的复杂度,并获得相应的未调整功能点值。

    例如:一个用户表(ILF)包含姓名、地址、电话等10个字段(DETs)和一个记录类型(RET)。根据矩阵,1-19个DETs和1个RET通常是低复杂度。

  3. 识别并计数事务功能:

    遍历系统所有的输入处理、输出生成和查询功能。根据它们是否改变内部数据状态,识别为EI、EO或EQ。对于每一个识别出的EI、EO和EQ,根据其涉及的“数据元素类型”(DETs)数量和“文件类型引用”(FTRs,即该事务功能读取或更新的ILF或EIF数量)的数量,查阅IFPUG提供的复杂度矩阵(通常分为低、中、高),确定该事务功能的复杂度,并获得相应的未调整功能点值。

    例如:一个“创建订单”功能(EI)。它需要输入客户信息、商品信息、数量等(可能涉及20个DETs),并需要更新订单表(ILF)和库存表(ILF)。它引用了2个文件(FTRs)。根据矩阵,一定范围的DETs和2个FTRs可能是中复杂度。

  4. 计算未调整功能点计数 (UFP):

    将所有识别出的ILF、EIF、EI、EO、EQ根据其复杂度获得的未调整功能点值加总。

    UFP = 所有数据功能的功能点总和 + 所有事务功能的功能点总和

  5. 确定价值调整因子 (VAF):

    IFPUG方法考虑了影响软件整体非功能性特征的14项“通用系统特征”(General System Characteristics – GSCs)。这些特征包括数据通信、分布式处理、性能、操作便利性等。对于每一项GSC,评估其对当前应用的影响程度(从0分“不相关”到5分“强影响”)。将14项GSC的得分加总(总分在0到70之间),计算出调整因子:

    价值调整因子 (VAF) = (总分 * 0.01) + 0.65

    VAF的取值范围在0.65到1.35之间。

  6. 计算调整后功能点计数 (AFP):

    将未调整功能点计数乘以价值调整因子,得到最终的调整后功能点计数。这个数值就是该软件应用的最终功能规模度量值。

    AFP = UFP * VAF

整个计数过程需要仔细阅读需求文档,并对系统的功能和数据结构有清晰的理解。这通常由经过培训的功能点分析师来执行,以确保计数的一致性和准确性。

【fpa框架】有多少?(关于量值和比例)

“有多少”这个问题可以从几个角度来理解:

  • 一个项目有多少功能点?

    这是一个非常具体的问题,答案取决于项目的大小和复杂度。

    • 小型、简单的应用程序(例如,一个简单的数据库查询工具)可能只有几十到一百多个功能点。
    • 中等规模的企业应用(例如,一个部门级的管理系统)可能在几百到一千多个功能点。
    • 大型、复杂的系统(例如,一个ERP系统、银行核心系统)可能有几千甚至上万个功能点。

    功能点的数量直接反映了系统为用户提供的功能“量”。

  • 一个功能点“值”多少工作量/成本/时间?

    这是将功能点用于估算的关键环节。这个“值”不是固定的,它取决于多种因素:

    • 团队生产力: 高效的团队可能每人月完成更多功能点。
    • 技术成熟度: 使用成熟的技术和框架通常能提高效率。
    • 项目类型: 新开发、增强、维护项目的效率不同。
    • 需求稳定性: 不断变更的需求会降低效率。
    • 管理和过程: 良好的项目管理和开发过程能提高效率。

    因此,通常需要根据组织自身的历史项目数据来建立“功能点到工作量/成本/时间”的转换模型或基准。行业基准数据(例如,不同应用类型和开发环境的平均生产力)也可以作为参考,但最好是使用自己的数据进行调整。例如,某个团队的历史数据显示,平均每人月能完成10个功能点。那么一个500功能点的项目,粗略估算需要50人月的工作量。

  • 计数过程涉及多少元素?

    如前所述,IFPUG方法涉及:

    • 5种主要功能类型。
    • 每种类型都有各自的复杂度矩阵(通常是3×3)。
    • 14个通用系统特征(GSCs)用于整体调整。
    • 计数过程中需要识别和计数的数据元素类型(DETs)、记录元素类型(RETs)、文件类型引用(FTRs)。这些元素的数量直接影响单个功能项的复杂度。

    一个复杂的应用,其DETs、RETs、FTRs的数量会非常庞大,需要细致的分析。

【fpa框架】如何实施?(如何在组织中落地)

在组织中成功实施FPA框架需要多方面的努力:

  1. 培训和知识建设:

    首先,需要组织相关的培训,让项目经理、业务分析师、开发人员等关键人员理解FPA的原理、方法和价值。最好能有经过IFPUG等认证的专业人士(如CFPS – Certified Function Point Specialist)来指导和执行计数。

  2. 建立统一的计数规范和流程:

    尽管有IFPUG等标准,但在具体实施时,组织内部需要制定一套统一、详细的计数指南和流程,以确保不同项目、不同分析师之间的计数结果具有一致性。这包括如何定义应用边界、如何处理复杂场景(如报表中的小计/总计、错误消息处理、接口服务等)。

  3. 集成到项目生命周期:

    将FPA计数活动明确地集成到软件开发生命周期中,尤其是在需求和设计阶段。明确由谁负责计数、何时进行计数、计数结果如何评审和存档。

  4. 工具支持:

    虽然手动计数是可能的,但对于大型项目或为了提高效率和一致性,可以考虑使用商业或开源的功能点计数工具。这些工具可以帮助管理计数过程、存储计数结果,甚至在某些情况下通过分析需求文档提供辅助计数功能。

  5. 建立和维护历史数据仓库:

    这是使用FPA进行准确估算和生产力分析的基础。需要系统地收集和存储每个已完成项目的FPA计数、实际消耗的工作量、缺陷数量、持续时间等数据。这些数据经过清洗和分析后,才能用于建立组织内部的估算模型和生产力基准。

  6. 持续改进:

    定期评审FPA的实施效果,检查计数结果的准确性和一致性,分析基于FPA的估算偏差,并根据反馈不断优化计数规范、流程和估算模型。

【fpa框架】怎么工作?(度量原理)以及【fpa框架】怎么与代码量区分?

这部分进一步解释FPA的工作原理及其与代码行数(LOC)的根本区别。

FPA框架怎么工作?(度量原理)

FPA工作的核心原理是,软件的功能规模可以通过量化其为用户提供的外部可见功能来衡量。它遵循以下逻辑:

  • 用户视角: FPA不关心软件内部是如何实现的,只关心用户能做什么、看到什么、输入什么、输出什么。
  • 功能分解: 将复杂的软件分解为上述五种基本的功能元素(ILF, EIF, EI, EO, EQ)。
  • 复杂度加权: 认识到不同功能元素的复杂程度不同(例如,一个简单的查询与一个复杂的报表涉及的数据元素和引用的文件数量不同),FPA通过分析这些元素的细节(DETs, RETs, FTRs),使用标准化的复杂度矩阵赋予不同功能元素不同的原始分值。
  • 整体调整: 除了单个功能的复杂度,系统的整体非功能性特征(如性能要求、易用性、安全性等)也会影响实现这些功能所需的工作量。因此,FPA通过评估14个GSCs,计算一个调整因子,对所有功能元素的原始总分进行最终调整。

通过这种方式,FPA试图捕捉实现一个功能所需的内在“工作量”或“价值”,而不仅仅是物理上的代码体积。

FPA框架怎么与代码量区分?

FPA和LOC(代码行数)是两种截然不同的软件规模度量方法,它们之间的根本区别在于:

  • 度量对象不同:

    • FPA: 度量的是软件的“功能规模”,即它为用户提供了多少功能。它关注的是系统的“做什么”。
    • LOC: 度量的是软件的“物理规模”,即组成软件源代码文件的文本行数。它关注的是系统的“由多少行代码组成”。
  • 独立性不同:

    • FPA: 独立于编程语言、开发技术、编码风格。同一个功能用不同语言实现,其功能点数应大致相同。
    • LOC: 高度依赖于编程语言、开发技术、编码风格。同一个功能用不同的语言或由不同的程序员实现,其代码行数可能天差万别(例如,用高级语言实现的功能所需的代码行数通常远少于用低级语言实现)。
  • 应用时机不同:

    • FPA: 可以在需求分析和设计阶段进行计数,因为它只需要清晰的功能定义。可以在项目早期提供规模估算。
    • LOC: 只能在代码编写完成后才能准确统计。在项目早期无法使用LOC进行估算。
  • 用途不同:

    • FPA: 主要用于项目早期估算、合同管理、生产力度量(作为产出单位)。
    • LOC: 主要用于开发过程中的进度跟踪(已完成多少行代码)、软件维护(需要维护的代码量)、作为FPA等方法的一个辅助或校验度量。

总结来说,如果将软件开发比作建筑,FPA度量的是建筑的“可用面积”或“包含多少房间、窗户、门等用户可见的功能元素”,而LOC度量的是构建建筑所使用的“砖块数量”。功能点提供了一个更稳定的、业务相关的软件规模视图,而代码行数更侧重于实现的细节和工作量的一个侧面反映。

通过上述对FPA框架是什么、为什么用、哪里适用、如何量、如何实施以及它与代码量区别的详细解答,希望能帮助读者更具体、深入地理解这个在软件工程实践中广泛应用的规模度量方法。它是一个强大的工具,如果正确地应用和管理,能够显著提升软件项目管理和交付的可预测性和成功率。


fpa框架

By admin

发表回复