50多年来计算机事业的发展使人们认识到要高效率、高质量和低成本地开发软件,必须改善软件生产过程。软件过程研究的是如何将人员、技术和工具等组织起来,通过有效的管理手段,提高软件生产的效率,保证软件产品的质量。目前软件过程流派主要有三个:CMU-SEI的CMM/PSP/TSP,ISO9000质量标准体系及ISO/IEC 15504(SPICE)。
1987 年美国Camegie Mellon大学软件工程研究所(CMU/SEI)以W. S.Humphrey为首的研究组发表了研究成果“承制方软件工程能力的评估方法”,并在 1991年发展成为CMM(软件过程能力成熟度模型)。软件过程能力成熟度模型被国际软件界公认为软件工程学的一项重大成果。目前,软件能力成熟度模型 2.0版已经修订问世。由于CMM并未提供有关实现CMM关键过程域所需的具体知识和技能,因此美国Carnegie Mellon大学软件工程研究所以W S.Humphrey为首主持研究与开发了个体软件过程PSP(Personal Software Process)和群组软件过程TSP( Team Software Process),形成了CMM/PSP/TSP体系。
最初的软件质量保证系统是在 20 世纪 70年代由欧洲首先采用的,其后在美国和世界其他地区也迅速发展起来。目前,欧洲联合会积极促进软件质量的制度化,提出了如下ISO9000 软件标准系列:ISO9001,ISO9000-3,ISO9004-2,ISO9004-4,ISO90020。这一系列现已成为全球的软件质量标准。除了ISO9000标准系列外,许多工业部门、国家和国际团体也颁布了特定环境中软件运行和维护的质量标准,如IEEE标准 729-1983,730-1984,Euro Norm EN45012等。
CMM的方法很快就引起了软件界的广泛关注,1991 年国际标准化组织采纳了一项动议,开展调查研究,在此后引发了一系列的研究工作,现已取得重要成果,产生了技术报告ISO/IEC 15504《信息技术—软件过程评估》。从该技术报告的内容来看,其基本的目的和思路,均与CMU/SEI的CMM相似。
表 2-1 CMM成熟的标志
(1)软件过程:人们用于开发和维护软件及其相关过程的一系列活动,包括软件工程活动和软件管理活动。
(2)软件过程能力:描述(开发组织或项目组)遵循其软件过程能够实现预期结果的程度,它既可针对整个软件开发组织,也可针对一个软件项目而言。
(3)软件过程性能:表示(开发组织或项目组)遵循其软件过程所得到的实际结果,软件过程性能描述的是已得到的实际结果,而软件过程能力则描述的是最可能的预期结果,它既可对整个软件开发组织,也可对一个特定项目。
(4)软件过程成熟:一个特定软件过程被明确和有效地定义、管理测量和控制的程度。
(5)软件能力成熟度等级:软件开发组织在走向成熟的途中几个具有明确定义的表示软件过程能力成熟度的平台。
(6)关键过程域:每个软件能力成熟度等级包含若干个对该成熟度等级至关重要的过程域,它们的实施对达到该成熟度等级的目标起到保证作用。这些过程域就称为该成熟度等级的关键过程域,反之有非关键过程域,是指对达到相应软件成熟度等级的目标不起关键作用。可归纳为,互相关联的若干软件实践活动和有关基础设施的一个集合。
(7)关键实践:对关键过程域的实践起关键作用的方针、规程、措施、活动以及相关基础设施的建立。关键实践一般只描述“做什么”,而不强制规定“如何做”。整个软件过程的改进是基于许多小的、渐进的步骤,而不是通过一次革命性的创新来实现的,这些小的渐进步骤就是通过一些关键实践来实现的。
(8)软件能力成熟度模型:随着软件组织定义、实施、测量、控制和改进其软件过程,软件组织的能力也伴随着这些阶段逐步前进,完成对软件组织进化阶段的描述模型。
软件开发的风险之所以大,是由于软件过程能力低,其中最关键的问题在于软件开发组织不能很好地管理其软件过程,从而使一些好的开发方法和技术起不到预期的作用。而且项目的成功也需要通过工作组的杰出努力,所以仅仅建立在可得到特定人员上的成功不能为全组织的生产和质量的长期提高打下基础,必须在建立有效的软件工程实践和管理实践的基础设施方面,坚持不懈地努力,才能不断改进,才能持续地成功。
CMM提供了一个框架,将软件过程改进的进化步骤组织成五个成熟等级(表 2-2),为过程不断改进奠定了循序渐进的基础。
表 2-2 软件过程能力等级
PSP于 1995 年推出,在软件工程界引起了极大的轰动,可以说是由定向软件工程走向定量软件工程的一个标志。PSP是一种可用于控制、管理和改进个人工作方式的自我改善过程,是一个包括软件开发表格、指南和规程的结构化框架。 PSP为基于个体和小型群组软件过程的优化提供了具体而有效的途径,例如如何制定计划,如何控制质量,如何与其他人相互协作等。在软件设计阶段,PSP的着眼点在于软件缺陷的预防,其具体办法是强化设计结束准则,而不是设计方法的选择。
个体软件过程PSP的作用:
(1)使用自底向上的方法来改进过程,向每个软件工程师表明过程改进的原则,使他们能够明白如何有效地生产出高质量的软件。
(2)为基于个体和小型群组软件过程的优化提供了具体而有效的途径。其研究与实践填补了CMM的空白。
(3)帮助软件工程师在个人的基础上运用过程的原则,借助于PSP提供的一些度量和分析工具,了解自己的技能水平,控制和管理自己的工作方式,使自己日常工作的评估、计划和预测更加准确、更加有效,进而改进个人的工作表现,提高个人的工作质量和产量,积极而有效地参与高级管理人员和过程人员推动的组织范围的软件工程过程改进。
TSP即团队软件过程,是为开发软件产品的开发团队提供指导的,TSP侧重于帮助开发团队改善其质量和生产率,以使其更好地满足成本及进度的目标。
(1)需要有高层主管和各级经理的支持,以取得必要的资源。
(2)整个软件开发小组至少应在CMM的第二级(可重复层)。
(3)全体软件开发人员必须经过PSP的培训,并有按TSP工作的愿望和热情。
(4)开发小组成员应在 2~20 人之间。
(1)所编文档的页数。
(2)所编代码的行数。
(3)花费在各开发阶段或各开发任务上的时间(以min为单位)。
(4)在各个开发阶段中引入和改正的差错数目。
(5)在各个阶段对最终产品增加的价值。
(1)软件设计时间应大于软件实现时间。
(2)设计评审时间至少应占一半以上的设计时间。
(3)代码评审时间至少应占一半以上的代码编制时间。
(4)在编译阶段发现的差错不超过 10 个/KLOC。
(5)在测试阶段发现的差错不超过 5 个/KLOC。
图 2-4 CMM、PSP和TSP组成的软件框架