软件项目管理概览----版本控制

随着软件项目规模的不断扩大,项目管理的作用变得越来越重要。如果一个需要长期维护的项目不能得到很好的管理与控制,“软件腐败”就会发生,用不了多久,我们的程序可能就会像一团拌好的炸酱面一样难以找到头绪,维护的成本也会不断增加。为了避免这种现象的发生,一方面我们需要对程序定时的进行重构,使其回到有序化的轨道上,另一方面需要良好的监控以及管理,使其尽可能长时间的保持“新鲜”而不至于腐败。

    随着技术的发展,新的管理技术以及管理理念不断涌现。版本控制、单元测试、以及项目自动化这三大技术现在已经成为很多软件项目赖以成功的基石。

    版本控制

    为什么要使用版本控制系统?

    Ø 给团队提供一个项目级别的撤销按钮

    Ø 记录着项目每时每刻的改动

    Ø 使得多个程序员可以有序的同时为一个项目写代码

    国内早期的版本管理多数使用Microsoft的Visual SourceSafe6.0简称VSS,使用这种管理方式多数是单线的管理方式,虽然VSS也提供一些分支与共享功能,但是它的性能低下,而且经常会出现问题,其可用性不高。其主要的版本管理模式如下图。

    图1:VSS中的代码仓库生命周期

 

    中间的方块显示了我们代码仓库的状态,在最开始只有一个主干(标准版)程序,我们把这个程序应用于项目1的时候,可能会发现一些新需求或者新BUG。然后我们在代码仓库上进行修改,把这些改动签入了版本库,这时我们的标准版仍有可能在改动,程序员可能会为标准版添加一些新特性(用*表示改动了),这就意味着版本可能出于一种不稳定的状态,新特性可能短时间内不能达到可以发布的状态,这时给项目1的团队更新程序(即发布新版本)时就要把这些不稳定的新特性代码过滤掉,再进行发布,当多个项目同时使用这个代码仓库时,会造成了一个目录中实际叠加了多个项目的代码。这是这种早期版本控制方式的主要缺陷。在VSS之后出现的CVS(Concurrent Version System)软件统治了版本管理领域相当长一段时间,CVS针对VSS存在的问题做出了一定的改善,但是仍不能满足需求。最终Subversion(简称SVN)出现了,总结了CVS的长处,改进了不足,力图成为CVS的接班人,它也的确做到了。现在几乎主流的开源组织,以及提供网上代码仓库的网站都在使用Subversion,他们包括鼎鼎大名的Apache Software Foundation、Google Code、SourceForge.net等Subversion中分支是非常重要的概念。Subversion认为:开发者应该使用分支把与主线开发(标准版开发)具有不同生命周期的代码(如各项目的发布版)从主线中分离出去。Subversion中项目具有如下的结构。

    图2:Subversion中代码仓库的生命周期

 

    程序员们在主干目录上进行开发。当代码已经处于比较完善的状态时,决定发布它并在项目1中使用。这时我们应该在分支目录中为主干目录创建一个分支(在Subversion中即一个拷贝)并打上一个标签(如XX月XX日发货,打标签在Subversion中也是一个拷贝),然后项目1的工作组负责对这个分支进行维护,而主要的开发团队仍在主干上进行开发。这样主干和项目分支物理上处于不同的目录,各自有独立的生命周期,程序员对主干的标准版程序添加代码不会对项目1造成影响,项目1分支中的代码将会保持相对的稳定,对项目1的修改也可以有选择的转移到标准版中(这个转移混合的过程在Subversion中是非常容易实现)。各个版本不会互相混淆,随时可以取得各个发布版本。在Subversion中,分支主要用于发布、BUG修正、以及技术试验。除此之外Subversion还提供了很多很好的特性,如:

    1.所有的文件统一使用一个版本号,这样每一个版本号在项目生命周期代表一个切片,保留了一个一致性的快照。

    2.支持多人同时迁出一个文件,只要不同时修改同一行,Subversion都可以智能的进行合并,如果在同一行上存在冲突,Subversion会提示你解决他。你也可以锁定这个文件以避免其他人签出。

    3.一次提交不管是单个还是多个文件,都是作为一个整体提交的,在这当中发生的意外例如传输中断,不会引起数据库的不完整和数据损坏。

    Subversion的理念与VSS是不同的。使用VSS的感觉像套着沉重的枷锁,而Subversion更像是是一个轻巧的拐棍,帮助你将项目不同的版本管理的井井有条。

转载于:https://www.cnblogs.com/mideasoft/archive/2009/05/19/1459892.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式之原型

原型模式介绍完整拷贝原型模式主要解决的问题就是创建重复对象,而这部分对象内容本身比较复杂,生成过程可能从库或者RPC接口中获取数据的耗时较长,因此采用克隆的方式节省时间。原型模式是一种创建型设计模式,使你能够复制已有对象…

华为服务器停止响应,windows服务器停止工作

windows服务器停止工作 内容精选换一换无法通过远程桌面连接裸金属服务器时,我们推荐您按照以下思路排查问题。检查是否符合登录条件检查网络是否正常检查防火墙配置是否正常远程访问端口配置异常尝试重启裸金属服务器确认是否已经按照裸金属服务器登录前的准备工作…

专题1.1——Exchange2013部署前准备条件

本专题将主要介绍Exchange2013从部署前准备、正式部署到应用配置和维护的整个过程。博文是我在自己做测试的过程中自己编写的,如果大家有什么意见或问题也欢迎一起讨论交流。废话不多说,下面进入正题。本节将主要介绍部署Exchange2013之前需要准备的先决…

这些让人看瞎了的设计!实力证明,数学才是世界的最终boss!

全世界只有3.14 %的人关注了青少年数学之旅昨天小天刷微博,看到了一组动图,一时间我都不知道是我的眼睛出了错,还是我的大脑反应不过来。奇了怪了!怎么箭头反转了180后,还是原样!问题到底出在哪里&#xff…

你真的了解低代码平台吗?

从 2020 年疫情之后,低代码这个概念就突然变得火热起来,各大自媒体纷纷推出介绍低代码的文章,InfoQ 也曾发表过一篇《为什么我说低代码是“行业毒瘤”?》引发了热议,明道的创始人任向晖随后在自己的公众号写文章《低代…

图像还可以这样玩!如何用OpenCV处理图像?

全世界只有3.14 % 的人关注了青少年数学之旅人工智能近年来呈现爆发式发展,计算机视觉和深度学习作为人工智能的两大支柱学科,近年来得到迅速发展。今天小天将带着大家走进计算机视觉!所谓计算机视觉,就是指用摄影机和电脑代替人眼…

java集合学习笔记 ---Collections类对集合的处理

2019独角兽企业重金招聘Python工程师标准>>> 包名:java.util.CollectionsCollections是个类,不是接口有以下方法,部分列举1.对List进行升序排序public static void sort(List list)如果要进行降序排序,可以在sort函数中制定降序public static…

如何入门.NET Core ? 推荐这10个优秀的开源项目!

.NET 5马上就要发布了,还不知道这些.NET Core开源项目?只推荐干货!当然这些开源项目都是个人或组织开发的。1.Ant Design Blazor.NET进行客户端Web开发又一利器。微软官方认可,微软Build2020开发者大会Blazor介绍中,提…

.NET设计模式(7):创建型模式专题总结(Creational Pattern)

概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。本文对五种常用创建型模式进行了比较,通过一个游戏开发场景的例子来说该如何使用创建型模式。 为什么需要创建型模式 所…

ABP Vnext 4.4:统一Ef Core的DbContext/移除EF Core Migrations项目

Abp vnext 4.4出现了一个比较重大的变更:在Startup template中移除了EF Core Migrations项目,本文翻译自community.abp.io/articl由于本文发布的时候Abp vnext的版本还没有到4.4,所以本文演示了如何从4.4以前的版本移除EntityFrameworkCore.D…

史上最变态高考数学题,让99%的考生献上膝盖,看完我惊了......

全世界只有3.14 %的人关注了青少年数学之旅今天超模君想问大家一个问题:如果在撒哈拉大沙漠或者是西伯利亚上建造一个大型装置,以便向地球之外的其他星球的朋友们表明地球上存在有智慧的生命,最适当的装置是什么呢?勾股定理&#…

C#操作Excel文件暨C#实现在Excel中将连续多列相同数据项合并

C#操作Excel文件(读取Excel,写入Excel) 看到论坛里面不断有人提问关于读取excel和导入excel的相关问题。闲暇时间将我所知道的对excel的操作加以总结,现在共享大家,希望给大家能够给大家带了一定的帮助。另外我们还要注意一些简单的问题1.exc…

猪肉上的红章和蓝章有啥不同?| 今日趣图

全世界只有3.14 %的人关注了青少年数学之旅亲眼看到金字塔你才会意识到它有多大!(图源光消失的地方,侵权删)你女朋友的脸皮有多厚?(图源程序员新视界,侵权删)猪肉上的红章和蓝章有啥…

如何避免和人尬聊?

全世界只有3.14 %的人关注了青少年数学之旅想要和别人有聊不完的话题?当然是多读书多看新闻了解新鲜有趣的事物啦如果你没有时间去阅读那么关注以下公号将会让你收获更多信息~长按二维码,选择“识别图中二维码”订阅。▼看鉴ID:kanjian6666▲长按二维码“…

java 中的 io 系统总结

Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。 Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的…

在VS Code中执行SQL查询,是怎样一种体验?

上次,我们演示了“如何使用Nuget包XPlot.Plotly.Interactive在.NET Interactive notebook中绘制图表”。这次,我们使用Nuget包Microsoft.DotNet.Interactive.SqlServer演示在.NET Interactive notebook中如何和SQL Server交互。安装Nuget包首先&#xff…

UVA 11090 Going in Cycle!! 二分答案 + bellman-ford

求平均值最小的环&#xff0c;如果平均值最小为x&#xff0c;则如果把每条边的权值都减(x1)&#xff0c;那么新图将会有负环&#xff0c;用bellman ford判断。 //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstri…

大数据:数据合集,你想要的或许这里都有

大数据时代&#xff0c;用数据做出理性分析显然更为有力。做数据分析前&#xff0c;能够找到合适的的数据源是一件非常重要的事情&#xff0c;获取数据的方式有很多种&#xff0c;不必局限。下面将从公开的数据集、爬虫、数据采集工具、付费API等等介绍。给大家推荐一些能够用得…

MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN

在Membership系列的最后一篇引入了ASP.NET Identity&#xff0c;看到大家对它还是挺感兴趣的&#xff0c;于是来一篇详解登录原理的文章。本文会涉及到Claims-based&#xff08;基于声明&#xff09;的认证&#xff0c;我们会详细介绍什么是Claims-based认证&#xff0c;它与传…

一步一步SharePoint 2007之四十三:实现自定义Workflow(2)——设置配置文件

下面将记录每一步的操作过程。1、首先采用Reflector等工具找到上一篇文章编译后的DLL的Assembly信息。2、找到并打开C:\Inetpub\wwwroot\wss\VirtualDirectories\9001\web.config文件&#xff0c;在System.Workflow.ComponentModel.WorkflowCompiler节点下的authorizedTypes中&…