第7章 计划的度量和跟踪
项目管理计划仅仅是一个可以用来指导项目执行的文档。除非根据计划对项目执行的实际绩效进行跟踪,否则计划所起的作用是有限的。
而对于项目跟踪,某些关键参数的值必须在项目执行期间得到度量。
跟踪不是一项轻松的任务,并且与其他任务一样,如果要正确地执行它,必须制定跟踪计划。
制定跟踪计划时,必须确定如何跟踪任务、工作量和故障等问题、使用什么工具、遵循什么报告结构以及多长时间报告一次,等等。
本章讨论Infosys公司的项目如何进行度量,同时还描述了项目跟踪规划和绩效变化阈值的选择,阈值用于触发管理行为。
7.1 度量概念
项目度量的基本目的是有效地控制项目。本节讨论与指标和度量有关的概念,以及控制一个项目时应当度量的基本指标。
过程控制的一种方法是统计过程控制(SPC)。本节还讨论了一些与SPC相关的概念以及SPC在软件中的使用方法。
7.1.1 指标与度量
软件指标可用于定量表示软件过程或者软件产品的各种特征。
过程指标使软件过程或者开发环境定量化,而产品指标是软件产品的度量。产品指标独立于生产产品所用的过程。
• 例如,生产率、质量、资源指标、故障引入率以及故障排除效率就是过程指标;
• 而产品的规模、可靠性、质量(质量既可以看成产品指标,也可以看成过程指标)、代码复杂性和功能就是产品指标。
要使用指标必然要求制定度量方法以获取数据。
• 对于任何一个指标方案,必须明确地理解收集数据的目标以及基于这些数据的判断模型。
• 通常,使用哪些指标及采取哪些度量方法将取决于项目和组织目标;可以使用一个框架(诸如目标-问题-指标模式)来确定需要度量的指标。
大多数情况只要几个指标就足够了,只有在特殊情况下才需要特殊的指标。
进度、规模、工作量和故障都是项目的基本度量,它们形成了一个稳定的指标集。
进度是最重要的指标之一,因为大多数项目都是在进度和最后期限驱使下进行的。
进度是最容易度量的,因为它通常使用日历时间。
工作量是软件项目消耗的主要资源。因此,工作量跟踪是监督项目执行时的关键任务;它对于评价项目是否在预算内执行很重要。
• 即,工作量数据是声明诸如“ 项目的成本可能比以前的项目高出30% 左右” 或者“ 项目有可能在预算内完成” 所需的。
因为故障直接关系到项目质量,所以故障跟踪对于确保质量很重要。
一个大型软件项目可能包含上千个故障,它们由不同的人在不同阶段发现。通常修复故障的人并不是发现故障或者报告故障的人。
项目经理希望在最后发行软件之前排除大部分或全部故障。此时,故障报告和结论不能用非形式化的方法完成
• 使用非形式化的方法会导致发现过的故障又被忘记了,因此故障不但没有被排除而且还花额外的时间去再次发现它们。
• 因此,至少必须记录故障并跟踪它们的排除。
• 对于这个过程,你需要信息,诸如故障的表示、故障的位置、发现故障的人的名字和排除故障的人的名字。
• 只要记录了发现的每一个故障(随后再排除它),就可以重点分析迄今已发现了多少个故障、百分之多少的故障还没有排除以及其他一些问题。
故障跟踪被认为是管理一个项目的最佳实践之一。
仅仅记录故障并对它们进行跟踪并不足以支持其他必不可少的分析。
为了知道在哪里发现了百分之多少故障,还需要记录发现故障阶段的信息。
为了理解各质量控制任务的故障排除效率并因此改进它们的绩效,不仅必须知道故障是在哪里发现的,而且还要知道是在哪里引入的。
• 即,对于记录的每个故障,还应当提供关于引入故障阶段的信息。
项目规模是另一个基本指标,因为很多数据(例如,已交付软件的故障密度)都是根据规模进行标准化。
没有规模数据,就不能用以往的数据预测绩效。
如果不根据某个标准的规模度量进行标准化,就没有了绩效比较的基准。
项目规模的两个常用的度量单位是代码行(lines of code,简称LOC)和功能点。
如果使用代码行作为度量单位,生产率会随编程语言而不同。而功能点度量不会因编程语言而变
7.1.2 通过统计过程控制的监督过程
统计过程控制(SPC)已经在制造业取得了成功应用,并且其在软件领域的应用也在逐年上升。
这里我们简单地讨论SPC的一些基本概念;更多信息可以参考任何关于统计质量控制的教材。
过程用于生产产品,而产品的质量可以根据某些质量特征进行定义。
很多因素影响这些特征值的可变性。
这些因素可以分成两类:可变性的自然(即内在)因素和指定的(即特殊)因素。
• 自然因素是那些总是存在的原因,并且其中的每一个都对可变性有影响。除非过程本身发生了变化,否则控制这些因素是不切实际的。
• 而指定因素是那些偶尔出现的原因,对过程绩效的可变性有很大的影响,并且可以控制它们。
图7.1说明了这些原因和质量特征间的联系。
如果质量特征的可变性仅仅由于自然原因引起的,则认为过程在统计控制下。
SPC的目标是保持生产过程在统计控制下。
控制图是一种应用SPC的工具。
为了建立一幅控制图,将一个过程的结果看成一个代表感兴趣的特征值的数值流。
• 子组数据取自这一数值流,并且子组数据的平均值在图上绘出,形成一幅X-柱状统计图。
• 还要确定控制下限(LCL)和控制上限(UCL)。
• 如果点落在控制极限外面,则认为这种大的变化是由于指定的原因造成的。
还有一幅图称为R 图,绘出所选子组数据的范围(最小值与最大值的差)。
• 在R 图的控制极限已知的情况下,落在这些控制极限外面的点也被认为由指定原因造成的。
根据约定,LCL和UCL通常被设为3∑平均值,其中∑是仅有正常可变性的数据(即,由自然原因造成的可变性)的标准差。
有了这些极限后,一次错误报警(具有自然可变性的点落在极限外)的概率仅为0.27%。
如果生产过程不能重复地产生相同的项目,就如软件过程那样,形成子组并没有多大意义;因此必须考虑单值。
对于这种过程,可以使用XMR图。在一幅XMR图中,两个连续值的取值范围被看成R图的范围。
对于X柱形图,绘出各单独的值;然后,用平均取值范围确定控制极限。
注意控制极限不同于规范极限。
• 规范极限根据需求规定过程所必须的绩效。
• 而控制极限基于过程的实际数据确定过程的实际绩效—— 即,过程真正能够达到的绩效。
• 显然,如果控制极限都在规范极限内(规范极限范围大于控制极限),则过程能够在大部分时间内提交满足规范的结果。
• 另一方面,如果规范极限在控制极限内,则过程生产的结果不满足需求的概率增大。根据控制极限和规范极限间的关系,就可以形式化地定义一个过程的能力。
可以使用控制图连续地监督过程的绩效,并识别出失控的情况。另外,在表示结果的点落在控制极限外的情况下,必须决定采取什么措施。
通常可以采用两种类型的措施:
• 对结果进行返工,以便它具有可接受的特征—— 即,采取纠正措施 。
• 执行进一步的分析以识别出指定的原因并从过程中删除它们—— 即,采取预防措施 。
为了利用软件过程的控制图,必须先确定能够应用SPC的过程。
一种是选择整个过程,其结果就是最后要提交的软件产品。
对于这一过程的结果值得研究的特征包括生产率、已交付软件的故障密度和故障引入率,以及其他一些特征。
对于总体过程的大部分结果的特征值只有在项目收尾时才能得到,因此总体过程的SPC对项目监督和控制所起的作用是有限的。它的作用主要在于理解和改进软件过程的能力。
为了控制一个项目,可以对在项目期间执行的“微型过程”利用SPC,诸如评审过程或者测试过程等。
在SPC控制下,过程一执行就可以分析其结果。
如果需要,就可以采取纠正措施或者预防措施实施控制。
• 通过纠正措施,使界限外的结果变成可接受;
• 预防措施有助于改进项目其余任务的执行绩效。
给定绩效变化很大的软件过程的绩效变化概率,要确定只有自然可变性的点以便控制极限,这不是一件容易的事情。
因此,为了根据以往的绩效数据计算控制极限,必须使用判断力来确定应当排除哪些点。
有见识的管理层必须始终支持使用以往数据,但不应盲目地使用这些数据。
• 例如,不能仅仅因为绩效不在根据以往数据计算的范围之内,就认为过程已经失败了。
一种更加合理的方法是用绩效范围引起对绩效偏差的注意,然后分析引起偏差的原因。
7.2 度 量
对一个项目的任何定量控制主要取决于项目执行期间的度量。
为了在项目期间执行度量,必须仔细地规划度量什么、何时度量以及如何度量。
因此,度量的规划是项目规划的一个关键要素。
本节讨论Infosys公司的项目所执行的标准度量方法。项目经理可以在他们的项目需要时增加这些度量。
7.2.1 工作量数据收集
为了帮助项目经理监督工作量,每个雇员用一个周任务报告(WAR)系统记录各种任务所花的工作量。
• 这是内部开发的一个联机系统,所有提交的WAR 都保存在一个中心数据库中。
• 每人每周提交其WAR 。
• 提交时,报告送到各人的监督人那里以得到批准。
• 批准之后,WAR 提交就结束了,并且不能修改。
• 每个人都提交一个WAR ,包括CEO 在内。如果某人在指定的时间内没有提交WAR ,则认为他休假了。
一个WAR记录项由一个记录序列组成,每周1个记录。每个记录是一个条目列表,每个条目包含如下字段:
• 程序代码
• 模块代码
• 任务代码
• 任务描述
• 从周一到周日的工作小时数
任务代码表示任务类型的特征。
程序代码和模块代码的工作量数据根据模块或者程序进行划分,这在考虑组件级监督是重要的。
为了支持分析和项目比较,根据报告的工作量对任务进行标准化是很重要的。
拥有一个标准化的任务代码集有助于实现此目标。
表7.1给出了Infosys公司的项目采用的任务代码。
任务代码为很多阶段的返工提供了专门的代码。
这种分类有助于计算质量成本。
达到这一级精化后,就可以按阶段分析工作量数据或者按子阶段分析工作量数据。
项目规定的程序代码和模块代码用于记录项目的不同单元的工作量数据,从而简化对单元的分析。
为了简化项目级计划的工作量和实际所花工作量的分析,WAR系统与项目的MSP(Microsoft Project)描述相连接。
项目人员只有在提交了项目的MSP后才开始提交项目的WAR(一旦提交了MSP,系统就知道了哪些人应该从事该项目)。
计划的任务被定义成那些在MSP中列出的任务,并分配给项目中一个被授权的人。
没有计划的任务都归属于“其他”项目任务。
输入一周的WAR时,用户根据屏幕进行操作,屏幕被分成两部分:计划的任务和未计划的任务。
• 在MSP 中,每周分配给某个特定的人的所有任务都显示在那个项目的计划的任务部分。
用户不能增加或者修改该部分中显示的任务。
她只能输入不同的任务每天所花的时间。
• 为了登记没有在计划的部分中列出的任务所花的时间,用户可以在该项目的未计划的部分输入任务代码、其描述以及这些任务每天所花的时间。
7.2.2 故障记录和跟踪
在Infosys公司的一个项目中,故障检测和排除任务如下进行:
• 故障提交者发现并记录故障,这时故障就处于“已提交”状态。
• 接着,项目经理将修复故障的工作分配给某个人,通常是那个存在故障的文档或者代码的作者。
• 这个人执行调试并修复报告的故障,于是故障就进入了“已修复”状态。
• 已修复的故障仍然不能算被排除掉了,还要经其他人(通常是提交故障的人)验证故障已经被修复了。
• 验证以后,故障就可以被标志为“已排除”状态。
即一个故障的基本生命期有三个状态:已提交的状态、已修复的状态和已排除的状态(参见图7.2)。
一个没有被排除的故障仍然称为未被排除的故障(open)。
故障控制系统(DCS)在项目中用来记录和跟踪故障。
该系统允许进行各种类型的分析。
表7.2给出了该系统记录的每个故障的的信息。
为了确定故障引入阶段,需要对故障进行分析。
故障检测阶段包括评审和测试任务,故障引入阶段包括生产工作产品的阶段,如设计和编码等。
基于故障的性质,可以判断故障是何时引进的。
故障引入阶段与故障检测阶段不一样,故障检测阶段是确定的,而故障引入阶段却更加不明确;需要根据故障的性质和其他相关信息进行估计。
使用引入阶段和检测阶段信息,就可以计算故障排除效率、百分比分配以及其他指标。
有时不希望根据故障阶段来理解故障的性质,而是根据故障分类来理解其性质,这也是必要的。
这样一种分类有助于理解各类故障的分配情况。因此,还要记录故障的类型。
表7.3给出了可能存在故障类型及对应例子。
一个项目也可以定义它自己的类型分类。
最后,还要记录故障的严重性。
此信息对项目经理很重要。
• 例如,如果一个故障很严重,很可能要为它安排修复时间。
• 否则,可以决定在交货时间很紧的情况下暂不修复次要的或者不重要的故障。
表7.4给出了Infosys公司使用的故障严重性分类。
根据此信息进行各种分析是可能的。例如,
• 可以根据类型、严重性或者模块分解故障;
• 根据模块、严重性或者总故障数绘出故障引入和排除的趋势;
• 确定周故障引入率;
• 确定故障排除效率;
• 确定不同阶段的故障引入率;等等。
在第11章中将会看到这些数据在监督质量和预防故障方面的一些应用,同时该章还描述了案例研究中要求的故障数据。
7.2.3 进度度量
因为使用日历时间,进度度量比较简单直接。
详细的任务和进度计划通常包含在MSP进度计划中,因此在MSP中给出了估计的任务日期和任务的持续时间。
知道了一个任务的实际日期后,就可以轻松地确定它的实际持续时间。
7.2.4 规模度量
如果采用自底向上估计技术,则根据不同复杂度的程序数估计规模。
尽管这一指标对估计是有用的,但它不支持一种能够在项目间有针对性地进行比较的标准的生产率定义。
如果用代码行(LOC)作为规模度量,也会出现同样的问题:生产率随编程语言的不同而不同。
为了建立一个基准并根据该基准进行绩效比较,必须对规模度量单位进行标准化,采用一种经标准化的统一的规模度量单位。
可以将功能点作为规模度量单位。
已交付软件的规模一般以LOC为度量单位,这可以用常规的编辑器和行计数器计算。
• 在项目已经完成并准备提交时执行这种计算。
前文已经讨论过,根据以LOC为单位的规模度量,可以用已经公布的转换表计算功能点的规模度量。
7.3 项目跟踪
项目跟踪的主要目标是让项目经理掌握项目执行情况,以便他们能够确定是否需要采取什么措施以确保项目目标得到满足。
因为满足既定的项目目标是基本要求,所以必须监督所有能够影响达到目标的项目特征,并且必须制定这种监督任务的计划。
项目经理通常制定如下跟踪计划:
• 任务跟踪
• 故障跟踪
• 问题跟踪
任务跟踪检查哪些计划的任务已经完成。
如果任务的粒度很小,则可以把它看成两种最底层任务的状态之一:
• 没有完成
• 全部完成
对于更高层的任务,可以根据最底层任务的状态以及它们的估计计算高层任务的完成情况。
故障跟踪必须与故障记录同时进行。
问题跟踪确保那些有可能延迟项目的澄清和其他问题不会失去控制。
第11章说明了如何执行这些跟踪任务。
规划期间,项目经理规定他们计划采用什么类型的跟踪,以及他们将使用什么工具或者方法。
此外,为了跟踪项目的工作量状态、进度状态和质量状态,项目经理还必须制定如下计划:
• 任务级监督
• 状态报告
• 里程碑报告
任务级监督保证正确地完成每个任务。
可以使用统计过程控制定量地监督任务。
• 基于以往的绩效,可以确定某些任务的主要绩效参数的极限。
• 然后,将一个任务的实际绩效与既定的极限相比较。
• 如果绩效不在可接受的极限内,可能要采取某些措施。
在Infosys公司,评审和测试是两个采用这种方法的主要任务。
状态报告一般每周准备一次,帮助你估计哪些任务已经发生及哪些任务需要完成。
在项目的里程碑处,你要执行一种更加复杂的任务,即定量地检查工作量、进度和故障的实际数据和估计数据。
此外,你还要监督风险、培训、评审、客户投诉等等。
里程碑分析在控制项目方面有着重要的作用。
为了确保里程碑分析的频度足以支持及时干预,在客户要求的里程碑相距太远时,计划内部里程碑,以每3~5周执行一次里程碑分析为宜。
在里程碑处,要分析实际的工作量、进度和故障以及估计的工作量、进度和故障。
• 如果两者相差甚远,则需要采取某种纠正措施。
• 为了区分正常偏差和重大偏差,必须规定可接受的偏差范围;为了设定这些极限,可以利用控制图概念。
• Infosys 公司为工作量和进度偏差(实际值与估计值之间的差)定义了控制极限。这些值最初基于判断和经验,现在都基于以往的数据并且按与其他控制极限相同的方式进行计算。
• Infosys 公司以前的工作量偏差的极限是35% ,而进度极限是15% ;随着过程的改进,这些极限已减少到20% 和10% 。
• 图7.3 和7.4 给出了进度和工作量偏差的控制图。
如果在里程碑处进度和工作量偏差超过了这些极限,可能意味着项目遇到了麻烦,并且有可能不能满足其目标;在时间压力下,项目团队可能会采取不符合要求的捷径。
在这种情况下,要求项目经理弄清楚引起偏差的原因,并根据需要采取纠正措施和预防措施。
这些控制极限都基于以往的数据和经验。你必须在制定计划时设定项目本身的极限,这些极限有可能高于组织的极限。
7.4 ACIC项目的度量和跟踪计划
ACIC项目对规模、工作量、故障和进度的标准指标都进行了度量。
该计划对规模度量使用行计数器,对工作量度量使用WAR系统,对故障度量使用一个称为BugsBunny的故障控制系统,而对进度度量使用MSP。
项目经理计划用MSP进行任务跟踪,并定期举行会议以监督各种任务的状态。
问题分别被分类为联机问题、客户问题、业务经理问题和支持服务问题,并分别对它们进行跟踪。
客户反馈信息(投诉和表扬)都被记录下来。
每周向业务经理和客户发送状态报告。
对于前5个里程碑处的偏差极限,工作量和进度设为10%而故障设为20%。对于其余里程碑处的偏差极限,工作量和进度设为5%而故障设为20%。
里程碑报告也发给业务经理和客户。
跟踪和度量规划的最终结果包括在ACIC项目的项目管理计划中,有关内容请参见第8章。
7.5 小 结
在项目规划阶段,必须决定打算如何监督项目的进展。
进展监督对于保证项目朝着目标发展并在情况允许时采取纠正措施是必不可少的。
项目监督通常要求执行某些度量。
下面是从Infosys公司的度量和跟踪规划中提取的一些经验教训:
制定规模度量、进度度量、工作量度量和故障度量的计划。这些指标对于大多数软件项目已经足够了。
将工作量进行分类,并用自动化系统按每类任务的代码收集工作量数据。为了避免因记忆问题引起的不正确性,必须及时记录工作量数据。
记录故障并跟踪它们,直到项目收尾。对于一个故障,还要记录其类型、检测阶段、引入阶段和严重性,以支持诸如故障排除效率、已交付项目的质量以及故障引入率等分析。
对于里程碑处的绩效分析,建立工作量、进度和故障的可接受的绩效变化极限。项目执行时,如果绩效超出这些极限,则必须保证管理干预。
与CMM的关系
虽然项目跟踪和度量是CMM-2的项目跟踪和监督KPA、CMM-3的综合项目管理KPA以及CMM-4的两个KPA所要求的,但是CMM模型没有明确地表明需要规划这些度量。CMM的基本原则规定必须对要执行的主要任务进行规划,因此这些KPA蕴涵了对度量进行规划。
7.6 参考文献
[1] S. D. Conte, H. E. Dunsmore, and V.Y. Shen. Software Engineering Metrics and Models. Benjamin/Cummings, 1986.
[2] S. H. Kan. Metrics and Models in Software Quality Engineering. Addison-Wesley, 1995.
[3] V. R. Basili and D. M. Weiss. A methodology for collecting valid software engineering data. IEEE Transactions on Software Engineering, 10(6), 1984.
[4] V. R. Basili, G. Caldiera, and H. D. Rombach. Goal question metric paradigm. In Encyclopedia of Software Engineering, John J. Marciniak, editor. John Wiley and Sons, 1994.
[5] R. Grady and D. Caswell. Software Metrics: Establishing a Company-wide Program. Prentice Hall, 1987.
[6] Carnegie Mellon University/Software Engineering Institute. The Capability Maturity Model: Guidelines for Improving the Software Process. Addison-Wesley, 1995.
[7] N. Brown. Industrial-strength management strategies. IEEE Software, July, 1996.
[8] W. A. Florac and A. D. Carleton. Measuring the Software Process: Statistical Process Control for Software Process Improvement. Addison-Wesley, 1999.
[9] D. C. Motgomery. Introduction to Statistical Quality Control, third edition. John Wiley and Sons, 1996.
[10] D. J. Wheeler and D. S. Chambers. Understanding Statistical Process Control, second edition. SPS Press, 1992.
[11] W. Humphrey. Managing the Software Process. Addison-Wesley, 1989. (“SEI软件工程丛书”之《软件过程管理》,瓦茨•汉弗莱著,其英文影印版由清华大学出版社于2002年出版,中译版由清华大学出版社于2003年出版。)
[12] C. Jones. Applied Software Measurement: Assuring Productivity and Quality, second edition. McGraw Hill, 1996.