购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第1章
恼人不休的问题:什么是软件配置管理

什么是软件配置管理?众说纷纭。这一章尝试用通俗易懂的方式,介绍软件配置管理的基本内容和基本目标,以便让读者有个初步的概念,有些整体上的把握。

1.1 问题的引出

软件配置管理工作者差不多都有这样的经验:在认识新朋友时,当别人问起自己所从事的职业,自然会回答道:“我从事软件配置管理工作。”接着,十有八九,会被问到下一个问题:“什么是软件配置管理?”总被问到相同的问题,倒还称不上是苦恼,真正的苦恼在于回答这个问题,因为软件配置管理真是不太容易说得清……解释了半天,结果往往是:“你这份工作好玄妙啊。隔行如隔山啊,我是搞不懂了。”

是的,软件配置管理确实不太好解释。软件开发过程中的其他工作,似乎都比它容易理解。开发人员在编写源代码;测试人员在测试、挑毛病;需求分析师配合用户确定需求,并且用准确的语言表达出来……虽然这样说未必严谨,但是至少能够得到一个大致的印象。然而,软件配置管理呢?软件配置管理是什么?

下面是软件配置管理的一个权威定义:

“A discipline applying technical and administrative direction and surveillance to identify and document the functional and physical characteristics of a configuration item, control changes to those characteristics, record and report change processing and implementation status, and verify compliance with specified requirements.”

“一套应用技术上和管理上的指导和监督的方法,用来识别和记录配置项的功能特征和物理特征;控制这些特征的变更;记录和报告变更的处理和执行的状态;以及验证其是否符合特定的需求。”

如果你看得一头雾水,别担心,这不是你能力上的问题。大部分人和你的感受相同。这个定义,以及类似的权威定义,都高度抽象。用一两句话确实很难把握好软件配置管理这个概念,需要更多的描述才能把它说清楚。事实上,这一整本书,就是在认识和理解软件配置管理。而在这一章中,我们将用一些我们相对熟悉的概念来打比方、做对比,来讲解软件配置管理这个概念。通过这样一种方式,让大家对软件配置管理有一个虽然初步但比较正确的认识。

1.2 有那么一类管理

管理是个很宽泛的话题。大到管理企业、组织生产、治理河川、治国平天下,小到制定周末出游计划、整理通讯录、清理垃圾文件。在这里我们可不是要讨论这么多的事情。我们来重点看看下面这几个:

库房管理

库房管理员小张关心仓库里存放了哪些东西,分门别类放在哪儿,每样有多少个,何时存进来的,谁存进来的,何时提走,谁提走的(提走时要有出库单才行)。

财务会计

小王负责会计出纳工作,她要把公司的各项费用和各项收入分类记录在各种财务表格中,并进行统计。除了记录之外,她要确保合乎规定的票据才能在她这里报销。

资料保管

小李是总工程师办公室的一名秘书,她负责公司所有工程项目资料的统一保存。基本方法是,按照项目分门别类地保存;对每份资料编号;记录收录、出借、归还情况。

图书借阅

小赵在图书馆工作。在进新书时,她要把书籍编号,并分门别类放在合适的地方。更多的工作是书籍借阅和归还的管理,要记录借阅和归还的情况,还要保证借阅和归还符合流程规定。

上面列举的管理工作,有一些共同特点。首先,它们都是要管理某种资产:可能是物资,可能是钱财,或者信息类的资产。

其次,它们都在做一些关于存放和记录的事情:分门别类存放在合适的地方;记录当前的情况,保存形成历史记录;记录“进进出出”的情况;做统计,做汇报,并在“用户”查询时提供数据。

最后,除了被动的记录外,还要做一些控制性的工作,把好关,按流程规定来,以免出乱子,损害了管理的对象。

软件配置管理也是这样。首先,软件配置管理是关于软件资产的管理。什么是软件资产呢?源代码、设计文档等文档、可以运行的程序、自动测试脚本、编译器等工具和环境……所有在软件研发过程中使用的或产生的,有价值的值得保存的东西,都是软件资产。软件配置管理就是关于这些内容的管理。

其次,软件配置管理要管理软件资产的存放和记录。把软件资产——主要是源代码,放在合适的目录结构里,放在合适的地方存储,防止丢失或者弄乱。还要记录谁“借”出了什么文件,什么时候“还”的。在这一“借”一“还”的过程中,如果开发人员修改了它,软件配置管理就要记录下这些修改。软件配置管理关心:这个文件的各个历史版本是否记录下来了,以便今后翻阅;各次修改的修改者、修改的原因是否记录下来了,以便将来可以理解当时的情形,理解为什么做出这样的改动。

最后,软件配置管理也要做一些控制性的工作。比如,两个人同时修改同一个文件的时候,可能会导致其中一个人的改动丢失,也就是常说的版本覆盖。要做一些控制性的工作防止这样的事情发生,可以让他们一个改完了另一个再改,也可以让他们同时改,将来再合并。再如,有的开发团队规定:只有通过同行评审和单元测试的源代码修改才能提交给集成工程师;集成工程师必须在源代码通过编译链接和粗略测试时,才可以发版本。

这么看来,软件配置管理就属于“这一类”管理。当然,软件配置管理也有它自己的一些特点。比较重要的一点是,软件资产在不断变化,不断演进。项目初始的时候,可能只有一份简单的项目计划,而项目结束时,已是可以交付给用户的产品。如果缩小视野,单就某个源代码文件来看,也会看到,通常它会在项目的某个时刻,由某个开发人员创建第一个版本,然后,可能有不同的开发人员不断修改它,产生新的版本。软件配置管理就是围绕着这些事情展开管理的。

所以说,软件配置管理是关于不断演进的软件资产的管理,这主要包括两个方面:一是合理的存放和记录,二是对资产的变化加以流程上的控制。

1.3 为什么称做配置管理

机器由零部件组成。例如,汽车一般由底盘、发动机、车身和电器设备四大部分组成。其中,汽车底盘一般包括传动系、转向系、制动系和行驶系。传动系主要由离合器、变速器、传动轴和减速器等部件组成。再往下分析,基本就是零件了。

机器由正确型号的零部件配置而成。每个零件都有型号、编号,零件组成的部件也有,一直到整个机器,一辆汽车。要保证制造出来的机器是好用的,就要保证选取的零部件型号正确。那么,容易想到——应该有某种列表或文档,标明各零部件型号和组成关系,也就是说,要标明配置信息。而当配置有变动的时候,要更新这样的列表或文档。并且,这种变动不能随随便便,是否应该先让总工程师批准?是否应该做相应的测试?这些都属于对配置的管理。

从软件配置管理的视角看,软件也是这么配置出来的。往小了说,各个源代码文件的正确版本配置在一起,编译产生了正确的可运行的程序。往大了说,若干软件组件的特定版本,配置构成了特定的软件产品。而有些软件组件,可能参与了不止一个软件产品的配置构成。而当某个软件组件参与不止一个软件产品的配置构成的时候,可能是这个软件组件的同一个版本,也可能是不同版本。看,问题有多复杂,不管理怎么行!

配置管理,管理系统的配置:硬件配置管理,管理硬件系统的配置;软件配置管理,管理软件系统的配置。注意这里的“系统”这个词。配置管理要管理每个零件,每个源代码文件,但管理的根本目的是保证它们能够组成一个可运行的系统。说得专业一点,那就是,配置管理关注系统的集成(Integration),或者说,关注系统的完整性(Integrity)。这是配置管理的一个重要特点。

此外,如何复用(Reuse)开发成果,让不同的版本、相似的产品之间共同的部分只开发一次,让众多项目能够多快好省地完成,也是配置管理关注的重点。这常常需要综合运用分支、设置、组件组合等方法。除了软件复用,多地点协同开发、与第三方的合作等,也都需要配置管理的支持。

做好软件配置管理,与做好硬件的配置管理相比,要更难一些。这是因为软件配置管理的特殊性。

第一,软件更容易发生变化,版本更多。一个开发人员,修改一个Bug,可能半个小时就搞定了。于是,半个小时前与半个小时后,已经是不同的版本了。更何况,不止一个开发人员在工作。如此快速的、众多的变化,如果靠一个书记员手工记录相关信息,那恐怕比较累,所以需要某种自动化的工具,以提供这方面的支持。另一方面,在如此快速的、众多的变化中,还要保持系统的完整性,显然它的挑战也更大。

第二,软件的耦合性更高。当开发人员为某个任务改动源代码的时候,经常要改动不止一个文件。在目录结构上,这些文件可能相距遥远。组件/模块间的接口,往往并不像把鼠标线插到USB接口那么简单。某个模块的变化,常会影响到相关模块 。这个特点,使得在软件领域,需要格外关心系统的完整性。要尽可能早、尽可能频繁地集成,保证产品作为整体是可以运行的。另一方面,一个模块、一个源文件可能被几个开发人员改动,他们可能出于不同的目的,改动不同的位置,甚至相同的位置。因此,版本更容易混乱或相互覆盖。

做好软件配置管理不容易。软件配置管理相关的工具,比如源代码版本控制工具等,可以提供支持,提供便利,同时避免出现问题。引入工具很重要,而用好工具,配合合适的流程和策略,以支持特定研发组织的具体研发场景,则更为重要。

1.4 其他一些比喻

保险柜

软件配置管理为软件开发提供了一个保险柜。保险柜里,存的都是值钱的东西。存进保险柜,是因为怕自己不小心弄丢,或者被偷走。软件资产也一样,甚至比金戒指之类更值钱。软件资产也会丢失,特别是源代码。比如,一个软件项目完成后,如果没有进行存储/归档等工作,等再过几个月,想基于版本1.0开发版本2.0的时候,可能会发现1.0的源代码找不着了……无奈,只好从头写。这是自己不小心弄丢的情况。软件资产还有可能被窃取或泄漏。虎视眈眈的竞争对手,无孔不入的商业间谍……所以,一定要把软件资产放进类似保险柜的地方。

岩钉

这是来自攀岩者的经验。系上保险绳,每向上攀一小段,就在岩壁上打个岩钉。这样,即使偶尔失手,也不会从半山坠到谷底,只是向下滑一小段。软件开发也是一样,适当保存历史版本,可以在失手的时候回退到上一个安全的地方。这里的版本,不仅仅指某个具体文件的版本,也指整个产品的版本。不仅指源文件,也包括需求、设计、测试用例……当我们关心软件产品的部署和运行情况时,版本还意味着——某个软件,上次安装的是第几版,这次升级到哪个版本,如果升级失败,应该回退到哪一个版本。

脚印

“一步一个脚印”有两层含义。首先,先走好这一步,踩实了,踩稳了,再走下一步。软件研发也是这样,需要基线,需要里程碑,需要每个迭代结束时,向内部或外部的发布。这些是项目的脚印。在每个脚印处,我们要认真检查,是不是踩实踩稳了。这可能是通过相关人员的评审,领导的审批,可能是通过软件测试,也可能是通过某些检查。

其次,一个个的脚印,就构成了足迹。它告诉我们是如何一路走来的,走的是哪条路。必要的时候,我们可能会回顾。还有可能,我们会回到半路,以便从那里再闯一条新路出去。对应到软件开发,我们就是要保存历史上的版本,以备不时之需。

好了好了,据说所有的类比和比喻都是蹩脚的。软件配置管理是什么?软件配置管理就是软件配置管理。如果再多说一些,那就是,它是关于不断演进的软件资产的管理。这主要包括两个方面:合理的存放和记录,适当的控制;它特别关注软件系统的集成。让我们在随后的章节里,更细致地学习和研究吧! nFa6XLJSiIJarywcXBYC229Jg0kzWVGlnXIZYD1xT7bx2ljCxSjQhiawGSeCrRpJ

点击中间区域
呼出菜单
上一章
目录
下一章
×