在COSMIC方法中,功能处理可拆分为四种数据移动:输入,输出,读,写。数据移动是最小的、不可再拆分的、软件内部的动作。在数据移动中包含了算术运算如加减乘除,关系运算如等于、不等于,逻辑运算如与或非,这些数据运算都是不计算功能点的。
在识别功能处理的输入(包括触发输入即第一个数据移动,也包括其他输入)时要注意如下的问题:
1 每个数据移动仅能移动一个兴趣对象的一个数据组。
这个规则是不能违背的。在实践中往往是由于对某组数据是否是一个独立的兴趣对象识别错误,而造成计数错误,读者可以再仔细读一下《如何识别兴趣对象》一文中的案例。
2 输入同一个兴趣对象的不同数据组。
在一个功能处理中,如果一个输入移动了同一个兴趣对象的不同的数据组,并且这些输入的源头是不同类型的外部功能用户,此时需要计数为不同的功能点。否则,要视为相同的功能点。
例如:
在一个地震监测软件的功能处理中,不同类型的传感器监测了地震的不同参数值,有的传感器监控了震级,有的传感器监控了位置等,这些参数都是描述某次地震的数据属性,是同一个兴趣对象的属性,而不同类型的传感器产生了移动同一个兴趣对象的不同数据组的输入,因此要识别为多个输入。
再如:
在一个人员管理系统中,当同一个操作员需要录入人员的很多属性信息时,即使分成了多屏,即使是时间上不连贯的多次录入,只要是在同一个功能处理内,仍然仅计算为一个输入。
3 输入仅有一个属性的数据组。
对于实时软件而言,这种情况很常见。有可能某个兴趣对象仅有一个属性。比如温度传感器采集了温度信息。
对于应用软件而言,这种情况并不多见,一般一个兴趣对象会有多个属性。
4 输入具有n个属性的数据组。
在输入时,如果一个兴趣对象有多个属性,允许功能用户可以输入该兴趣对象的一个或多个属性(不论一个还是多个属性,都属于一个数据组),而剩余的其他属性可以保持空白,此时仅计算为一个输入。
例如,我们常见的12306系统的车票查询功能:
查询条件有很多个属性:日期,车次类型,出发站,到达站,出发时间等,每次查询时不需要设置所有的查询条件,可能仅仅是部分属性,此时不能把每种属性的组合识别为一个输入,而应该仅仅是一个输入。
5 不要混淆了输入与读。
输入是从功能处理的外部移动到功能处理的内部。输入的源头是被度量的功能处理以外的功能用户,输入的目的地是被度量的功能处理。输入和读不要混淆,读的源头是存储介质,目的地是被度量的功能处理。存储介质被认为是在度量范围内,在功能处理的内部,而不是外部的功能用户。从下图的软件环境模型中可以很清楚的看出二者的区别。
6 触发输入的特殊性。
触发输入是一个功能处理的第1个输入,它分成2种情况:
情况1: 仅仅起到通知作用的触发输入。
如有这样一个功能性用户需求:当进入一个部门查询功能处理时,系统会列出公司内的所有部门。此时,在该功能处理中仅仅只有一个输入,此输入仅起到了启动该功能处理的作用,没有移动其他数据到功能处理内。
情况2:既起到了通知的作用,也附加了数据信息进来。
如有这样一个功能性用户需求:查询年龄超过某个数值的员工。此时,在该功能处理中触发输入既起到了通知的作用,也包含了查询条件的数据。
按照COSMIC的度量规则,一个功能处理至少包含一个输入和输出,或者包含一个输入和写。一个功能处理的第1个数据移动一定是输入,是输入启动了功能处理。输出和写都是对输入的响应,如果没有输出和写,只有输入和读构成的一个功能处理,那就意味着功能处理没有给功能用户提供服务,这就不是一个功能处理,是没有价值的,不能独立存在的,是无意义的功能。
对于触发输入也可以这么理解:
如果你能明确地识别出一个移动了某个数据组的输入,则就可以忽略启动功能处理的动作了。如果在一个功能处理内,没有明确的识别出移动了某个数据组的输入,则必须识别启动功能处理的动作为一个输入。
7 时钟信号作为触发输入。
时钟信号作为触发输入在实时软件中是很常见的。比如对于空调中的控制软件,每5秒钟就会监测环境温度与目标温度的差别,控制压缩机是否工作,此时时钟信号就是一个触发输入。再如在应用软件中,每到晚上12点,系统会自动备份,自动备份系统数据的触发输入就是时钟信号。
8 输入中包含了相关的数据运算。
在度量输入时,对应的数据运算是不单独计算功能点的。
如:
在输入人员的账号密码时,密码是星号显示的,不能明文显示,这就是对输入数据的数据运算。
9 输入中包含了提示用户输入数据的提示信息。
提示用户应该输入什么信息,这些提示信息被认为已经包含在了输入中,不单独计算功能点。
如:
软件在输入栏中有提示:请输入你的身份证号。
这种提示信息是不单独计算功能点的。
再如:
软件画出了一个单据的录入格式:
画出此录入界面也不单独计算功能点。
10 输入数据的缺省值
如果在输入时对于数据属性有缺省值,此时有2种情况:
情形1: 缺省值是固定不变的,不需要从持久存储介质中读出来的,是不需要计算功能点的。比如录入人员信息时,可以选择性别,这是固定的两个选择:男,女,此时对于这类缺省数据的显示是不计算功能点的。再如,当录入订单信息时,缺省的产品数量是1,此时对缺省值的显示也不需要计算功能点。
情形2: 缺省值是变化的,需要从持久存储介质中读出来。此时需要为这些信息的显示识别一个读与一个输出。比如,在录入供应商的订单信息时,供应商的付款方式是根据上次的付款方式查询出来,并显示出来供录入人员修改。此时缺省的付款方式的显示就要识别一个读与一个输出。