当前课程知识点:软件工程 > 第6章 敏捷开发与配置管理 > 6.4 配置管理 > 讲课视频
软件开发过程中
经常需要修改代码
大家是否遇到过下面的问题
有的时候代码改乱了
想要返回到之前的某个版本
但是却没有保存
调试了半天代码
最后发现 问题的原因
是代码的版本不对
在没有经过允许的情况下
开发人员擅自修改了代码
结果造成系统出现新的问题
由于代码管理比较混乱
在人员流动时
发现有的代码并没有交接
在维护过程中
可能需要重新编译某个历史版本
但是因为缺少原有的开发工具
或者运行环境
造成无法重新编译
在协同工作过程中
代码修改混乱
比如说
自己新改好的代码
又被别人覆盖为旧的版本
软件项目开发过程
面临的一个主要问题
就是持续不断地变化
变化可以导致开发的混乱
软件配置管理
就是用于管理和控制
变化的有效手段
软件配置管理是一种标识
组织和控制修改的技术
它的目的是使错误达到最小
并且能够有效地提高开发效率
软件配置管理的作用
是记录软件产品的演化过程
确保开发人员
在软件生命周期的每个阶段
都可以获得精确地产品配置
最终保证软件产品的完整性
一致性和可追溯性
下面我们来介绍
软件配置管理的相关概念
软件配置项
是软件配置管理的对象
它是可以作为单独实体来处理的
一个工作产品或者软件
常见的软件配置项
包括文档数据 源代码和目标代码
还有一些构造软件的工具
和运行环境
也常常列入配置管理的范围
版本是在明确定义的时间点上
某个配置项的状态
版本管理
是软件配置管理的核心内容
它是对系统的不同版本
进行标识和跟踪的过程
从而保证
软件技术状态的一致性
一个配置项
比如说某一个源程序文件
可以有一个主干版本
像1.0 1.1 1.2 2.0等
也可以从某一个版本的状态
产生若干个分支
分支版本也可以合并到主干上面
基线
是软件配置项的一个稳定版本
它是进一步开发的基础
成为基线的配置项
只有通过正式地变更控制过程
才能修改
在迭代开发过程中
一次迭代包括了计划
需求 设计 实现 测试
等不同的阶段
基线一般是标志着
一个开发阶段的结束
比如说
需求文档经过正式评审之后
就成为一个基线
形成基线的文档
需要经过变更申请和批准之后
才能修改
在一次迭代结束后
就形成一个软件开发的里程碑
在软件开发过程中
程序员修改代码
可能会出现两种情况
第一种情况
每个程序员各自负责不同的模块
但是他们对源程序文件的修改
完全不存在交集
这个时候
每一个人都可以直接从代码库
读取文件
修改之后再存入代码库中
第二种情况
可能有两个程序员
同时修改同一个代码文件
这个时候
就会出现代码覆盖的问题
比如说Joe和Jane
从代码库中
都读取了同一个文件
然后分别进行修改
Joe先修改完
并且把修改的程序文件
存入代码库中
等Jane修改完存入的时候
如果不加控制
就会意外地覆盖了
Joe原来改过的部分
解决这种问题
有两种不同的方法
第一种是独占工作模式
就是一个程序员
在修改代码时
将独自占有代码文件
不允许其他程序员修改
当Joe读取文件之后
系统会对文件进行锁定
这个时候
如果Jane想修改文件
系统就不允许锁定的文件
再被修改
在Joe修改完成之后
把文件写入到代码库中
系统会对其进行解锁
这个时候
Jane才可以从代码库中
获取最新版本进行修改
系统会再进行加锁控制
第二种方法是并行工作模式
它支持多个人共同修改
同一个文件
首先
Joe和Jane同时读取一个文件
然后分别开始编辑文件
Joe先修改完之后
把文件写入代码库中
这个时候Jane再写入文件时
系统就会提示
文件的版本已经被更新
Jane需要将
代码库里的最新文件取出来
和自己的文件进行比较
然后把自己的修改合并进去
Jane将合并后的文件
写入代码库中
之后再从代码库读取的文件
就是合并后的新的版本
代码分支
是支持软件并行开发的常用机制
它实现了一个项目的文件树
及其发展历史
首先 代码库应该有一个
而且只有一个主分支
所有提供给用户使用的正式版本
都在主分支上发布
主分支只用来发布重大的版本
日常的开发
应该在另外的分支上完成
如果开发分支上的文件
需要正式对外发布
就在主分支上
对开发的分支进行合并
除了主干和日常开发分支之外
还有一些临时性的分支
用于应对一些
特定目的的版本开发
比如说
功能分支或者缺陷修复的分支等
需要注意的是
每一个分支的目的和用途
都要明确
运用分支可以实现
多人并行开发一个新的系统
同步地更改
多个并行版本的错误
以及同时集成和发布多个版本
软件配置管理
有很多成熟的工具
像IBM公司的ClearCase
微软公司的Sourcesafe
还有一些开源的工具
其中SVN和Git是两种流行的
开源版本控制工具
Git是一个
开源的分布式版本控制系统
具有处理速度快
分支和合并表现出色的特点
Github是一个
基于Git的开源项目托管库
目前已经成为全球最大的
开源社交编程
以及代码托管网站
在这门课中
我们推荐大家学习和掌握
Git工具
学会在Github上管理自己的代码
-1.1 软件无处不在
--讲课视频
-1.2 软件的本质特性
--讲授视频
-1.3 软件工程的产生与发展
--讲授视频
-1.4 软件工程的基本概念
--讲授视频
-1.5 软件质量实现
--讲授视频
-1.6 业界人士谈软件工程
-测验题--作业
-讨论题
--讨论题
-作业题
--第一张 作业题
-2.1 编程过程与规范
--讲课视频
-2.2 良好的编程实践
--讲课视频
-2.3 Python集成开发环境
--讲课视频
-2.4 代码静态检查
--讲课视频
-2.5 代码性能分析
--讲课视频
-2.6 结对编程实践
--讲课视频
-2.7 刘贺谈软件工程
--讲课视频
--讨论
-测验题--作业
-作业题
--第二章 作业题
-3.1 单元测试概述
--讲课视频
-3.2 黑盒测试方法
--黑盒测试方法
-3.3 白盒测试方法
--基本概念
--代码覆盖标准
--基本路径测试
-3.4 单元测试工具
--单元测试工具
--html
-测验题--作业
-作业题
--第三章 作业题
--作业题附件
-4.1 软件过程
--讲课视频
-4.2 软件过程模型
--讲课视频
-4.3 敏捷开发过程
--讲课视频
-4.4 微软公司开发过程
--邹欣经理自我介绍
--微软开发过程之一
--微软开发过程之二
-测验题--作业
-5.1 团队组织与管理
--讲课视频
-5.2 项目沟通管理
--讲课视频
-5.3 软件项目计划
--讲课视频
-5.4 软件项目估算
--讲课视频
-测验题--作业
-讨论题
--讨论
-6.1 敏捷开发之Scrum
-- 敏捷开发之Scrum
--html
-6.2 用户故事与估算
--讲课视频
-6.3 团队协作工具Tower
-6.4 配置管理
--讲课视频
-6.5 配置管理工具Git
--讲课视频
-测验题--作业
-作业题--作业
-7.1 需求工程师
--讲课视频
-7.2 需求定义
--讲课视频
-7.3 需求的类型
--讲课视频
--讲课视频(2)
-7.4 需求工程过程
--讲课视频
-7.5 需求的主要来源
--讲课视频
-7.6 需求获取技术
--讲课视频
--讲课视频二
--讲课视频三
-7.7 撰写需求文档
--讲课视频
-测验题--作业
-讨论题
--讨论
-8.1 用例建模概念
--讲课视频
-8.2 用例建模过程
--讲课视频
-8.3 用例建模精讲
--讲课视频
-8.4 建模工具介绍
--讲课视频
-8.5 微信抢票应用案例
--讲课视频
-测验题--作业
-讨论题
--讨论
-9.1 面向对象分析
--讲课视频
-9.2 CRC卡片分拣法
--讲课视频-1
--讲课视频-2
-9.3 面向对象设计
--讲课视频-1
--讲课视频-2
-9.4 类图建模
--讲课视频-1
--讲课视频-2
-第9章 面向对象分析与设计--测验题
-讨论题
--讨论
-10.1 顺序图概念
--讲课视频
-10.2 顺序图建模
--讲课视频
-10.3 顺序图风格
--讲义视频
-10.4 状态建模
--讲课视频
-10.5 状态图
--讲课视频
-10.6 状态图精讲
--讲义视频
-测验题--作业
-讨论题
--讨论
-11.1 软件体系结构概念
--讲授视频
-11.2 软件设计原则
--讲授视频
-11.3 软件体系结构风格(一)
--讲授视频
-11.4 软件体系结构风格(二)
--讲授视频
-11.5 软件体系结构风格(三)
--讲授视频
-11.6 软件设计过程
--讲授视频
-11.7 Web系统架构设计
--讲授视频
-11.8 数据库选择策略
--讲授视频
-测验题--作业
-作业题
--html
--html
--html
-作业题--作业
-12.1 交互设计概述
--讲授视频
-12.2 交互设计目标
--讲授视频
-12.3 GUI设计原则
--讲课视频
-12.4 KLM效率模型
--Video
-12.5 Fitts定律
--讲授视频
-12.6 交互设计过程
--讲授视频
-测验题--作业
-13.1 软件测试概念
--讲课视频
-13.2 软件测试类型
--讲课视频
-13.3 软件功能测试
--讲课视频
-13.4 软件性能测试
--讲课视频
-测验题--作业
-14.1 软件部署与交付
--讲课视频
-14.2 软件演化与维护
--讲课视频
-测验题--作业
-第一部分:基础知识
-第二部分:编程与测试(选做)