对于一件事物来说,当你能够测量你所说的并将其用数字表达出来时,你就会对它有了一些了解;但当你不能测量,不能用数字表达它时,你对它的了解就会很贫乏。
上面这句话表明一个事实,当你想要得到一个可量化的结果时,你需要先去测量它,有了测量结果后,才会有度量。对于事物是这样,而对于软件项目管理来说也是如此。一个好的软件项目管理,需要经过多方面的测量和度量,才能更好的呈现出一个比较满意的结果。
在接下来的这篇文章中,将讲解关于软件项目管理中软件的度量。
一、度量的目的
1、引例
引用Lord Kelvin曾说过一句话: ①当你能够测量你所说的并将其用数字表达出来,你就对它有了一些了解;②但当你不能测量,不能用数字表达它时,你对它的了解就很贫乏、很不令人满意;③它可能是知识的开始,但你在思想上还远没有进入科学的境地。
这句话说明,想要得到一个可量化的结果,需要先去测量它,有了测量结果后,才会有度量;也就是说,测量是度量的基础。
2、度量的目的
进行度量工作,是为了了解产品开发的技术过程和产品本身。
- 度量开发过程的目的是为了改进过程;
- 度量产品的目的是为了提高产品的质量。
3、度量的作用
- 度量的作用是为了有效地定量地进行管理。
二、测量、度量和指标区别
1、引例
假设有A和B两个人,我们都知道A比B高。但不知道A比B高多少?
这个时候是不是就得经过测量身高才能知道具体值。
所以,A和B的身高值即为测量值。
经过测量,A的身高为189cm,B的身高为170cm。
得出结论,A比B高19cm。
所以,A比B高19cm是度量值。
2、测量、度量和指标的区别
(1)测量(measure) —— 对一个产品或过程的某个属性的范围、数量、维数、容量或大小提供了一个定量的指示。
(2)度量(metrics) —— 对一个系统、部件或过程具有的某个给定属性的度的一个定量测量。
(3)指标(indicator) —— 软件工程师收集测量并开发度量,这样就可以获得“指标(indicator)”;指标是一个度量或度量的组合,它对软件过程、软件项目或产品本身提供了更深入的理解。
3、思考题
Q:指出下面这段话中哪些是测量,哪些是度量,哪些是指标?
有四个软件小组共同完成一个大型项目,但是每个小组必须进行技术评审,
通过检查每人每小时所发现的错误数,管理者发现,采用更加正式评审方法的两个小组比起另外两个小组,每人每小时所发现的错误数要高40%。
Answer:
从上面这段话中可以得出,每人每小时所发现的错误数为测量值,更加正式的评审方法为指标,每人每小时所发现的错误数要高40%为度量值。
假设其它参数相同,这就给管理者提供一个指标:正式的评审方法比起其他评审方法在时间投资上能得到更大的回报,他可能会建议所有小组都采用正式的评审方法。
得出结论,测量是度量的基础,度量是为了得到指标,它们的关系为:测量->度量->指标。
三、过程度量和项目度量
软件过程度量主要用于战略的目的,软件项目度量则是战术的。
1、过程
(1)过程度量
- 在软件发布之前的错误数的测量;
- 交付给最终用户并由最终用户报告的缺陷的测量;
- 交付的工作产品(生产率)的测量;
- 花费的工作量的测量;
- 花费的时间的测量;
- 与进度是否一致的测量。
(2)过程指标
- 使得软件工程组织能够洞悉一个已有过程的功效(如范型、软件工程任务、工作产品及里程碑);
- 使得管理者和开发者能够评估哪些部分可以起作用,哪些部分不行;
- 过程度量(Metrics)的收集跨越所有的项目,并经历很长的时间,目的是获得改善软件过程的指标。
2、项目
(1)项目度量
- 大多数软件项目度量的第一个应用是在估算时发生的;
- 从过去的项目中收集的度量可用来作为估算现在软件项目的工作量及时间的基础;
- 所花费的工作量及时间的测量可以和预估算值进行比较,项目管理者使用这些数据来监督和控制项目的进展。
(2)项目度量的目的
- 能指导进行一些进度上的必要调整,以避免延迟、减少问题及风险,从而使得开发时间减到最少;
- 项目度量可在项目进行的基础上评估质量,在必要时修改技术方法以改进质量。
(3)项目指标
- 评估正在进行的项目的状态;
- 跟踪潜在的风险;
- 在问题造成不良影响之前发现它们;
- 调整工作流程或任务;
- 评估项目组在控制软件工程工作产品的质量的能力。
四、度量的方式
1、物理世界中的测量
(1)直接测量 —— 例如,测量一个螺栓的长度;
(2)间接测量 —— 例如,用次品率来测量生产出的螺栓质量。
2、软件测量
软件测量与物理测量一样,也同样分为两类。
(1)直接测量
过程 —— 软件工程过程的直接测量包括所投入的成本和工作量;
产品 —— 软件产品的直接测量包括产生的代码行数(LOC)、执行速度、存储量大小、在某种时间周期中所报告的差错数。
(2)间接测量
产品 —— 软件产品的间接测量包括功能性、复杂性、效率、可靠性、可维护性和许多其它的质量特性。
五、面向规模的度量
1、定义
(1)面向规模的度量是对软件和软件开发过程的直接度量;
(2)可以建立一个面向规模的数据表格来记录项目的某些信息。
2、有用度量的计算——举例阐述
项目 | LOC | 工作量 | 成本 | 文档页数 | 错误 | 缺陷 | 人员 |
Alpha | 12100 | 24 | 168 | 365 | 134 | 29 | 3 |
Beta | 27200 | 62 | 440 | 1224 | 321 | 86 | 5 |
Gamma | 20200 | 43 | 314 | 1050 | 256 | 64 | 6 |
… | … | … | … | … | … | … | … |
Q:该表格列出了在过去几年完成的每一个软件开发项目和关于这些项目的相应的面向规模的数据。那么,①从该表中可以获得哪些有用信息?②三个项目哪个项目的软件质量最高?③哪个项目的生产率最高?④哪个项目的单位成本最高?
注:LOC即Line Of Code,表示代码行数;PM即Person Month,表示每人每月。
需要注意的是:在表格中记载的工作量和成本是整个软件工程的活动(分析、设计、编码和测试),而不仅仅是编码活动;
对于每一个项目,可以根据表格中列出的基本数据计算简单的面向规模的生产率和质量等的度量。
A:根据表格可以对所有的项目计算出以下有用度量:
生产率 = KLOC/PM(人月);(成正比)
质量 = 错误数/KLOC;(成正比)
质量 = 缺陷数/KLOC;(成反比)
成本 = 元/LOC;(成正比)
文档 = 文档页数/KLOC。(成正比)
六、面向功能的度量
1、定义
(1)面向功能的软件度量是对软件和软件开发过程的间接度量;
(2)面向功能的度量主要考虑程序的“功能性”和“实用性”,而不是对LOC计数;
(3)该度量是一种叫做功能点方法的生产率度量法,利用软件信息域中的一些计数和软件复杂性估计的经验关系式而导出功能点FP。
2、功能点度量的计算
(1)图例
需了解以下公式:
①FP=总计数值х(0.65+0.01 х ΣFi);
② “ 0.65+0.01 х ΣFi ” :复杂度调整因子。
注:
- FP即Function Points,表示功能点;
- 总计数值是所有加权计数项的和;与五个信息域有关,即输入,输出,查询,文件,接口,且需考虑加权因子;
- Fi为复杂度校正值,需回答14个问题,详情看下方第(3)点
(2)五个信息域
- 用户输入数:各个用户输入是面向不同应用的输入数据;
- 用户输出数:各个用户输出是面向应用的输出信息,包括报表,屏幕信息,错误信息等。在报表中的各个数据项不应该再分别计数;
- 用户查询数:查询是一种联机的交互操作,每一个不同的查询都要计算;
- 文件数:每一个逻辑主文件都应计数。逻辑主文件是指逻辑上的一组数据,可以是一个大数据库的一部分,也可以是一个单独的文件;
- 外部接口数:与系统中其他设备通过外部接口读写信息次数均应计数。
(3)关于复杂性校正值Fi
- 系统是否需要可靠的备份和恢复?
- 是否需要数据通信?
- 是否有分布处理的功能?
- 是否性能成为关键?
- 系统是否运行在现存的高度实用化的操作环境中?
- 系统是否需要联机数据项?
- 联机数据项是否需要建立多重窗口显示和操作,以处理输入处理?
- 主文件是否联机更新?
- 输入、输出、文件、查询是否复杂?
- 内部处理过程是否复杂?
- 程序代码是否可复用?
- 设计中是否包括了转移和安装?
- 系统是否设计成可以重复安装在不同机构中?
- 系统是否设计成易修改和易使用?
(4)关于计算
①一旦收集到上述数据,就可以计算出与每一个计数相关的复杂性值;
②一个信息域是简单的、平均(中等)的还是复杂的,由使用功能点方法的机构自行确定,从而计算出加权计数;
③计算功能点,使用如下的计算公式:
FP=总计数值×[0.65+0.01 × ∑(Fi)],总计数值是所有加权计数项的和;
④Fi(i=1..14)是复杂性校正值,它们应该通过逐一回答14个问题来确定,详情看第(3)点;
③④注意点:
- Fi的取值0~5:0表示没有影响;1表示微小影响;2表示轻度;3表示中度;4表示显著;5表示重大;
- ∑(Fi)是求和函数。
⑤一旦计算出功能点,就可仿照LOC的方式度量软件的生产率、质量和其它属性,具体公式如下:
生产率=FP/PM(人月);(成正比)
质量=错误数/FP;(成正比)
质量 = 缺陷数/FP;(成反比)
成本=元/FP;(成正比)
文档=文档页数/FP;(成正比)
(5)基于FP的软件度量
- 每个FP的错误数(Errors per FP) —— 质量
每个FP的缺陷数(Defects per FP) —— 质量 - 每个FP的花费($ per FP) —— 成本
- 每个FP的文档页数(Pages of documentation per FP) —— 文档
- 每人月完成的FP数(FP per person-month) —— 生产率
(6)思考题——think more
功能点FP和总计数值之间的关系,最小值是()x 总计数值,最大值是()x 总计数值。
如果14个问题的复杂度调整值总和为42,总计数值假设为100,则功能点FP的值为___。
解析:
- 最小值为0.65 x 总计数值,最大值为1.35 x 总计数值。
- 功能点FP的值为 FP = 总计数值×[0.65+0.01 × ∑(Fi)] = 100 x (0.65 + 0.01 x 42) = 100 x 1.07 = 107