软件产业已经或正在经历三个时代,即结构化生产时代(在美国,1975~1995年;我国目前处在这一阶段的后期),以过程为中心的时代(在美国,1985~2005年;我国目前尚处在这一阶段的初期),工业化生产时代(美国从1995年进入这一时代)。这是一条不以人的意志为转移的客观规律。因此,我国的软件产业需要迅速转入以过程为中心,走工业化生产的道路。在软件过程方面,不少前人已为我们做了许多奠基性的工作,特别是美国Carnegie-Mellon大学软件工程研究所(CMU/SEI)提出的能力成熟度模型CMM(Capability Maturity Model)、个体软件过程PSP(Personal Software Process)和群组软件过程TSP(Team Software Process),可作为我们前进的借鉴。
早在20世纪70年代中期,美国国防部就组织力量研究软件项目失败的原因,发现在失败的软件项目中,70%是由于管理不善所造成的,因而认为管理影响全局,并掀起了研究软件管理技术的热潮。20年后,根据美国三份经典研究报告,这一状况并未得到转变:软件开发仍然很难预测,大约只有10%的项目能够在预定的费用和进度下交付符合需求的软件;管理仍然是软件项目成败的主要因素;并指出开发过程中的返工是软件过程不成熟的标志。例如在Capers Jones的报告中就指出,在17个影响软件项目成败的主要因素中,与项目管理直接有关的有6个(软件度量、工作量估计、项目规划、进展报告、需求变化、风险管理),间接有关的有3个(系统构架、开发方法、配置管理)。
为了系统地解决软件项目管理问题,美国国防部于1984年在Carnegie-Mellon大学建立了软件工程研究所,1986年开始研究并于1991年提出能力成熟度模型CMM,1989年开始研究并于1994年提出个体软件过程PSP,1994年开始研究并于1998年由CMU/SEI召开的过程工程年会上第一次介绍了TSP草案,于1999年发表了有关TSP的一本书,使软件过程框架形成一个包含CMM、PSP和TSP三者的严密的整体。
创建自我管理的群组
TSP对群组软件过程的定义、度量和改革提出了一整套原则、策略和方法,把CMM要求实施的管理与PSP要求开发人员具有的技巧结合起来,以按时交付高质量的软件,并把成本控制在预算的范围之内。在TSP中,讲述了如何创建高效且具有自我管理能力的工程小组,工程人员如何才能成为合格的项目组成员,管理人员如何对群组提供指导和支持,如何保持良好的工程环境使项目组能充分发挥自己的水平等软件工程管理问题。
具体地说,TSP的目标为创建具有自我管理能力的群组,管理人员要善于引导和激励群组的全体成员使他们能发挥自己的最高水平,采用CMM来进行软件过程的改革,为处于高成熟度的软件组织的过程改革提供指导,积极培训人才为在大学和研究所讲授工业界常用的群组开发技巧提供蓝本。
四条基本原理
群组软件过程TSP基于以下四条基本原理:应该遵循一个确定的、可重复的过程并迅速获得反馈,这样才能使学习和改革最有成效;一个群组是否高效,是由明确的目标、有效的工作环境、有能力的教练和积极的领导等四方面因素的综合作用所确定的,因此应在这四个方面同时努力,而不能偏废其中任何一个方面;应注意及时总结经验教训,当学员在项目中面临各种各样的实际问题并寻求有效的解决问题方案时,就会更深刻地体会到TSP的威力;应注意借鉴前人和他人的经验,在已经可资利用的工程、科学和教学法经验的基础上来规定过程改进的指令。
在软件开发(或维护)过程中,首先需要按照群组软件过程框架定义一个过程。在设计TSP过程时,需要按照以下七条原则:循序前进的原则,首先在PSP的基础上提出一个简单的过程框架,然后逐步完善;迭代开发的原则,选用增量式迭代开发方法,通过几个循环开发一个产品;质量优先的原则,对按TSP开发的软件产品,建立质量和性能的度量标准;目标明确的原则,对实施TSP的群组及其成员的工作效果提供准确的度量;定期评审的原则,在TSP的实施过程中,对角色和群组进行定期的评价;过程规范的原则,对每一个项目的TSP规定明确的过程规范;指令明确的原则,对实施TSP中可能遇到的问题提供解决问题的指南。
实施需具备的条件
首先需要有高层主管和各级管理人员的支持,以取得必要的资源,这是实施TSP必须具备的物质基础;软件过程的改善需要全体有关人员的积极参与,他们不仅需要有改革的热情和明确的目标,而且需要对当前过程有很好的了解;任何过程改革都有一定的风险,都有一个实践、改革、评审直至完善的循环往复、持续改善的过程,不可能一蹴而就;项目组的开发人员需要经过PSP的培训,使之具备自我改善的能力;整个开发单位的能力成熟度在总体上应处于CMM二级以上。
六项管理原则
在实施群组软件过程TSP的过程中,应该自始至终贯彻集体管理与自我管理相结合的原则,具体地说,应该实施以下六项原则:计划工作的原则,在每一阶段开始时要制订工作计划,规定明确的目标;实事求是的原则,目标不应过高也不应过低而应实事求是,在检查计划时如果发现未能完成或者已经超越规定的目标,应分析原因,并根据实际情况对原有计划作必要的修改;动态监控的原则,一方面应定期追踪项目进展状态并向有关人员汇报,另一方面应经常评审自己是否按PSP原理进行工作;自我管理的原则,开发小组成员如发现过程不合适,应主动、及时地进行改进,以保证始终用高质量的过程来生产高质量的软件,任何消极埋怨或坐视等待的态度都是不对的;集体管理的原则,项目开发小组的全体成员都要积极参加和关心小组的工作规划、进展追踪和决策制订等项工作;独立负责的原则,按TSP原理进行管理,每个成员都要但任一个角色。在TSP的实践过程中,TSP的创始人Humphrey 建议在一个软件开发小组内把管理的角色分成客户界面、设计方案、实现技术、工作规划、软件过程、产品质量、工程支持以及产品测试等八类。如果小组成员的数目较少,则可将其中的某些角色合并,如果小组成员的数目较多,则可将其中的某些角色拆分。总之,每个成员都要独立担当一个角色。
TSP流程
TSP一般将一个软件项目的开发工作分为4个阶段。任何一个应用TSP的项目可以只包括其中的一个阶段,也可以包括几个连续的阶段。在项目开始之前,项目组应该执行启动过程,对整个任务进行全面地规划和组织。在每个阶段之前,项目组应该执行重启过程,对下一个阶段的任务进行规划。一般来说,如果项目组的成员经过了PSP的培训,项目组的启动过程约需3天时间,重启过程约需两天时间。此时,项目组同管理人员一起评审项目计划和分析关键风险。在项目已经启动之后,项目组应每周进行一次项目进展讨论会,另外还应及时向有关主管和客户报告项目的进展情况。
当前版本的TSP使用23个过程指南、14个数据表格和3个标准。在这些过程指南中定义了173个启动和开发步骤。每一个步骤都不复杂,但它们的描述都非常详细,以便开发人员能够清楚地知道下一步应该做什么,应该怎样去做。这些过程指南可用来指导项目组来完成启动过程和一步步地完成整个项目。
经过3天的项目启动过程之后,项目组应该产生以下结果:项目组的目标;项目组各成员的明确角色;过程开发计划;项目组的质量计划;全面的开发计划和进度计划;下一阶段每个成员的详细工作计划;项目的风险分析结果以及项目的状态报告。
TSP过程质量度量元
软件开发小组按群组软件过程TSP进行生产、维护软件或提供服务,其质量可用两组元素来表达,一组元素用以度量开发小组的素质,称之为开发小组素质度量元,另一组用以度量软件过程的质量,称之为软件过程质量度量元。
开发小组素质的基本度量元有以下五项:所编文档的页数;所编代码的行数;花费在各个开发阶段或花费在各个开发任务上的时间(以分为度量单位);在各个开发阶段中注入和改正的缺陷数目;在各个阶段对最终产品增加的价值。应该指出,这五个度量元是针对软件产品的开发来陈述的,对软件产品的维护或提供其它服务,可以参照这些条款给出类似的陈述。
软件过程质量的基本度量元有以下五项:设计工作量应大于编码工作量;设计评审工作量至少应占一半以上的设计工作量;代码评审工作量应占一半以上的代码编制的工作量;每千行源程序在编译阶段发现的差错不应超过10个;每千行源程序在测试阶段发现的差错不应超过5个。
表1
无论是开发小组的素质,还是软件过程的质量,都可用一个等五边形来表示,其中每一个基本度量元是该等五边形的一个顶。基本度量元的实际度量结果,落在其顶点与等五边形中心的连线上,其取值可以根据事先给出的定义来确定。在应用TSP时,通过对必要数据的收集,项目组在进入集成和系统测试之前能够初步确定模块的质量。如果发现某些模块的质量较差,就应对该模块进行精心地复测,有时甚至有必要对质量特别差的模块重新进行开发,以保证生产出高质量的产品,且能节省大量的测试和维护时间。
早期应用结果
1996年,美国CMU/SEI建立了两个TSP项目,其中一个成功,另一个失败。1997年,CMU/SEI建立了9个TSP项目,并先举办了TSP技术培训班,其中两个很成功,两个相当成功,一个失败,时至1998年9月,另外4个尚在进行之中。1998年,CMU/SEI建立了6个TSP项目,并先对TSP项目组组长进行了培训,时至1998年9月,其中一个很成功,所获得的数据如表1所示;另外5个尚未完成,但根据进展情况来看,4个进展情况良好,一个看来存在问题。
三者有机结合
迄今为止,学术界和产业界公认CMM是当前最好的软件过程,然而它的成功与否与软件开发单位内部有关人员的积极参加和创造性活动密不可分。而且由于CMM中并未提供有关实现子过程域所需要的具体知识和技能,因此进行个体软件过程PSP的研究与实践以填补这一空白,且为基于个体和小型群组软件过程的优化提供了具体、有效的途径。群组软件过程TSP结合了CMM的管理方法和PSP的工程技能,建立、管理、授权并且指导项目小组如何在满足计划费用的前提下,在承诺的期限范围内,不断生产并交付高质量的产品。从公布的TSP实验数据来看,结果是令人鼓舞的。但由于尚未在巨型项目中进行TSP试验,因而尚难断定在巨型项目中实施TSP会出现什么问题,目前认为TSP比较适合规模为3~20人的开发小组。
CMM、PSP和TSP为软件产业提供了一个集成化的、三维的软件过程改革框架。TSP指导项目组中的成员如何有效地规划和管理所面临的项目开发任务,而且告诉管理人员如何指导软件开发队伍,始终以最佳状态来完成工作。在此应着重指出,单纯实施能力成熟度模型CMM,永远不能真正做到能力成熟度的升级,而需要将实施CMM与实施PSP和实施TSP有机地结合起来,才能达到软件过程持续改善的效果。