1、GQM 模型及实施方法赛宝认证中心一、 GQM 模型概述如何选择和定义度量,确定度量目标、选择适当的测量项是做好度量的基础。目前国际上广泛采用的比较典型的目标驱动的方法就是 GQM(Goals-Questions-Metrics)和 GQ(I)M 度量定义模型。GQM 是一种系统地对软件及其开发过程实施定量化的度量方法。GQM 模型是 20 世纪 80 年代中期由美国马里兰大学巴士利博士(Dr.Victor Basili)及其助手提出的一种面向目标、自上而下由目标逐步细化到度量的度量定义方法,用以告诉组织或者机构应该采集哪些数据。它基于如下的假设:对于一个有目的地进行度量的软件组织,首先必须指
2、定组织和项目的目标,然后跟踪目标到数据,这些数据旨在可操作化地定义目标,最后提供一个解释数据与相关目标的框架。每一个组织、项目均有一系列目标要实现;而要实现每一个目标,均要回答一系列问题才能知道目标是否实现;而对提出的每个问题,都可以找到一个完整、可以量化的满意解答。它把组织的目标归纳、分解为度量的指标,并把这些指标提炼成可以测量的值,从而能更好的预测、 控制过程性能,实现软件开发的定量化管理。GQM 是一种面向目标的度量方法,也是管理者的一种科学的、具有逻辑性的思考问题的方式。GQM 模型提供了自顶向下的度量定义方法和自底向上的数据采集、 解释方法 ,首先定义需要度量的目标, 再针对各个目标
3、,提出可能会遇到的问题,来定义这个目标;然后通过回答问题的形式来衡量这些目标是否被实现。将一个个模糊的、抽象的目标,分解成具体的、可测量的问题,最后,针对每一个问题再给出一组测量方法,并用这一组 测量方法测量出来的数据就是对这个问题的回答。分析过程的目的是把概念化的目标转化成比较具体的问题,再进一步把问题分解成可以度量的指 标。因此,这一过程着重分析目标 问题指标的层次结构与相互之间的关联。GQM 模型基于目标自上而下有三个层次。这三层分别是:概念层- 目标(Goals) 、操作层- 问题 (Questions)、 数据层-度量 (Metric)。GQM 的三层模型如图 1 所示。这三层是一个
4、继承性的结构,下一层是对上面一层的细化,通过这种细化和逐步求精,最终由目标得到需要的度量。图 1 GQM 三层模型(1)概念层(目标)。目标是对特定对象定义的,基于不同原因,同不同质量模型相关,基于不同观点,与特定的环境相关联。它描述了度量目的,通过给定目标,度量过程得到了清晰地表达。 GQM 一般包括五个要素:度量的对象、目的、属性 、角度 ( 为谁服务 )及度量的环境。它描述了通过度量期望达到的度量目标。每一个度量目标都包含三个特征,即关注点、对象和视角,同时还包括一个度量目的。关注点定义了对特定对象需要研究的特定特征,视角描述了需要相应度量信息的执行者的观察角度,度量目的描述了是如何使用
5、度量结果模型的。特定环境下项目的目标的定义由诸多的原因所决定 ,其中主要的是产品、 过程和资源。(2)可操作层(问题)。该层针对上一层的目标定义了一组问题,用一系列的问题来定义所研究对象的模型,然后得出评价或达到特定目标。这些问题从各个角度对度量的目标进行描述。问题同状态模型有关,它更加详细地定义了目标所关注的对象。用来评测既定目标的一系列问题应该建立在一定的具有相关特性的模型基础之上 ,所选择的问题应该尽可能地来刻画一个度量目标,而不是没有原则的来选择数据 ,否则将造成工作量的增大和数据的浪费。(3)量化层(问题) 。基于上述模型的一系列度量,与每个问题相关联,并以可度量的方法回答这些问题。
6、对于每个问题都定义了一组数据与之相关联,通过这些数据可以对每一个问题有个量化的回答,是对问题特征的一种刻画。指标的数据来自主、客观的测量,并且要仔细选择,力求从不同角度来刻画每一个问题。同一个测量项也可以被用来回答相同目标中的不同的问题,好几个 GQM 模型也可以共享一些问题和测量项,站在不同的角度来看相同的度量也会有不同的数据值。二、GQ(I)M 模型概述卡内基梅隆大学软件工程研究所软件工程度量和分析组在 GQM 模型的基础上提出了 GQ(I)M 模型, GQ(I)M 区别于 GQM 的地方就在于它在 Q 和 M之间加入了一个中间步骤,即在 GQM 模型的问题层和度量层之间增加了可视化的指示
7、器层,用它在问题和度量数据之间建立联系。指示器(Indicator) ,或称为指标,是用于评价或预测其他度量的度量。指示器是一个或多个度量的综合,是对软件产品或过程的某一方面特征的反映,它通常利用图表、文本和表格等形式来描述,模型使用者可根据问题先定义指示器,然后再确定构建该指示器所需要的度量和数据。不同的度量目的,有不同的度量指示器选择。在具体的实施过程中可操作的度量成千上万,应选择最能反映当时度量环境的指标作为度量指示器。这些指示器可以作为测量要求说明书,指导需要收集什么数据,对这些数据需要做哪些处理和分析,为这些活动做计划。如针对各个阶段分别注入和清除了多少缺陷问题,可以建立指示器:缺陷
8、的阶段分布。图 2 给出了 GQ(I)M 度量模型。图 2 GQ(I )M 示意图三、GQM 及 GQ(I)M 实施原则及主要步骤1、GQM 及 GQ(I)M 实施原则包括三个:度量目标源于商业目标。度量不是为了度量而度量,度量是为了实现某个目标。它可以是为了加强对过程的理解,也可以是为了改进过程。但无论是哪种目标,它都是为软件公司商业目标服务的。因此,在确定度量目标时,一定要确保其源于商业目标,并保持其可跟踪性。(2)发展思想模型提供环境和焦点在度量实施中,度量目标可以有很多。我们常常会在大量的数据淹没之下不知所措,因此必须确定关注焦点,确定度量目标的优先级。除此以外,为了实现这些目标,就必
9、须建立可以实现这些目标的环境。用 GQM/GQ(I)M 将非形式化的目标转化为可以执行的度量结构确定了度量目标,根据这些目标提出问题,解决了这些问题实际上就是实现了度量目标。从这些问题中引出直观的指示器或者度量,从而实现从度量目标到度量数据项的映射。2、GQM 的实施步骤在项目和组织的特定需要的基础之上,GQM 模型的工作原理就是提供一种模式来帮助软件管理者为了达到管理上的目标而设计一整套软件度量体系 ,运用系统的方法来对软件过程和产品模型中的各个目标进行裁减/ 整合。GQM 可以有效回答正在收集的数据目的是“为什么”这个问题。 “为什么”的问题是重要的,因为基于它可以确定如何解释所获得的数据
10、,而且,该问题的答案也为后续在未来项目和活动中重用度量计划和过程提供了基础。软件开发 中应用 GQM 方法力求形式化表达这个特殊的过程,通过定义目标和测量的指标,使之能和有形产品一样,能方便地观察和测量 GQM 方法具有许多优点:思路清晰,便于理解,便于培训,便于知识的重用和计算机管理,以及适应于复杂、多变的应用环境等。采用 GQM 方法的测量活动包括四个阶段:1、计划阶段:选择度量应用的项目,经过定义、特征化并且制定计划,产生项目计划。2、定义阶段:定义度量程序(目标、问题、度量和确定假设 )并文档化。3、数据收集阶段:收集、确认、分析数据,产生结果集,并采取正确的行动;4、解释阶段:按照度
11、量的定义收集的数据转化为度量结果,回答提出的问题评估所要达到的目的。通过事后剖析的方式分析数据以评估是否与目标一致,并为其后的改善提供建议;为测量结果利益相关者提供反馈信息。其中 GQ(I)M 定义阶段包括如下实施细节。(l)确定商业目标(2)确定需要获取什么(3)确定子目标将相关的问题分组,产生一系列与你管理或执行的活动相关的子目标。(4)确定与子目标相关的实体和属性本过程步提供为实现子目标必须获取的实体和属性信息。(5)格式化度量目标格式化后的度量目标应该包括以下四个元素:关注对象、关注目的、关注人群和度量环境。制定度量计划。对目标进行分解时,可以参照过程模型的结构进行。根据过程的子过程组
12、成情况,把度量目标分解为针对子过程的子度量目标。(6)确定有助于达到度量目标的可度量的问题和相关的指示器。由格式化后的度量目标推出实现这些目标必须量化的问题和指示器(包括各种类型的图表)。(7)确定为了解决问题构造指示器所需收集的数据要素。(8)定义使用的度量并使之可行。在组织内明确定义度量的公式、度量数据的含义,使用结构化的方法确保不遗漏重要的度量。(9)确定实现度量的活动这些活动主要包括:确定数据源,确定收集报告数据的方法、频率、执行人,确定可以使用数据的用户,定义这些数据将如何被分析报告,定义辅助过程自动化和过程管理的工具,确定收集数据的过程等。(10)准备实现度量的计划,开发数据收集和
13、分析的机制;该计划应该包括:度量目的、度量的背景、度量的范围、与其它过程改进活动的关系、实现度量应该进行的任务、活动和人力资源、度量进度、度量职责以及支持活动等。由以上的原则和实现步骤可以看出:过程步(l)一(5)是对组织的商业目标进行分析分解,产生 GQ(l)M 中的 G。在(6) 一(10)步将目标映射为相应的度量。在整个过程中,必须保持两个可跟踪性:一个是目标(G) 到商业目标的可回溯,另一个是度量(M) 到目标(G),这样就可以确保度量不偏离组织目标,避免收集不必要的数据,浪费人力。四 度量目标确认方法采用 GQM 方法定义将要测量的范畴,首先必须定义出目标,再由目标提出相应的问题,问
14、题的答案整理一下就可以成为度量的范畴了,可见度量范畴定义的难点就是目标的选取。一个没有明确目标的项目,是不可能明确地实现其目标的。在目标驱动度量中,首要的问题不是“我应当运用什么指标?” ,而是“什么是我想要知道的或要学习的? ”,需要建立过程性能度量目标。过程性能度量目标不是凭空产生的,而来源于具体的商业目标。而关键过程是实现商业目标的主要贡献部分,因此可以通过商业目标在关键过程的划分进一步明确我们要度量的问题。建立从商业目标到具体的度量目标的映射关系,如图 3 所示。图 3 商业目标、关键过程目标和度量目标的映射关系从最初的度量动机逐层分解到各个关键的过程,分析关键过程目标。由关键过程目标
15、的实现来决定商业目标的实现,再把关键过程的目标细化为可度量的度量目标。进行软件过程度量具体到子过程,确定过程目标和度量目标的活动是一个复合活动,该子过程的输入产品是“准备好的度量环境”消息信息、项目管理要求、过程管理需求和软件过程特征,输出的是度量目标,这里的度量目标在确定了度量子过程之后通过下面六步来实现。(l)确定商业目标本过程的产品是一系列具有不同优先级的商业目标,在对这些目标进行分解前最好让管理层进行评审以确定正确的优先级,并且保证不会遗漏重要的目标。如建立如下目标,一年内降低 50%维护成本;将进度估计的准确性实际提高到 10%;内;将下一个项目的系统测试时间减少 15%。度量目标是
16、由信息需求发展来的,可能的来源涉及诸如估计项目计划参数、实施项目状态的监督、已建立的管理目标、商业计划、正规需求或合同义务、其他项目或组织级实体的经验,以及过程改进计划等内容。客户满意、自适应能力强和生产效率高是软件组织的三大基本商业目标。其他商业目标可从这三大目标中演化出来,例如增强功能、降低成本、缩短产品推出时间和增强产品的质量等。过程管理需求和项目管理需求中实际包含了从软件组织的各个角度和阶层提出的目标,在该活动中不仅要对这些目标进行汇总和评审,而且要按优先级排出顺序。不同的商业目标的实现,只要跟软件产品和服务相关,总可以映射到质量、成本、进度三要素上来。比如对财务盈利,因为针对的软件研
17、发,所以通过降低成本来提高在相同市场分额情况下的利润。当然,有些商业目标映射不是简单的一一对应,而是一对多,如表 3 所示。比如市场占有率是通过上市速度、产品或服务的质量以及价格来衡量。表 1 商业目标与基本目标映射表商业目标 与基本目标的映射财务盈利 项目或产品的成本项目过程进度 进度公司形象 产品、过程和服务的质量(客户满意度 )市场占有率 进度(新产品或升级产品)、质量、成本公司业务规模 成本(人力成本)多样化的产品线 产品的质量(产品的不同功能 ) (2)确定关键过程。软件生产过程中有很多的过程, SPICE 中把软件过程为为 35 个关键过程域,15012207 中把软件过程分为 2
18、8 个关键过程域, CMM1.3把软件过程为为 24 个过程域,各个关键过程所占的位置和起的作用各不相同。在该活动中,软件过程组组长要结合商业目标,决定哪些关键过程对达到目标会产生关键的影响,从正面和负面两个方面来分析产生关键影响的过程,并确定对其实施度量。商业目标对应到关键过程就是对目标的分解,分解到不同的职能角色上,这样职责才清楚,才可操作。仅仅空谈商业目标的意义不大,关键谁去实现这些商业目标。而且,从数据采集的角度看,项目中可收集的信息量非常庞大,如果所有信息都收集,那么度量工作的成本就会成为项目组很中的负担,度量反而成为管理的累赘而不是支撑了,所以就要确定关键的项目过程区域。(3)分析
19、关键过程目标在具体的关键过程内,结合过程定义,分解商业目标,指定关键过程的目标。如在某个项目的实施过程中,项目内容是企业管理系统,技术实施上采用.NET 实现,没有什么技术难点,项目成功的关键受需求变更的影响。那怎样考虑把商业目标与关键过程对应,并分析关键过程目标呢?项目质量是其重要的商业目标,那么,对于该项目,影响其目标实现的关键过程分别是需求开发过程和需求管理过程。需求过程的目标可以确定为两个,一是及时、准备地获取需求,二是有效地管理需求变更,这两个目标的实现与否直接影响项目的商业目标(项目产品的的质量) 。(4)分析关键过程问题结合过程的定义,明确过程中的可度量对象实体,分析要达到关键过
20、程目标可能遇到的问题,对过程进行度量,应首先明确度量的实体对象。瀑布模型、原型法模型、原型法模型及 CMMI 描叙的相关过程模型都可以表示成图 4 中的模式。任何实例过程都是对过程输入、过程组成、过程消耗、过程保留及过程输出的实例化,每一个部分都存在可度量的实体。图 4 通用的过程实体描述模型过程输入: 过程运作前接收的信息,包括资源、规范或前续过程输入等。过程输出: 过程运作后产生的结果,包括产品、副产品等。过程组成: 包括过程的活动、流程,它表示过程的结构。过程消耗:过程运作中消耗的资源、人力投入和时间等。过程保留:表示过程完成后留下来的东西,如工具、方法和经验等。对于例子中提高的需求过程
21、的两个目标,项目组在分析时提出很多实现这两个目标会遇到的问题,包括:什么时候获取需求才及时?需求按照什么方式进行优先级排序?有多少需求项可能处于不稳定状态?需求有多少变更?变更都是在什么阶段引入的?本过程步骤产生的是一系列问题列表,此时不一定需要正确地分类,此时最关键的是要列出所有重要的问题。设定一系列描述目标的问题。对于每个目标,设想一下必须回答的问题,看看是否达到目标。如目标是一年内降低 50%维护成本问题 1,每个月我们花在维护上的费用是多少?问题 2,花在我们支持的每个应用软件上的维护成本是多少?问题 3,我们花在调整(调整以适应变更的环境) 、完善(增加、提高)和修正(纠正缺陷)上的
22、费用是多少?度量目标及问题举例如表 2。表 2 度量目标及问题举例信息分类 度量目标 可度量概念 要解决的问题进度 控制进度 完成的里程碑关键路径性能工作单元进展增量式能力项目符合预定的里程碑吗关键任务或交付日期延迟了吗特定的活动和产品进展如何要交付的能力像在增量式构造和发布中预定的那样吗资源和费用 控制成本 人员工作量财务性能环境和支持资源所花工作量是按计划的吗是否有足够的具备所需技能的员工项目是否满足预算和进度目标需要的设施、设备和材料是否可获得产品规模和稳定性监控规模 物理规模稳定性功能规模稳定性产品的规模、内容、物理特性或接口变更有多少需求和相关的功能变更有多少产品质量 控制质量 功能
23、正确性可维护性效率可移植性可用性可靠性产品质量是否达到了交付给用户的水平?已标识的问题解决了吗系统要求多少维护?维护的难度如何目标系统能有效地使用系统资源吗功能在另一平台上重新部署,达到了什么程度用户接口是足够的且便于操作吗?操作员的错误是在可接受的范围内吗给用户的服务常常被中断吗?故障率是在可接受的范围内吗过程性能 提高过程性能 过程符合性过程效率过程有效性项目实现已定义的过程的一致性如何过程效率是否达到了满足当前委托和计划的目标因返工需要花多少额外的工作量技术有效性 加强技术有效性 技术适合性技术易变性技术满足所有的已分配的需求吗?需要额外的技术吗新的技术是否因太多的变更而造成风险客户满意
24、度 了解和提高客户满意度客户反馈客户支持我们的客户多大程度上理解项目的性能?项目满足用户的期望吗客户的支持请求多快能得到处理(5)分组关键过程问题把所有关键过程的问题进行归纳和分组,整理后的提问单是建立度量目标的基础,度量目标是直接对应这些问题的。在项目中需要考虑可以通过什么指标来衡量项目产品的质量?如果给定的商业目标是提高项目产品的质量,应该从项目的重用率、客户的介入度、项目的产品的缺陷数三个方面来识别项目中所有关键过程,并把这些过程的实施归结到满足质量要求这个目标上来:因为影响产品的质量的是需求、开发(设计/编码)和质量控制措施,相对来说,项目的重用率(不论是设计重用或代码重用)越高,质量
25、越容易得到保障; 其次是客户的介入,如果客户与项目组在一起封闭开发,项目经理不会担心开发出来的产品不是客户想要的,反之,可能会需要很多返工;最后一个指标才是缺陷数。这就是从质量这个商业目标出发,综合整个项目过程中影响质量的关键过程,得出项目经理更应该考虑这几个指标。(6)定义度量目标在关键过程的目标、问题和过程定义的基础上,定义度量目标。为了增强从商业目标到度量的可追溯性,对度量目标采用明确的格式进行准确和结构化的定义,准确地界定度量目标的对象、目的内容、用户对象和度量环境等信息。针对项目产品的质量,需求过程、开发过程和质量控制过程是关键过程,那么度量目标可以是:a)度量项目中复用的程度。b)
26、度量项目中客户的介入度。c)度量项目中的缺陷数。由此,可以建立商业目标、关键过程目标和度量目标之间的映射表,如表3 所示。表 3 商业目标、关键过程目标和度量目标之间的映射商业目标 关键过程 度量目标需求过程 客户介入度需求缺陷业务模型复用度开发过程 开发复用度客户介入度开发缺陷项目产品的质量质量控制过程 开发缺陷 五、度量指标的确定指标既是目标的量化,也是过程度量的基础。评价过程的实施是否达到组织目标,应该使用一组平衡的指标,这组指标是能够作为评价软件质量和性能的指标,而每一个指标对应一个目标值,即每一个子目标对应一个指标。指标与目标的关系如图 5 所示。图 5 定量指标与子目标的对应关系图
27、因此,为保证度量活动的有效性,就必须采用合理的方法选取度量指标。可以遵循以下(GQ(I)M 方法 步骤选取度量指标 :(l)确定目标。制定度量计划。对目标进行分解时,可以参照过程模型的结构进行。根据过程的子过程组成情况,把度量目标分解为针对子过程的子度量目标。(2)提出问题。针对各个度量目标,划分实现这些目标必须量化的问题度量问题。(3)定义指示器。根据问题,定义相关指示器(包括各种类型的图表).指示器是对基础度量的综合,以图形、图表等多种表达方式表现过程的某方面的特性。基础度量是过程实体的单因素反映,例如过程活动的时间特性;而度量指示器通常是多因素的影响结果,例如过程生产效率是过程活动时间和
28、过程工作产品规模的综合反映,因此,一个基础度量可以应用在多个度量指示器上。度量指示器可以直接与目标对应。(4)标识关键属性。确定为了解决问题构造指示器所需收集的数据要素,在属性层定义关键属性,这些属性就是过程中所关注的或是对项目有关键作用。从标识出的属性得到具体度量。定义需要回答这些问题的度量标准,选择回答每个问题所必需的度量如针对问题:我们花在调整、完善和修正上的费用是多少?回答的度量项可以包括如下:每类维护活动所花的时间每类维护活动所花的时间内的总维护成本根据已建立的测量目标,采用“目标-提问-测量(G/Q/M, ) ”方法,通过提问的方式,确定测量项,测量项分为“基本测量项”和“派生测量
29、项” 。 “基本测量项”可以通过直接测量得到, “派生测量项”可以取自其他数据,一般是通过两个或更多的基本测量组合而成。如:G Q M项目工作量估计的准确性如何? 基本测量:计划工作量(工时) 、实际工作量(工时)派生测量:工作量估计偏差(%)计算:ABS(实际-计划)/计划*100%项目进度估计的准确性如何? 项目成本估计的准确性如何? 加强项目估计,提高计划的有效性项目规模估计的准确性如何? 在定义测量项时,考虑以下原则:1)无歧义2)可追溯性3)可重复性:其它人能重复测量,得到同样的结果;4)利于交流:对记录的测量结果,其它人能精确地知道它包含什么,不包含什么。测量的单位是什么。5) 现
30、有数据的有效性:尽量利用现有数据;实在没有相关数据积累或者现有数据的可靠性太差,也要尽量少选,精选。6)度量对象的稳定性:对于成熟、稳定的度量对象,多采用客观度量。对于不成熟,不稳定的对象,可以结合主观判断和评价来获得数据。7)度量模型的渐进性:度量建模是一个持续改进的过程。所选择的测量项不仅可以评价度量的对象,同时也反映了模型本身的可靠性和质量。为每个测量项指定测量单位,如:产品的功能点数、文档页数/字数、花费的工时/工作日、日历的日期、缺陷/问题/ 需求的个数、百分比、满意度得分等。对确定的测量项,按测量目标进行归纳整理,划分测量类别,组织的起步核心测量包括:项目测量:规模、工作量、进度、
31、成本、工作量分布、生产率、评审质量、测试质量、产品质量、需求变更等。组织测量:项目估计偏差、项目工作量分布、组织生产率、产品质量、客户满意度、工程技术支持、需求受理、过程质量等。六 GQ(I )M 实例介绍以开发缺陷为例说明度量目标的分解过程及指标的确定过程),度量目标结构化描述为:度量目标: 降低开发缺陷,提高产品质量度量对象:某个项目中开发过程度量目的:评价过程性能, 缺陷是影响软件质量的重要因素,控制缺陷是提高软件质量的重要手段。因此在软件开发过程中需要对缺陷进行跟踪和监控,使用缺陷数据来协助管理项目。度量环境:新开发的绩效考核系统项目,项目组规模 40 人,其中开发人员25 人测量目标 问题 指示器 测量项各个阶段分别注入和清除了多少缺陷?缺陷的阶段分布 缺陷被发现的阶段缺陷被注入的阶段各软件模块分别发现了多少缺陷?缺陷的模块分布 缺陷所在的模块软件的缺陷密度? 软件的缺陷密度 缺陷所在的模块软件模块的实际规模缺陷总数发现的所有缺陷中,严重的、主要的、次要的和普通的缺陷分别有多少?缺陷的严重程度分布 缺陷的严重程度各种类型的缺陷分别有多少? 缺陷类型分布 缺陷的类型降低开发缺陷,提高产品质量发现的缺陷是否都被及时的修改了?缺陷的关闭进度 缺陷被发现的时间缺陷关闭(被修正)的时间附件:1,xx 项目-G-Q-M 例子, 2,xx 公司_商业目标分解及 GQM 例子