软件度量的涵义
软件度量是对软件开发项目、过程及其产品进行数据定义、收集以及分析的持续性定量化过程,目的在于对此加以理解、预测、评估、控制和改善。没有软件度量,就不能从软件开发的暗箱中跳将出来。通过软件度量可以改进软件开发过程,促进项目成功,开发高质量的软件产品。度量取向是软件开发诸多事项的横断面,包括顾客满意度度量、质量度量、项目度量、以及品牌资产度量、知识产权价值度量,等等。度量取向要依靠事实、数据、原理、法则;其方法是测试、审核、调查;其工具是统计、图表、数字、模型;其标准是量化的指标。
软件度量三维度
软件度量能够为项目管理者提供有关项目的各种重要信息,其实质是根据一定规则,将数字或符号赋予系统、构件、过程或者质量等实体的特定属性,即对实体属性的量化表示,从而能够清楚地理解该实体。软件度量贯穿整个软件开发生命周期,是软件开发过程中进行理解、预测、评估、控制和改善的重要载体。软件质量度量建立在度量数学理论基础之上。软件度量包括3个维度,即项目度量、产品度量和过程度量,具体情况如表5-1所示。
表-1 软件质量3维度

软件度量的项目
关于软件度量的项目,业界说法不一。根据软件工程研究所SEI开发的核心度量项目(SEI core metrics),软件度量的核心项目包括:规模、作业量、进度和缺陷,参见图-1。

图-1 SEI的核心度量项目
在软件开发过程中,不同的软件开发主体,例如,软件开发组织(经营者)、软件开发项目组(管理者)以及软件开发人员(软件工程师)拥有不同的软件度量内容,如表-2所示:
表-2 软件开发主体及其度量内容
角色 |
度量内容 |
经营者
开发组织 |
(1)顾客满意度
(2)收益
(3)风险
(4)绩效
(5)发布的缺陷的级别
(6)产品开发周期
(7)日程与作业量估算精度
(8)复用有效性
(9)计划与实际的成本 |
管理者
项目组 |
(1)不同阶段的成本
(2)不同开发小组成员的生产率
(3)产品规模
(4)工作量分配
(5)需求状况
(6)测试用例合格率
(7)主要里程碑之间的估算期间与实际期间
(8)估算与实际的员工水平
(9)结合测试和系统测试检出的缺陷数目
(10)审查发现的缺陷数目
(11)缺陷状况
(12)需求稳定性
(13)计划和完成的任务数目 |
作业者
软件开发人员 |
(1)工作量分配
(2)估算与实际的任务期间与工作量
(3)单体测试覆盖代码
(4)单体测试检出缺陷数目
(5)代码和设计的复杂性 |
软件度量的效用
可度量性是学科是否高度成熟的一大标志,度量使软件开发逐渐趋向专业、标准和科学。尽管人们觉得软件度量比较难操作,且不愿意在度量上花费时间和精力,甚至对其持怀疑态度,但是这无法否认软件度量的作用。美国卡内基·梅隆大学软件工程研究所在《软件度量指南》(Software Measurement Guidebook)中认为,软件度量在软件工程中的作用有三:(1)通过软件度量增加理解;(2)通过软件度量管理软件项目,主要是计划和估算、跟踪和确认;(3)通过软件度量指导软件过程改善,主要是理解、评估和包装。软件度量对于不同的实施对象,具有不同的效用,表5-3是其详细说明。
表-3 基于软件度量角色的度量效用
角 色 |
度 量 效 用 |
经营者
开发组织 |
(1)改善产品质量;
(2)改善产品交付;
(3)提高生产能力;
(4)降低生产成本;
(5)建立项目估算的基线;
(6)了解使用新的软件工程方法和工具的的效果和效率;
(7)提高顾客满意度;
(8)创造更多利润;
(9)构筑员工自豪感。 |
管理者
项目组 |
(1)分析产品的错误和缺陷;
(2)评估现状;
(3)建立估算的基础;
(4)确定产品的复杂度;
(5)建立基线;
(6)从实际上确定最佳实践。 |
作业者
软件开发人员 |
(1)可建立更加明确的作业目标;
(2)可作为具体作业中的判断标准;
(3)便于有效把握自身的软件开发项目;
(4)便于在具体作业中实施渐进性软件开发改善活动。 |
综而言之,软件度量的效用有如下几个方面:(1)理解:获取对项目、产品、过程和资源等要素的理解,选择和确定进行评估、预测、控制和改进的基线。(2)预测:通过理解项目、产品、过程、资源等各要素之间的关系建立模型,由已知推算未知,预测未来发展的趋势,以合理地配置资源。(3)评估:对软件开发的项目、产品和过程的实际状况进行评估,使软件开发的标准和结果都得到切实的评价,确认各要素对软件开发的影响程度。(4)控制:分析软件开发的实绩和计划之间的偏差,发现问题点之所在,并根据调整后的计划实施控制,确保软件开发良善发展。(5)改善:根据量化信息和问题之所在,探讨提升软件项目、产品和过程的有效方式,实现高质量、高效率的软件开发。
软件度量的要素
数据:数据是现状的最佳表达者
数据是关于事物或事项的记录,是科学研究最重要的基础。由于数据的客观性,它被用于许多场合。研究数据就是对数据进行采集、分类、录入、储存、统计分析、统计检验等一系列活动的统称。数据分析是在大量试验数据的基础上,也可在正交试验设计的基础上,通过数学处理和计算,揭示产品质量和性能指标与众多影响因素之间的内在关系。拥有阅读数据的能力以及在决策中尊重数据,这是经营管理者的必备素质。当然也有数据难以表现的部分,特别是“人”的部分。但是,我们应该认识到,数据是现状的最佳表达者,是项目控制的中心,是理性导向的载体。用数据思考,可见规律;用数据思考,易于存活。
图表:善用图表则易于沟通
仅仅拥有数据还不能直观地进行表现和沟通,而图表可以清晰地反映出复杂的逻辑关系,具有直观清晰的特点。能用图表进行思考,就能有效地工作。图解的作用在于:(1)图解有助于培养思考的习惯,项目管理者首先是善于思考的人。日常生活主要通过口语沟通,而辅助于文字以弥补口语在理解上可能存在的误解;而商务领域,非常注重文件沟通,比如合同、式样、提案、记录等等,而图表可以直观地弥补文字解释可能存在的差异。(2)图解有助于沟通交流,项目管理者应该是沟通高手。沟通的层次为:能理解对方的意思,但属于零散的信息;能把握对方的内容,拥有系统和整体的理解;能正确地重复对方的观点,没有遗漏和错误;能有条不紊地向别人阐述这些观点,并获得别人的理解。项目管理者需要和顾客、企业和项目组成员沟通,需要阐述项目的目标、资源、限制、要求、作用、日程、问题点等,在这种沟通过程中,如果能娴熟地使用图表,将降低沟通成本,提升沟通绩效。(3)图解有助于明确清晰地说明和阐述内容。图解在消除误解、把握概要方面具有独特的功效。软件开发过程中的需求式样、作业流程、概要设计等大多以图解的方式加以说明和阐述,原因就在于图解能一目了然,消除误解。
模型:预测未来,模型拥有天然优势
模型是为了某种特定的目的而对研究对象和认识对象所作的一种简化的描述或模拟,表示对现实的一种假设,说明相关变量之间的关系,可作为分析、评估和预测的工具。数据模型通过高度抽象与概括,建立起稳定的、高档次的数据环境。相对于活生生的现实,“模型都是错误的,但有些模型却是有用的”。“模型可以澄清相互间的关系,识别出关键元素,有意识地减少可能引起的混淆。”模型的作用就是使复杂的信息变得简单易懂,使我们容易洞察复杂的原始数据背后的规律,并能有效地将系统需求映射到软件结构上去。这种描述或模拟既可定性,也可定量。模型可以借助于具体的实物(称为实物模型),也可以通过抽象的形式来表述(称为抽象模型),既可以是对研究客体的简化或纯化 (称为理想模型),也可以是用来解释研究客体的某些行为和特征(称为理论模型)。模型分析方法有3种表示形式:文字叙述、几何图形和数学公式。
软件开发过程中的改善活动可以以模型为指导,基于模型的改善具有如下优势:建立一种共同语言,或者构建共享愿景;提供一个具有优先级的行动框架;提供一个执行可靠而持续的评估框架;支持工业范围的比较。但是,模型毕竟是道具之一,只可参考,不可神化。