合理的度量需求变更的规模是COSMIC方法比第一代的功能点估算方法更科学的亮点。在度量需求的变更时,首先需要明确我们的度量目的,即我们要度量的是本次变更的规模,而不是变更之后的规模。明确目的后,要将变更的需求按照功能处理拆分,在一个需求变更中,可能存在几种情况:
1 新增的功能处理,此时按照前面讲的度量方法识别功能点即可;
2 删除的功能处理,被删除的功能处理的功能点个数即是本次变更的规模;
3 对已有的功能处理进行了变更,
这种情况又可以细分为三种情况:
新增了某些数据移动;
删除了某些数据移动;
修改了某些数据移动;
把修改的、删除的、新增的功能点累加起来即得到本次变更的规模。
新增与删除数据移动是很容易识别的,稍微复杂一点的是修改。什么是修改呢?
1)某数据移动的数据组做了变更:
新增了属性,减少属性,属性的含义或格式改变了。
数据移动、数据组、属性三者的关系再回顾一下,一个数据移动移动了一个数据组,而一个数据组包含多个属性,即:1个数据移动→1个数据组(属性1,属性2…属性n)。
2)某数据移动对应的数据运算改变了:
处理逻辑的修改。
我们通过一个简单的例子来解释上述的规则:
在一个人力资源管理系统中,有一个简单的功能性用户需求是录入员工的个人信息:
需求版本1:
1)录入员工的个人信息,包括录入员工的姓名、身份证号、第一学历;
2)人员不可以重名。
这是变更之前的需求,其规模为:
子处理(数据移动) |
类型 |
兴趣对象与数据组及其属性 |
功能点 |
输入人员信息 |
输入 |
人员(姓名、身份证号、第一学历) |
1 |
校对是否重名 |
读 |
人员(姓名) |
1 |
提示不能重名 |
输出 |
错误提示 |
1 |
保存人员信息 |
写 |
人员(姓名、身份证号、第一学历) |
1 |
现在需求发生了改变,要求人员可以重名了。新需求为:
需求版本2:
1)录入员工的个人信息,包括员工姓名、身份证号、第一学历;
2)人员可以重名。
则本次需求变更的规模为多少呢?
子处理(数据移动) |
类型 |
兴趣对象与数据组及其属性 |
功能点 |
输入人员信息 |
输入 |
人员(姓名、身份证号、第一学历) |
1 |
|
|
|
|
|
|
|
|
保存人员信息 |
写 |
人员(姓名、身份证号、第一学历) |
1 |
当发生变更时,不需要校对是否重名了,就是删除了读这个功能点。原来需要提示不能重名,现在也不需要了,所以这个错误提示功能点也没有了,那么本次变更的规模就是2个功能点。
变更前的功能点数是4CFP,变更后的功能点数是2CFP,本次变更的规模是2CFP。
假如说需求又发生了变更,要求按照身份证的生成规则,校对身份证号的正确性,则就有了第3个版本的需求:
需求版本3:
1)录入员工的个人信息,包括员工姓名、身份证号、第一学历;
2)人员可以重名;
3) 需要按照身份证号的规则简单校验身份证号的正确性,如果错误,则要提示重新录入。
校验规则如下:18位公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
此时,对于身份证号的校验是一个算法,根据校验结果生成了错误提示,这个错误提示是以前的需求没有的,因此是新增了一个功能点:输出错误提示。
这里不需要对校验身份证正确性识别一个读操作,因为读写的对象是持久性存储介质,身份证的校验规则写在程序中,没有向持久性存储介质读取规则的动作。
子处理(数据移动) |
类型 |
兴趣对象与数据组及其属性 |
功能点 |
输入人员信息 |
输入 |
人员(姓名、身份证号、第一学历) |
1 |
提示身份证号不正确 |
输出 |
错误提示 |
1 |
保存人员信息 |
写 |
人员(姓名、身份证号、第一学历) |
1 |
变更前的功能点数是2CFP,变更后的功能点数是3CFP,本次变更的规模是1CFP。
假如需求又发生了改变,要求检查身份证号是否重复,因此,就有了第4个版本的需求:
需求版本4:
1) 录入员工的个人信息,包括员工姓名、身份证号、第一学历;
2) 人员可以重名;
3) 身份证号不能重复;
4) 需要按照身份证号的规则简单校验身份证号的正确性,如果错误,则要提示重新录入。
规则如下:18位公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
此时对于输出错误提示的内容做了修改,会根据错误情况提示是身份证号重复还是位数有误,相当于该数据组的一个属性被修改了。同时,因为需要去持久性存储介质中读取已有的身份证号码,确认是否重复,因此也增加了一个读的数据移动。
子处理(数据移动) |
类型 |
兴趣对象与数据组及其属性 |
功能点 |
输入人员信息 |
输入 |
人员(姓名、身份证号、第一学历) |
1 |
校对身份证号是否重复 |
读 |
人员(身份证号) |
1 |
提示录入出错或身份证号重复 |
输出 |
错误提示 |
1 |
保存人员信息 |
写 |
人员(姓名、身份证号、第一学历) |
1 |
因此,变更前的功能点数是3CFP, 变更后的功能点数是4CFP,本次变更的规模是2CFP。
对于变更后的功能点数,虽然有两个错误提示消息,但在一个功能处理内所有不包含用户感兴趣的其他信息的错误/确认消息,都要合并为一个输出。