课件

6.4 配置管理.pdf

软件开发过程中经常需要修改代码,会遇到过下面的问题:

  • 有时代码改乱了,想要返回到之前的某个版本,但是却没有保存;
  • 调试了半天代码,最后发现问题的原因是代码的版本不对;
  • 在没有经过允许的情况下,开发人员擅自修改了代码,结果造成系统出现新的问题;
  • 由于代码管理比较混乱,在人员流动时发现有的代码并没有交接;
  • 在维护过程中可能需要重新编译某个历史版本,但是因为缺少原有的开发工具或者运行环境,造成无法重新编译;
  • 在协同工作过程中,代码修改混乱,比如自己新改好的代码又被别人覆盖为旧的版本;

关于软件配置管理

软件项目开发过程面临的一个主要问题就是持续不断地变化,变化可以导致开发的混乱,软件配置管理就是用于管理和控制变化的有效手段

软件配置管理是一种标识、组织和控制修改的技术,它的目的是使错误达到最小,并且能够有效地提高开发效率。

软件配置管理的作用是:

  • 记录软件产品的演化过程;
  • 确保开发人员在软件生命周期的每个阶段,都可以获得精确地产品配置;
  • 最终保证软件产品的完整性、一致性和可追溯性;

软件配置项

软件配置项(Software Configuration Item,简称 SCl)是软件配置管理的对象,是可以作为单独实体来处理的一个工作产品或软件。

常见的软件配置项包括文档数据、源代码和目标代码,还有一些构造软件的工具和运行环境,也常常列入配置管理的范围:
image.png

版本

版本是在明确定义的时间点上某个配置项的状态。版本管理是软件配置管理的核心内容,它是对系统的不同版本进行标识和跟踪的过程,从而保证软件技术状态的一致性。

一个配置项,比如说某一个源程序文件可以有一个主干版本,像 1.0、1.1、1.2、2.0 等,也可以从某一个版本的状态产生若干个分支,分支版本也可以合并到主干上面:
image.png

基线

基线(Baseline)是软件配置项的一个稳定版本,它是进一步开发的基础,成为基线的配置项只有通过正式地变更控制过程才能修改。

在迭代开发过程中,一次迭代包括了计划、需求、设计、实现、测试等不同的阶段,基线一般是标志着一个开发阶段的结束,比如需求文档经过正式评审之后就成为一个基线,形成基线的文档需要经过变更申请和批准之后才能修改:
image.png
在一次迭代结束后,就形成一个软件开发的里程碑。

版本控制问题

在软件开发过程中,程序员修改代码可能会出现两种情况:

第一种情况:
image.png
每个程序员各自负责不同的模块,但是他们对源程序文件的修改完全不存在交集,这时,每一个人都可以直接从代码库读取文件,修改之后再存入代码库中。

第二种情况:
image.png
可能有两个程序员同时修改同一个代码文件,这时,就会出现代码覆盖的问题。比如说 Joe 和 Jane 从代码库中都读取了同一个文件,然后分别进行修改,Joe 先修改完并且把修改的程序文件存入代码库中,等 Jane 修改完存入的时候,如果不加控制,就会意外地覆盖 Joe 原来改过的部分。

版本控制

解决上述版本控制问题,有下面两种不同的方法。

独占工作模式

第一种是独占工作模式,就是一个程序员在修改代码时将独自占有代码文件,不允许其他程序员修改。

image.png
当 Joe 读取文件之后,系统会对文件进行锁定,这时如果 Jane 想修改文件,系统就不允许锁定的文件再被修改。在 Joe 修改完成之后把文件写入到代码库中,系统会对其进行解锁,这时 Jane 才可以从代码库中获取最新版本进行修改,系统会再进行加锁控制。

并行工作模式

第二种方法是并行工作模式,它支持多个人共同修改同一个文件。

image.png
首先 Joe 和 Jane 同时读取一个文件,然后分别开始编辑文件。Joe 先修改完之后把文件写入代码库中,这时 Jane 再写入文件时,系统就会提示“文件的版本已经被更新”。

image.png
Jane 需要将代码库里的最新文件取出来和自己的文件进行比较,然后把自己的修改合并进去,Jane 将合并后的文件写入代码库中。之后两个程序员再从代码库读取的文件就是合并后的新的版本。

分支管理

代码分支是支持软件并行开发的常用机制,它实现了一个项目的文件树及其发展历史,记录了一个配置项的发展过程。

image.png
首先代码库应该有一个而且只有一个主分支,所有提供给用户使用的正式版本都在主分支上发布。

主分支只用来发布重大的版本,日常的开发应该在另外的分支上完成。

如果开发分支上的文件需要正式对外发布,就在主分支上对开发的分支进行合并。

除了主干和日常开发分支之外,还有一些临时性的分支,用于应对一些特定目的的版本开发。比如功能分支或者缺陷修复的分支等。

需要注意的是,每一个分支的目的和用途都要明确,运用分支可以实现多人并行开发一个新的系统,同步地更改多个并行版本的错误,以及同时集成和发布多个版本。

软件配置管理工具

软件配置管理有很多成熟的工具,像 IBM 公司的 ClearCase、微软公司的 Sourcesafe,还有一些开源的工具,其中 SVN 和 Gt 是两种流行的开源版本控制工具:
image.png

Git 是一个开源的分布式版本控制系统,它最初由 Linux Torvalds 编写,用作 Linux 内核代码的管理,后来在许多其他项目中取得很大的成功。除了常见的版本控制管理功能之外,还具有处理速度快、分支和合并表现出色的特点。

Github 是一个基于 Gt 的开源项目托管库,目前已经成为全球最大的开源社交编程以及代码托管网站,它可以托 管各种 Git 库,并提供一个 Web 界面。

本课程推荐大家学习和掌握 Git 工具,学会在 Github 上管理自己的代码。