(本文翻译自美国希尔空军基地主办的《Cross Talk》杂志
2001年7月号。作者是希尔空军基地软件工程部的工作人员。)
我们的软件组织从起始一直到CMM5级的质量实践中,实施软件配置管理,并辅之以管理和工程技术手段,对我们武器系统的软件维护至关重要。本文阐述了配置管理如何通过建立和维护工程技术工作的连续性来为组织创造价值,同时也提供了如何建立强有力的配置管理体系,促进组织进步的相关经验。
日文中有一个词“Kaizen”,指的是有纪律的持续改进。(“Kaizen”其实是汉字“改进”的日语发音,特指一种持续改进方法
—— 译者)例如对一条精良的自动化生产线不断地提高其生产能力,直到暴露问题,解决之后,再不断提高,如此往复。同时“Kaizen”要求每一个人参与其中,从经理到员工都不例外。
“软件配置管理”(简称SCM)也是这样一种纪律,其目的同样是持续地改进软件开发过程,以期望得到高质量的软件产品。SCM通过对配置项(Configuration
Item,简称CI)的计划,控制,审计和改进来实现整个软件产品周期中的有效管理。
在早期的犹他州希尔空军基地软件工程分部(简称TIS),SCM并不是一种常用的术语。大多数工程师都知道SCM,但却并不重视它。SCM对他们来说意味着烦琐的过程和规程,而软件工程师们并不愿意被过程和文档工作所打扰。每个人或小组都有他们自己的做事方式,这使得完成的工作很少能够做到风格统一。但是,无论如何,大家还是希望开发高质量的软件,而且返工越少越好。
基于这种提供高质量软件产品的渴望,我们仔细审视我们的工作方式,并寻找改进的方法。高级管理层最终选择了卡内基梅隆大学软件工程研究所的能力成熟度模型(Capability
Maturity Model ,简称CMM ),并在初始的评估之后,开始了组织基于过程的改进。这一决定才真正将SCM作为开发高质量软件产品的关键过程引入到部门内部。为了成为一个CMM
等级2的组织,我们需要一套与管理软件项目相一致的方针。CMM 等级2所要求的内容包括:需求管理,软件项目策划,软件项目跟踪与监督,软件子合同管理,软件质量保证和SCM。
在我们的实施中,SCM团队同时也肩负质量保证的责任,从而成为组织结构中的重要角色。这对于SCM团队是一项艰难的工作,部门中的许多人员不愿意改变,也不喜欢SCM将带来的额外工作,这意味着对每一行代码负责,意味着记录每个变更。
在此之前,每个工程师负责自己的配置管理工作。现在需要建立一个独立的小组,为引入过程管理的项目提供质量保证和配置管理。
这意味着需要遵守一个既严格又灵活的过程,说它严格是因为每个人要保持一致的做事方式,而说它灵活是因为每个项目要根据客户需求开发不同的产品。经过一段时间以后,SCM已经成为高质量软件的保证。打个比方,SCM就好像“胶水”一样,将各种方法和技术结合在一起,让组织能够开发出高质量的产品。
开发“胶水”
在武器系统开发的各个阶段活动中,SCM扮演了重要角色,例如项目计划,管理进度和里程碑,进行配置项的标识等,这些工作贯穿于整个项目生命周期。通过建立基线,SCM定义软件开发的起始状态并记录演化细节。在生命周期的初始阶段就引入SCM,就如同将房屋建立在坚固的岩石上。SCM的严格实施为软件开发和维护工作的完成奠定了坚实的基础。
在武器系统维护的阶段活动中,SCM活动的纪律性可以增强团队的能力并维护工作的一致性。现在仅仅凭借几条简单的公认准则和指南来开发已经不合时宜。定义一个结构清晰的过程并加以贯彻成为必需。实施SCM要求建立贯穿整个产品生命周期的配置项控制和审计过程,通过这些过程,产品的质量和一致性得到了保证和维护,并且有人为其负责。
在项目定义阶段,SCM具有整合的功能,记录在项目定义阶段的相关信息。SCM通过跟踪每个软件活动对后续开发阶段提供支持,用可再现的审计和数据控制建立产品内在的一致性和质量。SCM建立成本的可跟踪的度量,审计产品不足,产品可重现的能力,为我们组织中产品提供了增值的功能。它确保每个需求,问题,活动项等被跟踪直到关闭,相关的度量数据得到更新。
在项目的定义阶段,SCM的职责包括排定日程、参加会议并记录相关信息。在产品的维护阶段,通过规范的审计和数据控制以及对软件开发活动的仔细追踪,来保证产品的质量和一致性。同时,我们也对SCM活动进行度量,追踪成本,发现弱点,并考察其从灾害中恢复的能力,确保其能够为组织活动增值。SCM确保每个需求,问题,活动项等被跟踪直到关闭,相关的度量数据得到更新。
SCM还负责维护配置状态报告(简称CSA),提供需求符合度,成本控制,源代码行数等信息。报告数据用作项目管理评审等活动的输入信息,为组织作出正确的决策提供依据。无论是过去、现在、还是将来,SCM无论在工作流数据管理,还是在产品的整个生命周期的维护中,始终为我们的项目提供了重要支持。
生命周期过程
在我们的组织中,通过计划,标识,控制和审计工作过程的活动,SCM实现了对产品生命周期的定义,实施和管理的功能。具有定义良好的过程使我们能适应新的软硬件的开发任务。
实践表明,通过对正式的CM过程的裁剪使之适合每个项目的需求,对组织是非常有益的一件事。这个方法使得每个项目不必刻板地和组织规程保持一致;取而代之的是,项目可以根据实际情况有一定的灵活性。当每个项目建立的配置规程既能与组织的过程一致,又能满足各自的需求时,会对项目发挥最大的作用。下面是SCM工作过程的概要介绍:
策划:管理上软件配置管理规范配合用于建立和维护配置计划和项目计划,这些计划定义了项目的活动和交付物。计划中还包括项目生命周期中采用的过程和规程。SCM用于参与和记录项目方向,进度,变更请求,同行评审活动以及配置控制委员会(简称CCB)的活动。CCB负责定义项目的里程碑,交付工件以及成本和进度。
在我们的组织中,CCB在开始定义需求、进度和交付物之前已经存在,这些要求将在项目约束和需求文档中进行说明。经过正式签署的文档代表了组织与客户之间就项目的里程碑和交付物达成的约定。之后文档纳入配置管理,并在项目的生命周期中作为参考,当文档的内容发生变化时将被重新评审。
标识:在完成了上层的计划后,SCM将建立CSA数据库,开始识别配置项和生命周期变更度量的收集工作。通过获取已标识的工作产品的度量数据,SCM为管理层和工程提供必须的数据帮助作出明智的决策,这已成为等级5中组织持续过程改进的核心。
SCM团队和项目经理一起识别项目的配置项。建立工作产品和它们相关的数据管理对象的跟踪,保证项目策划阶段被批准的需求在修改中的一致性,这要求当工程变更,系统设计变更,子系统设计变更,软件变更,代码变更时,跟踪工作产品的建立,维护和关闭状态。这样数据库可以提供有关的累计变更情况。
我们组织采用CSA系统记录各种度量,比如实际耗费的人时、每个变更请求产生的代码行等。这些实际度量的数据放入组织的资产库,可以用于新项目参考历史时使用。图一是一个项目报告的例子,内容包括项目标识,项目名称,项目人员,人时,代码行和其他项目开发需要的信息。我们还有其他的报告,可以显示项目的状态,完成百分比和其他有价值的度量。
图一 项目报告示例
控制:通过建立配置管理过程和规程,SCM实施对CIs的控制,以在升级的生命周期中维护配置变化的可跟踪性。在每个阶段/里程碑增长的配置,确保要包括新增的通过验证的代码和维护已知偏差的可跟踪性。在我们组织中,CM在产品生命周期中定期更新CSA数据库,这种做法提供了项目在各个指定时间点的快照。这意味着要同时查询当前和已归档的项目时,增量发布的历史数据可以描述出发现缺陷的阶段和改正缺陷的阶段等信息。
图2是我们数据库内一个变更请求单(简称SCR)的例子。在这个过程中对将来需使用的数据进行了度量。在每个里程碑时跟踪进度,比如最后的同行评审完成时间、CCB批准的时间,还包括评审SCR耗费的人时,同行评审花费的时间,行动项个数与优先级,源代码行以及内存的变化等。
偏差在不同的测试阶段被发现。当偏差被发现时,发现缺陷的工程师负责将其输入数据库。当偏差成为配置项后,数据库给它分配一个跟踪编号。SCM跟踪问题直到其被改正或确定不是问题。图3是一份偏差状态报告的样例。
图二:变更请求
图三:偏差报告
审计:在软件增量开发的构建过程中,SCM要进行配置审计,以确保产品的完整性和与规程的一致性。此外,作为独立的实体,SCM团队还在产品的生命周期中负责质量保证的工作,维护过程的连续性和可跟踪性。我们的CM过程包括审计和质量检查,保证在软件代码开发的同时,相关规格的及时更新。
例如,当一个变更请求被评审,意见被记录,责任人已按同行评审的意见再次修订后就会进行审计,我们的同行评审过程要求对文档进行审计,保证责任人完成所有批准的变更。如果审计没有通过,将会重复变更的步骤。
我们得到的一个教训是这样的:当发布新的软件系统前时,客户又提出新的系统升级需求。客户的需求往往是模糊、不确定的,而且没有标识出所有的配置项,额外的硬件修订需求也没有识别出,直到我们开始升级软件时才发现。在项目的晚期才识别、纠正和实施发现的偏差,会影响软件的发布周期。为避免此类问题重演,我们采取了纠正行动,对配置管理过程进行裁剪,增加对文档进行预评审的过程。修订后的过程将此类问题减少90%。而且CCB能基于更好的产品进行评审,对项目的费用和进度估算也更准确。
工具和度量
工具是我们软件维护环境的关键能力之一。工具提供生命周期中软件的标识,控制软件和其相关的组件的变化。现在市场上有很多的商业SCM工具软件,我们组织也使用了其中几种。为满足我们公司的过程和文化的个性化需求,我们还开发了许多公司内使用的工具。传统的CM工具提供检入/检出和编译、构建的功能,我们自有的工具具备过程管理的能力,如跟踪偏差和提供问题报告。我们也购买商用的工具并进行裁剪以符合我们的过程,并提供所需的质量功能。
配置状态报告是SCM的一个关键部分。为了真正实现配置管理,需要有工具对配置项状态、问题和偏差进行跟踪。我们已开发的内部工具,在跟踪几个复杂系统的同时,还具有数据收集和产生大量报告的能力。内部工具的多种功能不仅提供了对不同类型系统开发的支持,而且可以根据公司新的需求变化和过程更新进行灵活的调整。
图4所示的例子是我们数据库新增的一项需求。这项功能提供的基线数据帮助我们跟踪飞行操作项目当前的更新。它跟踪项目所有发布的版本号和构建的日期。这项功能帮助跟踪各个分支系统的基线,并使我们能提供相关的信息给需要的人。
在过程改进的不同阶段,从一个CMM1级的组织成长为CMM5级的组织,我们学习到许多有用的经验。其中最有价值的经验之一是:先建立组织的过程,然后再购买或开发相应的工具支持过程。如果你不知道往哪儿走,你的总目标是什么,你就会止步于建立一个过程来被动适应你的工具,这样可能对你的组织不是最好的方式。
良好的状态报告工具带来的益处是能获取度量数据和生成报告,这对于组织和客户都非常有益。我们能够跟踪成本的估计,人时,源代码行,偏差,内存需求,返工,还有更多,这让我们可以将估计数据和和实际数据进行比较。正是这些历史数据使我们建立可靠的跟踪记录,并给将来的项目工作极大的帮助,同时也帮助客户在提出需求时提供相关信息。
培训
对SCM团队的每个成员进行培训是必须的,SCM是一个不断进化的领域,不仅需要与新的理论和工具保持同步,同时需要理解公司内外其他地方对SCM的不同解释。我们必须关注业界的变化和改进,不断提供最新的过程给客户,这样才能使组织的SCM活动具有适当的权威和责任。
图四:OPF程序历史报告
管理层,工程师和配置经理必须理解各自组织的过程。具备足够的知识,能够针对不同的客户和任务对过程进行剪裁是必要的。配置经理的工作关系到软件开发生命周期的所有阶段,他们必须成为过程的有机组成部分。他们依靠自己的经验进行过程的改进和担任质量保证的角色。对细节知识的了解,接受正式培训以及工作中不断积累的经验使配置管理员不断加深对问题的理解——暂时停止进展,定位问题,改正问题,然后继续工作。当遇到问题时,经验丰富的配置管理员在解决问题时是无价之宝。以下是为我们组织带来增益的培训
- 第一步是受过培训的个人对新人/未接受培训人员的辅导
- 第二步是CM培训课程,课程可以给出配置管理的全景图,对于所有想了解配置管理的人员都有益。
- 第三步,也是最重要的一步——在职培训,提供对SCM过程和规程最深入的了解。
接受过良好的SCM培训的人员,使得不断生产高质量产品成为可能。SCM团队的成员既不是技术人员也不是工程人员。SCM组是由一群具有洞察力,并且深刻理解SCM方针,规程的人员组成。在我们组织的内,为愿意从事SCM工作的人提供了SCM技能的标准要求,并支持个人在此方面的发展。受过正规培训的SCM经理可以向其他人说明有纪律的配置管理的价值。经培训的配置管理员在履行职责时充满自信和专业性,他们是使配置纪律成为成熟软件组织的至关重要的部分。
总结
维护SCM的纪律对于我们软件组织达到CMM 5级标准是不可缺少的活动。SCM的正确实施使我们能计划,标识,控制和审计软件产品和管理生命周期。SCM和管理及工程技术一起,引导我们组织不断地提升能力,以满足高质量,低成本和按期交付产品的期望。我们的经验证明,合适的工具,适当的培训加上合理的过程,就可以实现持续改进。
|