软件研发成本度量相关国际标准介绍

2017-08-22| 发布者: admin| 查看: |

IFPUG FPA 4.3
      功能点分析(FPA)是在20世纪70年代初期,IBM委托Al-lan Albrecht 工程师和他的同事为解决 LOC 度量所产生的问题和局限性而研究发布的,随后被国际功能点用户协会(the International Function Point Users’Group,IFPUG)提出的IFPUG 方法继承,在国际软件行业范围内得到推崇和一致接受,并从单纯的规模度量发展到倾向于软件工程整个生命周期中的应用。2010年,IFPUG发布了4.3版本,简称IFPUG FPA 4.3。IFPUG标准也是其它4个功能规模度量标准的基础和原型。
1)功能类型
      IFPUG功能点标准将所度量的项目或应用区分为两大类型的功能:对最终用户可见的事务功能(Transaction Function)和对最终用户不可见的数据功能(Date function)。事务功能又进一步区分为三种子类型:外部输入(External Input,EI)、外部输出(ExternalOutput,EO)和外部查询(External Query,EQ);数据功能又区分为内部逻辑文件(Internal Logical File,ILF)、外部接口文件(ExternalInterface File,EIF)。
2)功能类型复杂度等级
      功能的复杂度等级可以划分为“低”(low)、“中”(average)和“高”(high)。事务功能复杂度等级是由数据元素类型(Data Element Type,DET)和引用文件类型(File TypeReferenced,FTR)决定的;数据功能复杂度等级是由 DET 和记录元素类型(Record Element Type,RET)决定。DET、RET和FTR的定义如下。
      DET:是用户可识别的无递归、不重复的信息单元,可以认为是一个数据元素、一个变量或一个字段。DET是动态的,而非静态的,可以读自于文件,或由FTR的数据单元创建。另外,一个DET也可以是对一个事务处理过程的唤醒,或是事务的有关信息。
      RET:是指在 ILF 或 EIF 中,用户可识别的数据集的子集,可以通过检查数据中的各种逻辑分组来识别它们,它们通常表现为一种父子关系。
      FTR:是指在一个事务过程中,所引用到的各种文件,可以是ILF,也可以是EIF。
3)功能点计算的过程
      根据功能点计数目的,可以把功能点计数分为三种类型,即应用(applications)功能点计数、开发项目(developmentprojects)功能点计数和升级项目(enhancementprojects)功能点计数。
估算功能规模的过程为:①确定功能点计算的类型;②识别计算范围和所要度量的应用程序边界;③识别和估算系统的各种功能要素及数量;④根据复杂度和加权值计算出未调整过的功能点数量 UFP(Unadjusted Function Point);⑤确定14 个功能点校正因子,并计算出校正后的功能点数量。
NESMA 2 .12005)简介
       NESMA为荷兰软件测量协会的简称(Netherlands Sftawre Metires Assoeiation ),是目前欧洲最大的功能点分析用户组织。NESMA功能点分析方法是在IFPUG功能点基础上由荷兰软件测量协会提出并维护的。该标准被广泛应用于软件行业尤其是成熟度较高的组织和企业中。
NESMA在IFPUG的基础上对功能点分析方法主要进行了以下优化和简化:外部查询与外部输出的识别、外部查询的复杂度确定、隐含查询处理和代码表处理等方面,同时根据项目或应用各生命周期阶段需求规约的详细程度,提供了3种类型的功能点计算:详细的(detailed)、估算的(estimate)及指示的(indicative)。
      NESMA功能点计数类型:
      指示功能点计数:在生命周期中的需求阶段时使用,对功能点进行近似估算。功能点数量等于:
      Indicative=35×ILF15×EIF
      该公式是建立在以下假设基础上的:假定存在大约3个EI (分别用于增加、修改和删除ILF中的信息),每个ILF平均存在2个EO和1个EQ,每个EIF平均有1个EO和1个EQ。通过指定事务功能的复杂度为“中”,以及数据功能的复杂度为“低”,获得了公式中的数字35和15。
估算功能点计数:在生命周期中的分析阶段时使用,每种功能类型(事务性功能类型和数据功能类型)的功能数量,使用标准值来表示复杂度:事务性功能类型的复杂度是“中”,数据功能类型的复杂度是“低”。
Indicative=7×ILF+5×EIF+4×EI+5×EO+4×EQ
      “低”复杂度的ILF转化为7个功能点数,EIF转化为5个功能点数,“中”复杂度的EI转化为4个功能点数,EO转化为5个功能点数,EQ转化为4个功能点数。
       详细功能点计数:在生命周期中的功能设计阶段时使用,是最精确的计数,事务性功能类型详细到所参照的逻辑文件FTR和数据元素类型DET,逻辑文件详细到记录类型RET和数据元素类型DET。通过这些信息,进而确立每个功能的复杂度。
      NESMA功能点计算的过程如下:
      1.收集可用的文档。
      2.确定应用程序的用户。确定被计数的应用程序从其他哪些应用程序中接受、和/或使用数据。
      3.确立究竟是进行应用程序的功能点计数、还是进行项目功能点计数。
      4.识别应用程序/项目的边界及范围,被划定在边界内的应用程序/项目应该组成一个独立的整体,在最大程度上独立于其他应用程序运行。通过该步骤确定被计数的应用程序从其他哪些应用程序中接收,和/或使用数据。
      5.识别功能,可参考下一章所描述的准则来确定功能的类型和复杂度,建议按照准则的次序进行识别,记录计数的结构和功能点数,尤其要记录下任何可能的疑问和假设。
      6.如可用的规约或需求文档足够详细,可以进一步确定14个一般系统特征中的每一个的影响程度并且记录下来。
      7.基于14个一般系统特征的影响程度总和来确定估值调整因子。
      8.将原始功能点数乘以估值调整因子得到校准功能点数。
      9.和用户一起,对那些牵涉到需要对可用规约或需求进行特别解释的方面进行验证,在必要时根据验证结果进行修正。
    10.和功能点分析专家一起,对于那些牵涉到需要对功能点计数准则进行特别解释的方面进行验证,该步骤可选。
COSMIC 4.0.1简介
      COSMIC方法是国际通用软件度量联盟推出的软件规模度量方法,对于实时类软件、嵌入式软件和MIS系统有更好的适用性。该方法于2002年12月成为了ISO的标准, 2014年6月份麦哲思完成了COSMIC4.0版的翻译工作,2015年4月,COSMIC发布了4.0.1版。相比于其他功能点估算方法,COSMIC方法适用的项目类型更广泛,计数规则更简单,学习成本更低。当理解了该方法的原则与规则以后,不需要记忆任何东西,因此,很适合大面积推广。
      1. COSMIC 度量方法的基本原理
      COSMIC 度量方法用“数据移动”的数量来表示整个系统的功能规模大小,它的度量对象为待度量软件的功能用户需求(Functional  User requirements,简称FUR)。一个数据移动指的是一个数据组的交换,即移动单个数据组,而一个数据组是由唯一的一组数据属性构成。COSMIC 度量方法对待度量软件的功能用户需求使用一组模型、规则和方法,最后得到一个具体的数字化值,表示待度量软件的功能规模大小。
在具体的度量过程中,它将待度量软件所实现的功能分解为一个或多个功能过程(Function  Process,简称 FP),在功能过程里涉及四种类型的数据移动:数据入(Entry)、数据出(Exit)、读(Read)、写(Write)。一个数据移动记为一个 COSMIC 功能点(Cosmic Function Point,简称 CFP),CFP是 COSMIC 度量方法的标准度量单位。最后将所有功能过程中的数据移动进行累加计数得到的数值就是整个软件系统的规模大小。
通过四种类型的数据移动,把原本抽象的软件功能具体化为了一种跨越待度量软件和功能用户之间边界的进出行为,将原本抽象的软件功能实现,具体化为了清晰直观的数据交换。通过这种具体的数据交互,非常真实的反映了软件的功能规模和具体实现方式,也让度量人员更加容易入手,即使是在待度量软件研究领域没有任何相关知识的度量人员,也可以通过COSMIC 方法,对软件的相关产物进行度量,操作性、实施性极强。下图表示四种数据移动的具体原理。
2. COSMIC 度量方法的度量过程
      通用 COSMIC 度量方法的度量过程包含以下三个阶段:
      1) 度量策略阶段。应用软件的上下文模型。
      2) 映射阶段。应用通用软件模型。
      3) 度量阶段。获得待度量软件规模的实际大小的度量数值。
      下图表示了 COSMIC方法度量的三个阶段的关系。
 
      度量策略阶段,主要完成确定度量目的;确定度量范围、边界;识别功能用户;确定度量的粒度级别;应用系统的物理分层几项工作。
      映射阶段,对待度量软件使用通用软件模型,识别出感兴趣对象、功能过程和数据组。
      度量阶段就是依据 COSMIC 方法的定义、规则,识别出4种数据移动类型,将4种功能数量相加,得到软件应用相应的COSMIC功能规模:
               功能规模=∑大小(Entries+∑大小(Exits+ ∑大小(Reads+∑大小(Writes)。

返回顶部