引言
如果你从事软件开发相关工作,一定听说过软件配置管理。
而对于多数人来说,软件配置管理也可能只是听说过,感觉就在身边,却又让人摸不到,也说不清楚。而有些即使在从事软件配置管理的工作,也不能很好地理解它的作用和意义,有些也是在僵硬固化地模仿着做,不清楚软件配置管理的真正内涵。
本文就试图揭开软件配置管理神秘的层层面纱,一探其究竟。
软件配置管理(Software Configuration Management)
缺失配置管理带来的问题
在了解什么是软件配置管理之前,先让我们看一下没有它,或者没有做好它的时候,软件开发过程会发生哪些事情。
你一定听说过或者经历过以下问题:
- 找不到最新的开发计划文档
- 使用了旧版本的需求文档
- 在错误的代码版本上进行开发
- 代码分支混乱,无所适从
- 依赖了错误版本的软件包
- 已经解决过的缺陷再次出现
- 发布了错误的软件版本
- 软件无法正确安装,或者安装后不能正常工作
软件配置管理不足带来的问题
类似的问题还有很多,这些软件开发过程的混乱和无序,都是软件配置管理工作缺失或没有做好所导致的。
软件配置管理的意义
我们已经知道缺失软件配置管理后,软件开发活动是多么混乱和无序,这是因为根据软件项目的特点,软件必须进行配置管理。
软件项目日趋庞杂,需要很多人协作,需要在多种平台上运行,需要支持若干版本,又处于不断演化和变更状态,容易拷贝,等等这些特点,决定了软件配置管理的必要性。
软件项目特点要求软件进行配置管理
什么是软件配置管理
配置管理最初来自于制造行业,用于规范设备的设计与制造,始终交付有效的产品。
之所以叫“配置管理“,是因为成品基本都是由具备不同功能特性的零件配置起来的,随着成品的革新,零件也可能升级换代,配置管理需要把它们的版本和关系清楚记录和管控。
为了便于理解,可以举个比较生活化的例子。就拿餐馆来说,为了让每位客人最终享用到满意的饭菜,避免发生做错菜、上错菜等错误,就需要将备料、点菜、加菜、制作、留样、上菜、退菜等环节中的影响菜品制成的要素有效地管控起来,如菜品对原料要求,客人对菜品的口味要求等,做好记录和管控。
餐厅菜品配置管理示意(局部)
我们将以上场景平移到软件开发过程中,客户点的菜品就相当于软件需求,客户加菜、退菜相当于需求的变更,厨房做菜的过程就相当于设计、编码,做成的菜品就是最终编译打包后的软件产品,整个过程如果没有有效地记录和控制,可想而知是多么的混乱、无序和错漏百出,结果也绝不会令人满意。
所以,我们也可以把软件也看成是逐步演化和装配起来的,软件开发也需要一种可以将形成和影响软件中间或最终形态的各种“成份”加以识别,并管控其版本和变更,实现软件每个状态的可追溯,使整个过程能够有条不紊地进行,而这就是所谓的软件配置管理。
为便于从多个角度理解软件配置管理,下面给出一些较为学术的描述:
[微风]CMM-CMMI 软件能力成熟度模型与模型集成:
软件配置管理是“软件过程的关键要素,是开发和维护各个阶段管理软件演进过程的方法和规程”。
[微风]ISO 9000-3:1997 质量管理和质量保证标准 :
配置管理是一个管理学科,它对配置项(包括软件项)的开发和支持生存期给予技术上的和管理上的指导。配置管理的应用取决于项目的规模、复杂程度和风险大小。
[微风]GB/T 11457:1995 《软件工程术语》:
A.表示和确定系统中配置项的过程,在系统整个生存期内控制这些配置项的投放和更动,记录并报告配置的状态和更动要求,验证配置项的完整性和正确性。
B.对下列工作进行技术和行动指导与监督的一套规范:
——对配置项的功能特性和物理特性进行标识和文件编制工作;
——控制这些特性的更动情况;
——记录并报告这些更动进行的处理和实现的状态。
[微风]IEEE 828-1998 配置管理技术标准:
软件配置管理是软件工程中用来管理软件资产变更的一项规程,包括它所使用的相关工具和应用技术(流程和方法)。
软件配置管理的原理
我们知道,软件是一个形成和演化的过程,在其生命周期中,它的形态和组成不断地变化。最初,它的形态表现为业务需求文档,接着又演化为系统需求的形态,进而被描述为概要设计和详细设计,再接下来表现为代码、依赖包、测试代码等,后来又演变为部署包和安装文档,再后来是运行的产品和用户手册。
软件形态演进简单示意
可以将软件演进比作一棵小树逐渐成长为大树的过程,这棵树就是我们的软件,树的树根、树干、枝条、树叶、花、果实等就是形成软件的文档、代码等,我们只要完整记录树根、枝条、树叶等的每次变化,就能随时“还原”出树在某个时刻的模样。我们再对枝条修剪、果实采摘等行为进行规范管理,就可以使这棵树按照预定的目标健康有序成长。
树木有序成长
所以,软件配置管理的原理就是:通过对软件的各配置项各版本进行有效记录,并对它们的变更进行管控,来维护软件的完整性、正确性和可追溯性,最终实现软件的有序和高效演进。配置管理的核心就是对版本和变更的管理,就是在管理变化。
由此,我们也可以从另一个角度认识软件配置:
软件配置是软件产品在生命周期各阶段的不同形式和不同版本的程序、文档和数据的集合,集合中的每个元素就是一个配置项。
下图描述了包含阶梯式、变更集、变化跟踪、并行开发等多个配置管理的方法论,用于协调问题跟踪和变更管理(见于徐晓春、李高健编写的《软件配置管理》)。
配置管理的若干方法论
软件配置管理的目标
软件配置管理应实现配置管理的计划性、配置项的完整识别、配置项获取和变更的受控、软件状态便于了解等目标和效果。
软件配置管理的目标
软件配置管理的任务
为了做好软件配置管理,达到其应有效果,除了做好对配置项的标识、版本管理、变更控制等核心任务外,还需要做好计划、培训、审计、报告等辅助工作。
软件配置管理工作任务
配置管理工作任务顺序关系
也可以将软件配置管理活动划分为版本控制、变更控制和过程控制三个方面。
软件配置管理的三个方面
下图体现了主要配置管理活动的层次关系。
配置管理的层次
软件配置管理的组织和流程
为了有序开展软件配置管理的以上活动,需要建立一些组织和角色,以下是一种软件配置管理组织和流程。
软件配置管理角色和职责
软件配置管理基本流程
软件配置管理的模式
在软件配置管理中,有主分支、开发分支、本地工作空间、预发布分支、发布分支等模式可使用。
软件配置管理常见模式
软件配置管理的有效执行
有成效的配置管理,需要形成人、规范和工具三方面有机结合的最佳实践。
软件配置管理最佳实践
配置项
软件配置是一个集合,该集合中的每一个元素称为该软件产品软件配置中的一个配置项(Software Configuration Item,SCI)。常见的软件配置项有需求规格说明书、设计规格说明书、源代码、测试计划、测试用例、用户手册等
软件配置项
标识配置项需要考虑配置项组名、配置项名称、配置项文件名或命名规则、版本编号和变更规程等。
配置项标识考虑因素
配置库
一般将配置库分为开发库、受控库和产品库。
配置库划分
配置基线
基线(Baseline)是指一个(或一组)配置项在项目生命周期的不同时间点上通过正式评审而进入正式受控的一种状态,是软件生命周期中各开发阶段的一个特定点,它的作用是把开发各阶段工作的划分更加明确化,使本来连续的工作在这些点上断开,以便于检查与肯定阶段成果。
配置基线
配置基线与开发阶段
配置管理与DevOps
DevOps推崇”一切自动化“,而软件配置管理则是“一切自动化”的基石。
要实现“一切自动化”,需要将需求、代码、软件包、部署包,乃至基础设施,等等一切影响构建、测试、部署的元素都版本化,都纳入配置管理中来,在各阶段共享唯一受信源,实现可追溯、可重现。
一切版本化、一切自动化
结语
随着软件行业的发展,敏捷和DevOps的广泛流行,软件配置管理的实践也一直在演化之中,一些旧的概念和做法逐渐限于在部分行业领域中使用,像基础设施即代码、不可变基础设施等新兴理念和实践,也在大范围应用之中,软件配置管理的重要性将越来越高。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。