目前,由美国软件工程学会(SEI)开发的软件能力成熟度模型(CMM,Capability Maturity Model),已经在软件过程及质量改进方面被广泛接受,但如何在商业驱动的软件过程改进中有效地使用这一模型,特别是针对小型组织和小型工程项目,仍存在着许多误解。本文就这个问题进行尝试性的探讨,并对CMM二级的软件配置管理关键过程域的执行予以描述。
一、小组织/小项目与CMM
小组织/小项目必须引入标准的软件能力成熟度模型,否则就不可能成为真正的软件开发企业。在全面接受CMM理念的同时,最为急需导入的是软件配置管理关键过程域,要不失时机地上线使用软件配置管理工具,以便支撑项目实施。项目承制方不仅能在开发过程中受益,最为实际的是通过软件基线的界定,能形成阶段性产品。这些产品是项目开发团队理应关注的对象,也是市场部经理与客户方博弈的砝码。小组织/小项目在执行软件配置管理关键过程域中,应该完全按照规范操作,不能做任何裁剪,在组织结构与角色划分上尽量实现4个目标、25个关键实践及其描述的各种活动。
1.小项目/小组织
CMM能否被用于小项目/小组织的问题中,关于“小”的定义一直是模糊难解的。1998年软件工程过程改进小组(SEPG)会议非常关注CMM及小组织。会上,“小”被定义成“5个或更少的人为期3至4个月的开发”。还有的机构定义“小组织”为少于50个软件开发人员,并且“小项目”为少于20个开发人员。表1列出了小项目及微小项目的定义。
其中,小项目到微小项目是在小组软件过程(TSP,Team Software Process)的范围中,而个人的开发努力则在个体软件过程(PSP,Personal
Software Process)的范围中。TSP和PSP阐明了CMM的概念是如何应用到小项目中的。
2.PSP和TSP
个体软件过程是一种可用于控制、管理和改进个人工作方式的自我改善过程,是一个包括软件开发表格、指南和规程的结构化框架。PSP为基于个体和小型群组软件过程的优化提供了具体而有效的途径,譬如,如何制定计划,如何控制质量,如何与其他人相互协作等等。在软件设计阶段,PSP的着眼点在于软件缺陷的预防,其具体办法是强化设计结束的准则,而不是设计方法的选择。
个体软件过程与具体的技术(程序设计语言、工具或者设计方法)相对独立,其原则能够应用到几乎任何软件工程任务之中。个体软件过程应达到:①说明个体软件过程的原则;②帮助软件工程师做出准确的计划;③确定软件工程师为改善产品质量要采取的步骤;④建立度量个体软件过程改善的基准;⑤确定过程的改变对软件工程师能力的影响。
小组软件过程致力于开发高质量的产品,建立、管理和授权项目小组,并指导他们在满足计划费用的前提下,在承诺的期限范围内,不断生产并交付高质量的产品。
小组软件过程实施集体管理与自己管理相结合的原则,最终目的在于指导开发人员如何在最少的时间内,以预定的费用生产出高质量的软件产品,所采用的方法是对群组开发过程的定义、度量和改进。
实现小组软件过程的方法需要具备四个条件:①需要高层主管和各级经理的支持,以取得必要的资源;②整个软件开发小组至少应在CMM的第二级(可重复层);③全体软件开发人员必须经过个体软件过程培训,并有按小组软件过程工作的愿望和热情;④开发小组成员应在2到20个人之间。
在实施小组软件过程中,如果发现未能按期按质完成,应立即分析原因,以判定问题是由于工作内容不合适或工作计划不实际引起,还是由于资源不足或主观努力不够所引起的。开发小组应随时追踪项目进展状况并定期汇报,还应经常审视自己是否按软件开发过程的原理工作。如发现过程不合适,应及时改进。
3.CMM、PSP和TSP组成的软件过程框架
CMM、PSP和TSP组成的软件过程框架。
CMM是过程改善的第一步,它提供评价组织的能力、识别优先改善需求和追踪改善进展的管理方式。PSP能够指导软件工程师如何保证自己的工作质量,估计和规划自身的工作,度量和追踪个人的表现,管理自身的软件过程和产品质量。TSP结合了CMM的管理方法和PSP的工程技能,通过告诉软件工程师如何将个体过程结合进小组软件过程,并将后者与整个管理系统相联系;通过告诉管理层如何支持和授权项目小组,坚持高质量的工作,并且依据数据进行项目管理,向组织展示如何应用CMM原则和PSP去生产高质量的产品。
4.PSP和TSP对CMM的支持
二、软件配置管理
软件配置管理(SCM,Soft Configure Management)的目的是在整个项目的软件生存周期内,建立和维护软件项目产品的完整性。
软件配置管理包括在给定时间点上及时地标识软件的配置,系统地控制对配置的更改,并在整个软件生存周期中维护配置的完整性和可跟踪性。置于软件配置管理之下的工作产品包括交付给客户的软件产品(如软件需求文档和代码),以及与这些软件产品一同标识的或为产生这些软件产品所要求的产品项(如编译程序)。
通过软件配置管理的更改控制和配置审核职能,项目能系统地控制对基线的更改和由软件基线库构造的软件产品的发布。
关键过程域包括实施软件配置管理职能的有关实践。标识特定配置项/单元的实践则包含在描述各配置项/单元开发和维护的关键过程域中。
1.SCM的关键活动
CMM中的软件配置管理包括了多项相关活动,包括版本控制、建立软件配置库系统、配置项变化的控制、软件基线记录报告等等。如果将SCM作为一个配置管理模型,应当强调以下几点:
(1)任务清晰,责任明确
为了确保软件开发过程中开发人员之间各种信息交流的顺畅和准确,首要问题是确立一个实施架构。通常是以“组”的概念细分一项工程中各类任务的执行单位,明确各组在开发和管理过程中各自的职责、需要完成的工作,管理层面可由此清晰地了解产品的完成情况。总体设计者利用任务的展开方式进行任务分配,用网络图的方式控制各组之间的关系,包括时间进度计划和各组之间的接口等等。
软件开发过程中的任务管理是配置管理的基础,如果任务定义不明确,配置管理的实施也将难以保证。通过对任务的详细定义,把每一个子任务具体分配给某一个人去完成,这样就将对集体管理的任务细化到对个人的管理层面上了。
(2)建立软件配置管理库系统
建立软件配置管理库系统的主要目的是用来存放软件基线。它可以对软件配置管理进行多级控制,譬如在产品开发周期中,不同阶段有着不同力度的配置管理,随着产品不断成熟,控制力度也随之增强;提供对库中配置项的存储和修改的功能,支持在相关组之间和库中不同控制级间共享和传输配置项;支持生成软件配置管理的报告文档及软件基线内容的报告文档;有助于确保从软件基线库中发布的相关文档和软件产品的正确性。
(3)版本管理
版本控制是软件配置管理的基本要求,它可以保证在任何时刻恢复任何一个中间产品的任意版本。版本管理记录了所有库中代码和文档的开发历程,可以保证产品的可追溯性,为调试代码、清除缺陷提供很大的帮助。同时,版本管理支持并行开发和维护,为协同开发打下了基础。产品开发过程中版本状态的改变如图2所示。
(4)变化控制
在有配置管理概念的软件产品开发过程中,所有的改变都是在有效控制下的,包括软件基线的改变、配置项的改变。改变管理的一个基本项就是改变请求(CR,Change
Request),在一个软件系统中描述逻辑上改变的实体。改变请求是由开发计划变化和错误报告生成的。在开发过程中,CR主要收集有关系统改变的信息。开发人员将一个新建或修改过的文件写入库中时,要指出相关的CR,文件名称和版本需在CR中登记。CR的最终版本包括逻辑改变的描述和所有修改的文件版本信息。由SCM组和SCCM(软件配置控制委员会)审核要写入配置管理库中的新的软件基线。
2.软件配置管理工具
软件配置管理工具(SCMT,Soft Configure Management Tool)正是从这一角度出发,对软件配置管理过程进行具体实施,将抽象的软件配置管理工作转化为可借鉴的、可操作的具体执行规范。
SCMT作为软件配置管理的辅助手段,必须要制定一个实际、可行的软件配置管理流程,依据该流程,加之SCMT的辅助,软件配置管理工作才能真正做到科学、有序。
3.软件配置管理流程
SCMT将软件配置管理工作分解为项目建立、配置策划项目策划、计算机软件配置项(CSCI)策划、CSCI入库(初始入库、更动入库)、软件问题报告、软件更动报告、更动出库、浏览出库、项目归档、项目导入、产品定义、产品出库、配置审计、配置追踪、状态报告等。
首先由系统管理员建立项目,将项目基本信息入库和创建软件配置控制委员会(SCCB)用户、项目管理员;其次由项目管理员对已建立的项目进行项目策划,划分CSCI,一个项目可以包含一个或多个CSCI,包括将CSCI
基本信息入库和创建CSCI管理员、配置管理组成员,项目策划需要由软件配置控制委员会审批。
其次,由CSCI管理员进行CSCI策划,包括划分基线、为每条基线标识软件配置管理项(CMI)、确定CMI之间的依赖关系、创建一般用户,CSCI策划由配置管理组审批;配置策划完成后,即可进行初始入库(指CMI的初次入库,由权限用户操作,由配置管理组审批)。有了已入库的CMI后就可以进行后续操作。
SCMT中规定如下配置更动规程:配置更动针对的是受控库中登录的软件问题,配置更动实施前必须填写软件更动报告,经更动评审组评审通过,且确认评审结论为“按计划实施”时,才能从受控库中提出需更动的
CMI并实施更动。更动实施完成后,必须通过评审才能重新进入受控库。
更动过程在 SCMT 内分解为提交软件问题报告,提交软件更动报告,更动出库和更动入库。软件问题报告由发现问题的人员填写,不需要审批;软件更动报告由CSCI管理员填写,交更动评审组审核。在项目建立时或在接到软件更动报告后,建立更动评审组。根据所开发软件的关键级别和规模大小决定更动评审组规模的大小,构成人员应包括软件项目的管理人员、技术负责人员、总体设计人员、软件质量保证人员和软件配置管理人员,组成人数可视实际情况酌定。更动评审组收到软件更动报告后,分析此更动的必要性和技术可行性,并权衡其他的更动策略和方法,所涉及的有关CMI,对系统的功能和性能的影响,更动所需的资源是否合理、充分以及对整个工程进展和经费的影响等。由此决策是否实施此项更动,并给出更动评审结论,同时由
SCCB签署该软件更动报告。
SCMT审查签署后的软件更动报告中的更动结论,清除问题时,形成“问题报告”-“更动报告”链并发布问题解决通告;暂缓执行时,不需做任何处理;按计划实施时,允许CMI更动出库。更动出库由权限用户依据签署的软件更动报告进行;更动入库由权限用户操作,由CMG审批。
浏览出库指出于测试或阅读的需要对CMI进行出库,浏览出库不需要审批。
产品定义、产品出库、项目归档和项目导入由项目管理员操作,由SCCB审批。要求出库的产品必须曾经定义过,要求导入的项目必须为归档项目。
配置审计、配置追踪、状态报告由SCCB、CMG、CSCI管理员操作。
SCMT提供配置审计向导,引导用户完成配置审计处理过程。
在导入SCMT时应该本着软件配置管理关键域的核心思想,从现有市场中选择适合自己的配置工具。需要强调的是,无论什么样的工具都无法完全实现软件配置管理的目标与关键实践,在此也不排除自我开发的SCMT。问题的关键在于对人的培训,在使用工具的同时深化CMM管理理念,使整个软件项目团队在开发过程中确保质量达标。因此,手工操作仍然是今后一段时间内软件配置管理实施中必不可少的基础手段。