最近与某运营商开展合作项目时,客户需要我方输出一份COSMIC软件规模度量数据用于评估项目预算,由于此前未接触过COSMIC软件规模度量方法,故翻阅相关文档系统的学习了下COSMIC度量方法,形成此学习总结文档。详细讲述了COSMIC度量过程的三个阶段,并以物联网风控平台中的一个功能用户需求场景为例,分析如何运用上述介绍的度量方法来进行识别通用软件模型元素并进行度量。
COSMIC是一种主流的软件功能规模度量方法,其原理是通过识别“数据移动”的个数来度量软件规模,每个数据移动计为一个COSMIC功能规模单位(CFP),四种数据移动类型分别为:输入(Entry)、输出(eXit)、读(Read)和写(Write)。
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
注意:
将每个软件块(软件模块)作为一个独立的软件项进行度量,对每个识别出的功能处理的数据移动按照类型进行求和,将每个总和进行登记,得出被度量软件块每种数据移动的规模;将该软件块的所有数据移动总和计为该软件块的功能规模。
最终度量结果可表示为:
x CFP(v.y)
其中:x表示使用v.y版本的COSMIC方法得到的软件规模度量数值汇总,如:2500CFP(4.0)
COSMIC度量方法被设计用于度量“数据移动为主”的软件,并不能够度量软件所有方面的规模。因此COSMIC度量方法当前不能单独明确地度量数据运算子过程的FUR规模,该方法也没有捕获数据移动的数据属性数量多软件规模的影响。针对这类情况,COSMIC度量方法提供了本地化扩展。
如果有必要解决复杂算法的度量问题,可以为这种例外的功能设置一个本地化标准。对于任何包含非常复杂的数据运算的功能处理,可以按照本地标准定义功能点。
示例:“在我们组织中,诸如<算法示例列表>的数学算法计作1个本地FP。<另一个算法示例列表>计作2个本地FP。”
当使用了本地化扩展时,最终度量结果可表示为:
CFP(v.y) +z LocalFP
其中:
x表示使用v.y版本的COSMIC方法得到的软件规模度量数值汇总,如:2500CFP(4.0)
z表示使用COSMIC本地化扩展得到的所有度量数值汇总,如:100FP
下面以物联网风控平台中的一个功能用户需求场景为例,分析如何运用上述介绍的度量方法来进行识别通用软件模型元素并进行度量。
原始需求:物联网风控平台能够以区域为维度进行物联网卡语音话单异常分析,需要从DACP平台获取原始语音话单数据,并进行分析存储,详细过程如下:
分析用户功能需求我们可识别:
可形成如下为度量表格,每一个度量团队使用的度量表格式以及度量字段会有区别,针对所需做适当增减和调整。
按照标准COSMIC数据移动识别规则:所有数据运算都与四类数据移动(E、X、W、R)相关联且被包含在内,故不单独识别为数据移动。但是在示例功能用户需求中,包含数据提取,大数据分析这类复杂的数据运算处理,实际上会需要较多开发投入。针对这种情况,我们可以增加本地化拓展标准将此类数据运算纳入度量范围。
在此案例中,我们可以新增本地化扩展标准示例如:“在我们团队中,诸如对话单数据的清洗和提取数据算法、分析物联网卡异常算法可识别为1个本地FP”
然后在汇总度量结果时,将使用COSMIC本地化扩展得到的所有度量数据包含在内。
此时案例度量结果可表示为:
5CFP(4.0)+2LocalFP