为什么80%的码农都做不了架构师?>>>
1 术语表
数据组:所谓的数据组就是一个包含了唯一非空的并且非冗余的数据属性集合;从JAVA的角度说,就是一个对应数据库表的Domain Class(JavaBean)。
功能过程:功能过程是一个能够实现某一软件功能的用户功能需求集合,其中包含了一组指定的可执行的数据传送。
关注对象:工程过程中传递的主要数据组。
2 COSMIC-FFP简介
通用软件度量国际协会(Common Software Measurement International Consortium ,COSMIC)提出的全功能点分析方法(COSMIC-FFP)。
COSMIC-FFP是第2代的功能规模度量方法,它不仅适合于信息系统的规模度量,还适合于实时系统和多层系统的规模度量,已经被ISO接受为国际标准(ISO/IEC 19761:2003,软件工程 - COSMIC-FFP - 一种功能规模度量方法)。该方法可以在软件开发生命周期的各个阶段使用,从用户功能的视角入手,起源于客户可以理解的术语,不需要调整因子,简单易行。
3 COSMIC-FFP工作原理
COSMIC-FFP 通过入口(Entry)、出口(Exit)、读取(Read)和写入(Write)4 种数据流类型来确定软件系统功能的规模。它的度量标准单位是CFP(COSMIC Function Point),等同于一个数据流。
COSMIC-FFP 软件模型中有几个关键的概念:功能用户(FU) , 层(Layer) , 边界(Boundary) , 关注对象(Object of Interest),功能过程(FP)和数据组(Data Group)。待度量的目标软件首先被分解为多个层,每个层分别实现不同部分的软件功能;每一个层都需要定义十分清晰的边界,在边界上会有不同类型的数据传送发生;数据传送就是将某一特定的数据组在边界上进行传递。
该模型把数据移动分为4 种类型:Entry(将数据组从用户移到目标软件),Exit(将数据组从目标软件移到用户),Read(将数据组从存储设备移到目标软件)和Write(将数据组移到存储设备)。其中,Entry 和Exit 属于用户接口,Write 和Read 属于存储器接口。每个有效的数据传送都被看成一个CFP。
4 COSMIC-FFP估算过程
1. 识别系统中的用例图;通过用例图确定度量范围和应用程序边界;
2. 识别系统中的类图;通过类图确定关注对象和数据组;
3. 通过时序图来确定用例中的有效数据移动类型和次数;
4. 识别CFP值并累加形成总CFP值
5 COSMIC-FFP实例
实例引用自PMS系统的创建任务。
5.1 时间管理模块的部分用例图
5.2 时间管理模块的部分类图
5.2.1 实体类
5.2.2 边界类
5.2.3 控制类
5.3 时间管理模块的部分时序图
5.4 对COSMIC-FFP的扩展
考虑到数据项的多少会影响开发量的大小,所以在COSMIC-FFP中增加了对数据组的扩展。
在此实例中,关注对象为任务实体。所以我们主要关注任务实体的数据属性的个数。
5.5 结果
消息 | 消息类型 | 数据组 | 数据组个数 | CFP值 |
2 | Entry | - | - | 1 |
3~10 | Read | 项目等 | 8 | 8 |
11 | Exit | 项目等 | 8 | 8 |
13 | Entry | 任务 | 1 | 1 |
14 | Read | 员工 | 1 | 1 |
15 | Write | 任务 | 1 | 1 |
16 | Write | 任务拆分 | 1 | 1 |
17 | Exit | - | - | 1 |
数据属性个数: | 42 | |||
CFP合计: | 22 | |||
CFP总计: | 64 |
通过以上分析,创建任务的功能点(CFP)为64个。
6 总结
上边的实例采用了UML的设计方法,实际上本功能点估算方法与UML并没有直接的关系。只不过通过UML的设计方法可以很容易地与本功能点估算方法结合,提高效率。
以上估算方法仅适用于估算软件编码阶段的功能点。至于项目的其他阶段任务的功能点估算方法还在寻觅中。
此博文是本人在2010年6月在公司内部提出的功能点估算方法,主要是利用此方法来衡量人员的生产效率,由于水平有限,仅供参考。欢迎交流