最近与某运营商开展合作项目时,客户需要我方输出一份COSMIC软件规模度量数据用于评估项目预算,由于此前未接触过COSMIC软件规模度量方法,故翻阅相关文档系统的学习了下COSMIC度量方法,形成此学习总结文档。详细讲述了COSMIC度量过程的三个阶段,并以物联网风控平台中的一个功能用户需求场景为例,分析如何运用上述介绍的度量方法来进行识别通用软件模型元素并进行度量。
COSMIC简介
COSMIC是一种主流的软件功能规模度量方法,其原理是通过识别“数据移动”的个数来度量软件规模,每个数据移动计为一个COSMIC功能规模单位(CFP),四种数据移动类型分别为:输入(Entry)、输出(eXit)、读(Read)和写(Write)。
COSMIC度量过程
COSMIC度量方法可分为三个阶段,分别为度量策略阶段,映射阶段和度量阶段。度量策略阶段需要明确发起软件度量的目的、范围和功能用户,识别出适合用于度量的功能用户需求(FUR)级别;映射阶段需要将被度量软件映射为通用软件模型,识别出触发事件、功能处理、兴趣对象及数据组、数据属性和数据移动这些通用软件模型的元素;度量阶段是根据度量单位和度量规则汇总度量结果。下面会分别对各个阶段做详细介绍。
度量策略阶段
度量策略阶段需明确以下四个概念。
1、确定度量目的:
为什么执行本次度量以及度量结果的用途,如度量客户的概要说明以提供报价参考;度量完整用户需求估算成本投入等。
2、确定度量范围:
度量哪些软件块的规模,在度量活动中所包括的功能用户需求的集合。
3、确定功能用户:
站在什么使用角度,功能用户是软件块的功能性用户需求中数据的发送者或预期的接受者。通常包括人,其他与待度量软件存在接口的软件已经硬件设备(屏幕、按键等)。
4、确定需求描述详细程度
功能性用户需求(FUR)是用户需求的子集,描述软件应提供的任务和服务。通俗的讲就是描述了软件需要为功能用户做什么。精确的COSMIC功能规模度量要求待度量的FUR的颗粒度达到能够识别功能处理及其数据移动的级别。
度量策略阶段可利用环境图展示被度量软件块在其功能用户环境中的范围以及它们之间的数据移动。
名词解释:
- 边界 – 被度量软件和它的功能用户之间的一个概念性接口,在两个有数据交换的软件块之间,同样存在一个这样的边界,此时一个软件块是另一软件块的功能用户,反之亦然。
- 持久存储介质 – 在功能处理生命周期结束后仍存储数据组的存储介质,持久存储介质存在于被度量软件的边界内,因此不能被视为被度量软件的功能用户。
软件环境模型图:软件块跨越边界与功能用户交互,并与边界内的持久存储介质交互
映射阶段
映射阶段需识别出触发事件、功能处理、兴趣对象及数据组、数据属性和数据移动这些通用软件模型的元素,这些元素之间的关系如下:
触发事件、功能用户、数据组及功能处理关系图
1、识别触发事件
触发事件通俗地讲就是发生在被度量软件以外的,由其他事物所产生的,要求被度量软件响应的事件。
触发事件的来源:
1)功能用户自己产生的触发事件,比如用户感到饥饿,所以在外卖软件点餐,此时用户感到饥饿即为触发事件。
2)功能用户及被度量软件块之外的事物产生触发事件,比如每到中午12点,用户就到外卖软件点餐,此时中午十二点即为触发事件。
2、识别功能处理
功能处理是最小的,独立的功能部件,每个功能需求都可以拆分为功能处理,如人员管理功能拆分为增加一个人员,删除一个人员等。一个功能处理至少包含两个数据移动,一个输入E加上一个输出X或写W。
3、识别兴趣对象与数据组
兴趣对象是软件处理的数据对象,需要软件去输入,输出,读或写它,而数据组是兴趣对象的属性的子集。比如某个系统中,人员是要处理的一个数据对象,人员有姓名,性别,年龄,出生日期等属性,这些属性的集合就是数据组。
4、识别数据属性
数据属性是兴趣对象的属性,描述了兴趣对象的一个特征。比如人的姓名,性别,年龄,出生日期等。
5、识别数据移动
任何一个功能处理都是由输入E、输出X、读R、写W构成的,输入、输出、读、写就是数据移动。
输入E: 将一个数据组从功能用户一侧跨越边界移动给需要它的功能处理
输出X: 将一个数据组从功能处理一侧跨越边界移动给需要它的功能用户
读R: 将一个数据组从持久存储介质移动到需要它的功能处理
写W: 讲一个数据组从功能处理移动到持久存储介质
四类数据移动E, X, R, W
注意:
- 与输入、输出、读和写四种数据移动相关的数据运算被包含在对应的数据移动中,即不单独度量数据运算子处理。
- 人类功能用户用来控制软件使用的控制命令,不能被识别为数据移动,因为它不移动关于兴趣对象的数据。例如翻页跳页命令,针对上一步操作点击“确认”或“取消”按钮。
- 功能处理为引起人类用户注意而发起的错误/确认消息,用于确认数据已被接受或提示输入数据错误,并且是FUR中要求输出或处理的,此类错误/确认消息应识别为一个输出数据移动。
度量阶段
将每个软件块(软件模块)作为一个独立的软件项进行度量,对每个识别出的功能处理的数据移动按照类型进行求和,将每个总和进行登记,得出被度量软件块每种数据移动的规模;将该软件块的所有数据移动总和计为该软件块的功能规模。
最终度量结果可表示为:
x CFP(v.y)
其中:x表示使用v.y版本的COSMIC方法得到的软件规模度量数值汇总,如:2500CFP(4.0)
扩展COSMIC度量方法
COSMIC度量方法被设计用于度量“数据移动为主”的软件,并不能够度量软件所有方面的规模。因此COSMIC度量方法当前不能单独明确地度量数据运算子过程的FUR规模,该方法也没有捕获数据移动的数据属性数量多软件规模的影响。针对这类情况,COSMIC度量方法提供了本地化扩展。
针对复杂算法的本地化拓展
如果有必要解决复杂算法的度量问题,可以为这种例外的功能设置一个本地化标准。对于任何包含非常复杂的数据运算的功能处理,可以按照本地标准定义功能点。
示例:“在我们组织中,诸如<算法示例列表>的数学算法计作1个本地FP。<另一个算法示例列表>计作2个本地FP。”
当使用了本地化扩展时,最终度量结果可表示为:
CFP(v.y) +z LocalFP
其中:
x表示使用v.y版本的COSMIC方法得到的软件规模度量数值汇总,如:2500CFP(4.0)
z表示使用COSMIC本地化扩展得到的所有度量数值汇总,如:100FP
用户功能需求度量案例分析
下面以物联网风控平台中的一个功能用户需求场景为例,分析如何运用上述介绍的度量方法来进行识别通用软件模型元素并进行度量。
原始需求:物联网风控平台能够以区域为维度进行物联网卡语音话单异常分析,需要从DACP平台获取原始语音话单数据,并进行分析存储,详细过程如下:
- DACP平台定时将语音话单数据(包含本方号码、对方号码、被访区域、通话时长、IMSI、IMEI等数据属性)导入到物联卡风控平台;
- 物联网风控平台对数据进行清洗、提取后存储;
- 需对导入数据格式进行校验;
- 物联网风控平台对存储的话单数据进行物联网卡异常分析并保存分析结果。
分析用户功能需求我们可识别:
- 功能用户为DACP平台,因为它是触发数据组的发起者;
- 触发事件为设定的某一时刻;
- 功能过程识别为:DACP平台数据导入接口将语音话单数据导入物联网风控平台,物联网平台对数据进行清洗和提取后保存,对存储的话单数据进行异常分析并按区域保存在数据库;
- 触发输入数据组为语音话单数据
- 在识别数据移动时,我们可以形成如下环境图:
可形成如下为度量表格,每一个度量团队使用的度量表格式以及度量字段会有区别,针对所需做适当增减和调整。
按照标准COSMIC数据移动识别规则:所有数据运算都与四类数据移动(E、X、W、R)相关联且被包含在内,故不单独识别为数据移动。但是在示例功能用户需求中,包含数据提取,大数据分析这类复杂的数据运算处理,实际上会需要较多开发投入。针对这种情况,我们可以增加本地化拓展标准将此类数据运算纳入度量范围。
在此案例中,我们可以新增本地化扩展标准示例如:“在我们团队中,诸如对话单数据的清洗和提取数据算法、分析物联网卡异常算法可识别为1个本地FP”
然后在汇总度量结果时,将使用COSMIC本地化扩展得到的所有度量数据包含在内。
此时案例度量结果可表示为:
5CFP(4.0)+2LocalFP
jk_123