兴趣对象是COSMIC方法中一个关键的概念。它影响了我们识别的功能点的多少。兴趣对象是描述中在功能需求中的、功能用户感兴趣的事物,它可以是一个具体的东西,也可以是一个抽象的概念,系统一定要对它执行输入、输出、读或写的动作。
在COSMIC中对兴趣对象有明确的定义,识别兴趣对象的规则也有定义。结合度量手册与其他指南,结合我的实践经验,总结了如下的实用性规则,供大家参考:
1兴趣对象一定是来自于功能需求的,是需求中提到的,而不是实现时开发人员基于技术的需求而临时存储或处理的数据。比如临时表、临时变量、系统界面中软件开发商的信息,这些都不是兴趣对象,也就是对这些信息的处理都不计算功能点。
2兴趣对象未必一定要存储到硬盘上或其他介质中,即兴趣对象未必一定要在系统中读或写,它也可以只有输入或只有输出,比如在查询功能中的查询条件,就是一个兴趣对象,他可能只有输入的数据移动。
3不同的兴趣对象代表了不同的事物或概念。比如人和车就是不同的事物。
4在一个系统中,具有不同属性的事物是不同的兴趣对象。
5在一个系统中,具有不同发生频率的事物是不同的兴趣对象。
6在一个系统中,具有不同的关键字的事物是不同的兴趣对象。
我们可以通过如下的例子,加深对上面的规则的理解:
例1:录入人员的如下信息:人名,身份证号,性别,车牌号。
此时是识别为几个兴趣对象呢?应该只有一个兴趣对象:人员,它的属性包括人名,身份证号,性别,车牌号。车牌号不应该被识别为一个单独的兴趣对象,它只是人员的一个属性!
所以此需求的功能点为:
人员(人名,身份证号,性别,车牌号)
车(车牌号,车的发动机号,车的品牌)
根据前面的规则3与规则4,此时人和车是两个不同的兴趣对象,他们具有不同的属性,有不同的关键字,虽然他们在本需求中是一对一的关系。不能认为车的发动机号,车的品牌是人的属性。
所以此需求的功能点为:
例3:录入如下的信息:人名,性别,车牌号,发动机号,品牌。但是一个人可以拥有多部车。
此时是识别为几个兴趣对象呢?还应该是两个兴趣对象:
人员(人名,身份证号,性别)
车(车牌号,车的发动机号,车的品牌,车主的身份证号)
根据前面的规则5,一个人拥有多部车,人与车是单独的兴趣对象。
所以此需求的功能点为:
例4:录入如下的信息:人名,性别,车牌号,车的发动机号,车的品牌。但是一个人可以拥有多部车,一部车可以属于多个人拥有,比如一家人,都可以认为是车的主人,一家人可以有多部车。此时是识别为几个兴趣对象呢?应该是三个兴趣对象:
人员(人名,身份证号,性别)
车(车牌号,车的发动机号,车的品牌)
人与车的对应关系(车牌号,身份证号)
根据前面的规则5,一个人拥有多部车,人与车之间对应关系是单独的兴趣对象,而人与车的关系,有自己独立的关键字,所以应该识别为单独的一个兴趣对象,并且,人、车,人与车的对应关系,他们三者发生的频率也是不同的。
所以此需求的功能点为:
上述的这个例子仅仅是一个示例,现实中的需求可能不是这样的,因为维护上述的关系很可能是不同的功能处理。
例5: 查询在人员数据库中所有年龄超过x的员工
在此需求中,根据规则2,查询条件是一个单独的兴趣对象,它只有会被输入,不会被存储,而人员信息是另外一个兴趣对象。此需求的功能点为:
在商业应用软件中,每个兴趣对象通常有多个属性,而在嵌入式实时系统中,很可能一个兴趣对象只有一个属性:例6: 人可以通过遥控器可以控制空调的温度大小。
此时,目标温度是一个兴趣对象,其属性只有一个,即温度值。
此时在区分目标温度是否是是一个单独的兴趣对象时,要根据规则3来判定。
兴趣对象并不意味着要求要采用面向对象的方法,这里的兴趣对象与面向对象方法中的对象不能画等号。采用结构化开发方法或其他任何开发方法都可以使用COSMIC方法计算功能点。