1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,软件配置管理,康子烨,1,软件配置管理,基本的版本控制,系统集成,构建管理,分支,变体,三库管理的概念,2,什么是软件配置管理,软件配置管理的一些比喻,缺乏管理所造成的问题,3,什么是软件配置管理,一套应用技术上和管理上的指导和监督方法,用来:识别和记录配置项的功能特征和物理特征;控制这些特征的变更;记录和报告变更的处理和执行的状态;以及验证其是否特定的需求。,一个权威定义,(被,CMM,、,CMMI,引用),4,软件配置管理的一些比喻,图书管理,(在一借一还的过程中都需要记录),保险柜,(软件资产可能丢失
2、被窃取和泄露,,特别是源代码,),岩钉,(适当保存历史版本,,所有的一切软件资产都可以保存,),5,缺乏管理所造成的问题,软件开发人员之间缺乏必要的交流,产品升级和维护所必需的程序和文档非常混乱,开发过程中的人员流动经常发生,因管理不善致使未经测试的软件加入到产品中,项目开发状态不清楚,软件生产达不到规模化,6,软件配置管理,基本的版本控制,系统集成,构建管理,分支,变体,三库管理的概念,7,基本的版本控制,基线,8,版本管理,主要是建立一个公共存储区,记录版本,防止版本覆盖,防止版本混乱。,版本管理是配置管理里重要的一项环节。,9,在软件开发中会遇到一些非常棘手的问题,比如,需要将整个软件
3、版本恢复到以前的某一时间的状态;控制某个程序在同一时间只能被一个程序员修改等等。这时就需要使用版本控制软件进行管理了。版本控制软件可以将某一程序恢复到以前的某一时间的状态,甚至将整个软件版本恢复到以前的某一时间的状态。也能够实现某一程序在同一时间只能一个开发人员修改,还可以配制成允许多人修改,最后将不同版本合并为新版本。,10,基本的版本控制,假设每个程序员负责一个专门模块,不存在两个程序员修改同一处源代码的问题。,在修改程序之前,从哪里拿到最新版本?,(程序员可能基于过时的程序开始自己的工作),在修改程序之后,把修改结果提交到那?,(程序员的工作可能被湮没),11,解决之道,将源代码流转的渠
4、道从网状结构(图,1,)改成星星结构(图,2,),也就是设立一个公共储区,作为参照物和枢纽,大家统一从这个公共点取代码,的轩昂程序改完后,都把自己改的那部分全部传到公共存储区,别人再从那里取用。,图,1,图,2,12,假设两个程序员同时修改同一源代码,会出现程序覆盖问题。(即后提交的代码,B,会把先提交的代码,A,覆盖),监控。,阻止同时修改的事情发生。,串行方法,辅助。,使同时修改的内容合并到一起。,并行方法,串行方法,并行方法,13,版本控制软件还可以对程序修改进行有效的管理,将开发环境、测试环境、运行环境进行有效的隔离。我们还可以在版本控制软件中存放软件开发过程中成成的各种文档,以供随时
5、查阅。,14,如何表达版本的质量状态,在版本号中,添加状态标记(常用方法)。有两个弱点:,1.,在版本库中,标签不一定能重新命名。,2.,改变标签名称,以及改变安装包的名称,可能会引起混乱。,版本本身可以自带些属性。当质量状态提升时,不必改版本名称,只需改版本的质量状态属性。,用不同的目录,来区分不同质量状态下源代码的整体版本或安装包。,基线是有质量状态的。当探测到源代码质量状态到达了更新程度的时候,做一个基线提升。,15,基线,被明显的标记和记录下来的源代码整体版本。(即整体复制),在每个文件的特定版本上打标签来完成。,基线的权限,只读,16,软件配置管理,基本的版本控制,系统集成,构建管理
6、分支,变体,三库管理的概念,17,什么是系统集成,系统集成的步骤,18,系统集成,系统集成,简称集成,是基本的使命就是把产品的各个部分捏在一起,并保证产品作为整体是可以运转的,而不仅是每个模块,每个单元能在特定的开发调试环境、特定的数据和参数下运转。,19,视角,1,:集成的,不是模块,而是工作。每个任务单元可能在一个模块上修改,也可能涉及多个模块。,视角,2,:不再把产品的各个模块合到一起,而是把产品的改变合到一起,和在已有的版本上,产生新的版本,所集成的是任何单元,是变更。,+,=,新的整体版本,源代码整体版本,多个任务单元,集成的含义,多层集成,20,集成的步骤,确保开发人员都提交了相
7、关的源代码。,冻结或者标识将要集成的源代码。,(比如:禁止开发人员向版本库的提交),取出要集成的源代码。,(,最好放在一个全新的工作空间),编译、链接和打安装包。,(通常称为构建),安装并粗略测试。,表示和储备集成成果。,(集成结果有两个:,1.,源代码的整体版本,2.,生成安装包),通知相关人员本次集成完成。,(,还应告知集成成员的名称和存储内容),如有问题,修改了源代码,就从头再来。,21,软件配置管理,基本的版本控制,系统集成,构建管理,分支,变体,三库管理的概念,22,什么是构建管理,构建管理分为两部分,保证构建的可重复性,如何让构建更快,安装包有没有必要保存,安装包如何保存,23,构
8、建管理,构建:从源代码生产出安装包的过程。,一般包括:编译源代码;链接编译结果;产生可以运行的程序;把所有对客户有用的东西都打包。,构建的输入,是产品的全部源文件,可能还有文档、数据等。,构建的输出,通常是安装包。,24,是从每一个源文件的编译开始,不借助于以往构建中留下的已有的或许可以重复使用的结果。,(通常系统集成,集成工程师所做的构建是全量构建,),是尽可能的利用上次构建的成果。,(这是一个省时间偷懒的方法),构建分为,全量构建,增量构建,正确、准确,快速,25,保证构建的可重复性,原材料是固定明确的,工具是固定明确的,参数设置是固定明确的,生产过程是固定明确的,(或是尽可能的文档化构建
9、过程),如何让构建更快,自动化,提高硬件性能,提高专一性,(,尽量减少在同一台服务器上同时运行的构建任务单元的数量),把构建任务分解,并行完成,(要实现分布式构建,其软件实现难度则大了很多,可能需要一些高端软件的支持),26,安装包有没有必要保存?,通常是必要的,因为这样可以在需要它的时候能够迅速准确的得到这个安装包。,如果将它删除,在将来需要它的时候,还要找历史上的源代码,现从源代码开始编译、打包,那么会耗费时间。,27,安装包如何保存?,放进版本库不是明智之举。对于安装包,很多历史版本,比如送去测试用的安装包,需要定期清理,否则会占用大量的磁盘空间。安装包可以保存在共享目录下,该目录可以在
10、局域网共享,除此之外,还要考虑适当的备份。,28,软件配置管理,基本的版本控制,系统集成,构建管理,分支,变体,三库管理的概念,29,什么是分支,分支与工作空间的对比,流,集中精力于主线的演进,分支管理要注意的事项,30,分支,主线又被称为主干,是一种特殊的分支。,合并是某种复制行为,不是复制版本本身,而是复制版本之间的差异。合并不会影响原分支的。,31,分支与工作空间的对比,分支可同时容纳多个已提交的任务单元,并以此和其他分之区别。,分支存储在服务器上比工作空间存储在本地安全。,分支是所有人都能看到,若有必要,所有人都能在上边工作;工作空间是单个开发人员自己的地盘,只有自己才能在上面工作。,
11、分支不能改变其起始点,工作空间可以改变,弱 势:,优势:,32,兼具分支和工作空间的优势流,流的三种含义,流是起始点可改变的产品级的,“,分支,”,。,流的起始点可以设置为产品的某个整体版本。,流可以设置为另外的某个流的末端。,33,分支不能长期存在,把分支缩短,在每一次组内集成,就合并到主线,并关闭该分支,重新建立新的分支,来吸收下一次组内集成的内容。,主线始终是开发的主流。,34,A,主线,B,长期隔离导致集成困难,主线,A3,B3,A1,B1,B2,A2,短分支经常集成,35,为特定用户,进行单独立项,进行特定开发的解决方法。,改变版本结构,要集中精力在主线演进,集中精力开发一个产品,从
12、主线出发,有每个分支上,主要关注用户的特殊需求。,36,主线,鲢,鲈,鲑,魭,鲤,鳗,鲂,鲐,鲟,鲫,鳝,鲆,1.0,版,3.0,版,2.0,版,主线产鱼法,鱼的裂变,魭,鲐,鲂,鲆,鳝,鳗,鲫,鲤,鲟,鲑,鲈,鲢,37,分支管理要注意的事项,每条分支的目的和用途,必须明确,并且分支要有合适的名字。,分支要规划确定相关角色和权限,要注意全盘考虑,看版本树的整体图景。,38,软件配置管理,基本的版本控制,系统集成,构建管理,分支,变体,三库管理的概念,39,什么是变体,产生变体的原因,用分支支持变体,支持分支的多种方法,(组件复用),避免变体的方法,减少变体的成本,40,变体,变体是指一些软件产
13、品,他们彼此有些相同之处,但彼此有有所区别。,产生变体的原因:,因支持不同操作系统而产生的变体。,因客户制定而成的变体。,因不同的功能集而产生变体。,41,用分支支持变体,假定,基于标准版,1.0,版,开发,1.0,A,版。这是为客户,A,专门制定的一个版本,里边增加了了一个只有客户,A,才需要的功能:点石成金。,假定,在推出标准版,2.0,版后,客户,A,请求将,1.0,A,版升级到,2.0,A,版。既保留点石成金功能的同时,去掉,1.0,版里发现的缺陷,添上,2.0,标准版里新增加的功能。这时候怎么处理?,主线,1.0A,1.0,版,1.0A,版,变体(简单情况),42,用分支支持变体,把
14、主线上所有的修改都复制到分支上,集成测试,并作适当调整,确保不影响分支上的特殊功能。,弱势,:,可能引入的代码修改太多,很难做到这一点。,主线,A,1.0,版,2.0,版,1.0A,版,2.0A,版,提升变体版本(方法 一),43,用分支支持变体,不把主线上的内容合并到分支上,而是创建新的分支,把原有分支上的内容复制过来。(对于分支合并引入的代码修改进行浏览和审查就会容易得多。),弱势:,如果需要频繁的拿到标准版最新版本里的内容,那么需要建很多分支。,如果变体与标准版的差距较大,对应的源代码修改也很大。,主线,1.0,版,2.0,版,提升变体版本(方法 二),1.0A,1.0A,版,2.0A,
15、2.0A,版,44,支持分支的多种方法,完全独立开发,可以有效的保证遍体之间的隔离,但是无法支持变体之间的共享。,常用的改进方法:,从某一点开始,独立出来,从此分道扬镳。在这一点之前,所积累的软件资产,就变成变体之间共享了。但随后的改动,只能通过手工的方法,在不同的变体或变体与主流间传播。,45,支持分支的多种方法,使用分支,能有效的实现隔离,也实现共享。,弱势:,分支是有管理成本的。如果变体所在的分支上,包含了一些应该共享的改动,那么应合并到主干上。这样的话,相应管理成本也会提高。,46,支持分支的多种方法,使用文件属性,在一定程度上实现了隔离,但并不完全。在降低共享的成本同时,削弱了隔离。
16、共享又不总是能够自动传播。需要手动修改其他变体的相关文件,才能实现这个功能改动。,47,支持分支的多种方法,使用不同的,Makefile,与使用文件属性一样,在一定程度上实现隔离,共享又不总是能够自动传播。,比使用文件属性好的地方是,,程序员能够同时看到不同变体所需的源文件。,(要注意对,Makefile,本身的维护),48,支持分支的多种方法,使用宏定义,宏和,Makefile,的方法差不多,都是有选择的选择源代码进行编译,不同的是:,Makefile,只能区分到文件夹;宏可以区分到源文件。,弱点:,宏是写在源代码里,遍体多的话,结构就会复杂,难以维护。,并非所有编程语言都支持宏。,49,
17、支持分支的多种方法,组件复用,把系统分解为组件,系统由不同的组件构成,每个组件,可能多次参与不同系统的构成。,组件有三种:源代码组件、运行组件、库组件。,50,组件复用,引用组件复用后,软件配置管理还要额外关注的事情。,加强对公共组件的变更管理。,为公共组件的开发提供环境支持。,共享多个系统中对公共组件的修改。,应对多个系统的系统总体集成中的问题。,51,避免变体的方法,聪明的拒接个别客户提出的要求。,在标准版本里,实现客户的要求。,安装软件时,特定用户只安装特定的组件。,通过软件运行时的配置、设置,实现不同外观和功能等。,52,减少变体的成本,对变体仅提供有限的支持服务,特别是支持服务。,减
18、少变体与标准版本之间的差异。,53,软件配置管理,基本的版本控制,系统集成,构建管理,分支,变体,三库管理的概念,54,开发库,受控库,静态库,55,开发库管理的概念,开发库可以大致反映为开发工程师的个人工作空间,在开发工程师本机上,个人目录下。当然,对于稍大的任务,也可以映射为存储库里的一个任务分支。,56,受控库管理的概念,受控库则是开发工程师相互协作、交流最新工作成果的地方。大致上,可以映射为版本控制工具的存储库。这里,可能有不同的分支,/,目录做不同的用途,可能会打标签、基线。,57,静态库管理的概念,静态库,有称基线库,是指那些重要的基线,这些基线标志着项目的重要里程碑,或者这些基线被发布给了,“,外界,”,。在比较简单的版本控制工具里,一般可以用特定标签命名规范来把它们从其他标签、基线中区别出来;而在比较复杂的版本控制工具里,也可以用基线,/,标签的质量级别来表达。,58,谢谢!,59,






