CMMI之功能点估算法---内部逻辑文件和外部接口文件

功能点分析的步骤

在本文中将以国际标准IFPUG(International Function Point Users Group)组织提供的功能点估算法V4.1.1为基础与大家进行讲解。如下图所示,首先大家应该了解功能点估算法的使用步骤。

图 功能点估算的步骤

  1. 识别功能点的类型。
  2. 识别待估算应用程序的边界和范围。
  3. 计算数据类型功能点所提供的未调整的功能点数量。
  4. 计算人机交互功能所提供的未调整的功能点数量。
  5. 确定调整因子。
  6. 计算调整后的功能点数量。

识别项目的类型

国际的IFPUG组织将软件项目分为三类,功能点估算法适用于任何一类项目

  • 新开发项目
  • 二次开发的项目
  • 功能增强的项目

识别项目的范围和边界

使用UML的“UseCase”用例图是以用户角度进行识别项目范围和边界的最好方法,因为在画用例图时就必须明确系统的边界。通过系统的边界我们可以知道哪些功能要计算功能点,哪些功能点是外部系统负责计算的。以下图为例:一个外贸订单系统只包含录入、修改、删除、查询和统计订单的功能,而汇率查询转换服务是不属于该系统的。

应用程序边界的识别规则大家一定要牢记,不能从技术角度去思考,必须从用户角度来定义;如果项目牵扯到多个系统,那么必须将这多个系统的边界全部描述清楚。

图 外贸订单系统用例图

FP功能点估算分类

FP功能点估算法将功能点分为以下5类:

  1. ILF:Internal Logical File内部逻辑文件
  2. EIF: External Interface File外部接口文件
  3. EI: External Input外部输入
  4. EO: External Output外部输出
  5. EQ: External Inquiry外部查询

其中ILF和EIF属于数据类型的功能点,EI、EO、EQ属于人机交互类型的功能点。

以外贸订单系统项目为例:

  • 录入订单、修改订单、删除订单是EI;
  • 查询订单是EO
  • 统计订单是EQ
  • 汇率查询转换系统为EIF
  • 订单和客户是ILF

识别功能点的重要原则

ILF、EIF要与EI、EO、EQ分开计算。对ILF和EIF复杂度的计算可以简单理解为对数据库复杂度的计算。对EI、EO、EQ复杂度的计算可以理解为对程序开发复杂度的计算。一般软件项目都是由数据和程序构成的,因此计算ILF、EIF和计算EI、EO、EQ之间没有任何关系。

内部逻辑文件与外部接口文件

ILF内部逻辑文件

内部逻辑文件是指一组以用户角度识别的,在应用程序边界内且被维护的逻辑相关数据或控制信息。ILF的主要目的是通过应用程序的一个或多个基本处理过程来维护数据。

EIF外部接口文件

外部接口文件是指一组在应用程序边界内被查询,但它是在其他应用程序中被维护的,以用户角度来识别的,逻辑上相关的数据。因此一个应用程序中的EIF必然是其他应用程序中的ILF。EIF的主要目的是为边界内的应用程序提供一个或多个通过基础操作过程来引用的一组数据或信息。

EIF所遵循的规则:

  • 从用户角度出发识别的一组逻辑数据。
  • 这组数据是在应用程序外部,并被应用程序引用的。
  • 计算功能点的这个应用程序并不维护该EIF
  • 这组数据是作为另一个应用程序中的ILF被维护的。

ILF和EIF复杂性计算

ILF和EIF的复杂性是取决于RET(Record element type)和DET(Data element type)的数量。DET是一个以用户角度识别的,非重复的有业务逻辑意义的字段。

DET计算的规则如下:

  • 通过一个基本处理过程的执行,对ILF进行维护或从ILF/EIF中返回一个特定的、用户可识别的、非重复的字段,那么每个这样的字段算一个DET。

    • 例如:添加一个外贸订单时需要保存“订单号码、订单日期、地址、邮编”,那么对于ILF订单来说它的DET就是4个。
    • 例如:保存订单时还会保存订单的明细,订单的明细往往作为一个子表进行保存,那么“订单号码”在主表和子表中都同时存在(主外键),但以用户角度来识别时,存盘操作是一个最小的单位,那么订单号码只能算做一个DET。
  • 当两个应用程序维护和/或引用相同的ILF/EIF,但是每个应用程序分别维护/引用它们相应的DET时,这些DET在这两个应用程序的维护或引用中将单独计算。
    • 例如一个应用程序的两个“Elementary Process”基本处理过程都需要使用到“地址”的信息,地址的信息又可以细分为“国家、城市、街道、邮编”。那么对于其中一个基本处理过程来说,他将整个地址信息作为一个整体进行处理,那就只算一个DET,另外一个基本处理过程使用每个地址的详细信息,那么DET就是4个。

RET计算的规则如下:

RET是指一个EIF/ILF中用户可以识别的DET的集合。如果把DET简单理解为字段的话,那RET就可以简单理解为数据库中的表。RET在ILF/EIF中分为两种类型:可选的(Optional)和必选的(Mandatory)。计算RET的规则为以下两点:

  • 在一个ILF/EIF中每一个可选或必选的集合都被计算为一个RET。
  • 如果一个ILF/EIF没有子集合,则ILF/EIF被计算为一个RET。

    例如:在外贸订单系统中添加一个订单时会保存“订单信息、客户的ID、部门的ID”。那么订单系统ILF中RET为:

    1、订单信息(必选的)

    2、客户信息(必选的)

    3、部门信息(可选的)

    因此ILF中RET的个数为3个。

ILF/EIF复杂度的矩阵如下

 
1~19个DET

20~50个DET

超过51个DET
1个RET


中等
2~5个RET

中等

6个以上RET
中等


原文地址:https://www.cnblogs.com/lcword/p/8966709.html

时间: 2024-10-06 13:31:07

CMMI之功能点估算法---内部逻辑文件和外部接口文件的相关文章

对三点估算法的理解

三点估算也称PERT法,在计算每项活动的工期时都要考虑三种可能性,计算最悲观的工期.最可能的工期.最乐观的工期,然后再计算出该活动的期望工期,PERT法计算的是期望工期. 用PERT法计算工期,我们必须记住下面三个公式(P代表最悲观工期:M代表最可能工期:O代表最乐观工期) PERT公式 标准差公式: 方差公式: 用PERT公式计算出来的是完成某活动的平均工期,即有50%的可能性在该工期内完成.用正态统计分布图,工期落在平均工期1个标准差范围之内的概率是68.26%,2个标准差之内的概率是95.

Java基础-输入输出-2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt

2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt package Test03; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import jav

Android 存储学习之在内部存储中读写文件

大家都知道,在实际工作中开发,进场需要将一个文件写入到手机的存储中.既然说到手机的存储空间,那就先说说手机的存储空间分类: 1: 内部存储空间 RAM内存: 也就是手机的运行的内存,相当于电脑的内存 ROM内存: 也就是手机的存储内存,相当于电脑的硬盘 2: 外部存储空间 也就是可插拔的SD卡,相当于电脑的移动硬盘,U盘等. 既然手机存储分为两类,那我们先看看如何在手机的内部存储中读写文件. 那我们引入一个实际中很常见的例子: 一般带登录界面的,都需要将用户的信息保存到本地.我们就用上面的例子演

tengine lua 开源一 调用内部接口高效发送文件

tengine  lua 开源一 调用内部接口高效发送文件 开源自己封装的sendfile 模块,可以高效的通过lua发送文件 源码地址:https://github.com/weinyzhou/Lua-sendfile 调用方法 local sendfile=require "sendfile"; sendfile.call(filename,-1,-1); 第一个参数文件名, 第二个参数开始位置 第三个参数长度

使用功能点估算模型评估软件测试的工作量

功能点分析法应用在软件测试中,它最核心的价值究竟是什么呢? 让我们先看看软件开发,这是跟测试离得最近的工作类型.开发工程师工作大致可以分为“设计”和“编码”两步.设计一般是使用UML语言,借助类似于Rose这样的工具,绘制一些UC图.类图.ER图等 最近有位同事问我,“天彤你搞这个功能点分析算法,主要目的是度量project的规模么,还是度量测试工程师的工作量?”我说,这两个确实是最初的目标,不过现在,这只是功能点算法的副产品,并不是核心价值.“那是不是根据功能点分析,可以自动生成测试用例呢?”

使用Charles代理功能将网络请求定向至本地文件

最近在进行前端开发的时候发现Charles一个非常牛叉的功能,就是可以通过代理将网络请求定向至本地文件.有了这个功能在进行iOS开发时就可以在缺少后台接口的情况下更加真实的进行数据mock了(反正我们公司的后台...不想吐槽了). 我们先用NSURLSession发送一段简单的post请求: NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://192.12

Jar包读取内部和外部的文件

jar包中的类如何读取包内和包外的配置文件 最近将代码打包成jar包,关于如何处理读取配置文件的问题特此记录一下. Java代码 out.properties a.jar -com -a.class -in.properties 如上所示,out.properties是于a.jar包在同一文件目录下: in.properties是在a.jar包内部的. 关于a.class如何读取jar内或jar外的配置文件, 如下所示: Java代码 FileInputStream inputStream1 =

vue组件内部引入远程js文件

之所以要做这个是因为,在一个组件内部需要引入一个js文件来定位.如果放在index.html,这样每个组件都会有这个js.所以需要在组件内单独引入. 第一种操作 Dom引入js: export default { mounted() { const s = document.createElement('script'); s.type = 'text/javascript'; s.src = 'https://g.alicdn.com/dingding/dinglogin/0.0.2/ddLo

Android 内部存储安装apk文件实现

目前国内市场的山寨机横行,安卓手机升级也是一天一个样,对于原来老手机可能没有SDCARD,导致我们的APP不能下载资源,无法更新APP,针对这种情况有以下解决方案.通过以下函数判断是否有SD卡再判断下载到哪个目录下. /** * 安装应用 */ public static void update(File apkFile, Context context) { Intent intent = new Intent(Intent.ACTION_VIEW); if (apkFile != null