【发布时间】:2009-01-29 21:02:56
【问题描述】:
您如何管理您的项目生命周期?
例如:您是否从模板开始?您是否使用 SVN 等版本控制作为权威来源?您是否归档项目,如果是,何时以及如何归档?当一个项目恢复(工作恢复)时,是如何处理的?您是否使用自动化脚本来执行诸如创建 IIS 站点、数据库、存档、启动等操作?
特别感兴趣的是管理处于不同开发阶段的许多项目。
【问题讨论】:
标签: version-control project-management
您如何管理您的项目生命周期?
例如:您是否从模板开始?您是否使用 SVN 等版本控制作为权威来源?您是否归档项目,如果是,何时以及如何归档?当一个项目恢复(工作恢复)时,是如何处理的?您是否使用自动化脚本来执行诸如创建 IIS 站点、数据库、存档、启动等操作?
特别感兴趣的是管理处于不同开发阶段的许多项目。
【问题讨论】:
标签: version-control project-management
开发:我们不是从模板开始的,因为世界变化太快,模板维护是一项全职工作。我们鼓励每个人使用相同的 IDE (Eclipse),以便他们可以在各自的环境中互相帮助。
项目管理:我们使用 GForge 来管理我们的项目。 Sourceforge 稍好一些,但 GForge 便宜得多,并且有不同的许可费模式。 GForge 整合了 CVS、SVN、文档存储、问题跟踪器并很好地集成了一切。这使得很容易看到项目的位置。开放的问题,以及连接代码更改的已关闭问题,一切都集成在一起。
版本控制:虽然我们尝试了 SVN,但我们还是切换回了 CVS,因为它更符合我们的需求并且运行良好。
备份:我们的 GForge 服务器(包含我们所有的项目和源代码)在 VMWare EX 服务器上运行。每天都会在虚拟机级别进行备份,如果我们觉得出于某种原因需要更频繁的还原点,我们会制作虚拟机快照。
重振项目:这在我们的业务中很常见。每个项目在 CVS 中都有它的所有库和构建需求。该项目始终有一个最新的开发手册,其中描述了运行开发环境的所有步骤,并有一章包含所有非默认内容,需要注意。我们尝试在尽可能默认的环境中构建软件,这样开发人员就不必花费数天时间来调整他们的设置。
几乎所有项目都是使用 Maven 构建的,这也为我们的开发人员提供了便利。通常,恢复一个项目只需要几个步骤:
构建:我们所有的项目都构建在单独的构建服务器上。每天早上,如果所有单元测试都成功,构建服务器会执行完整的构建并标记 CVS。白天,每小时构建一次,当出现故障时,团队会自动收到一封电子邮件。通常我们每个项目使用一个构建服务器,它是一个简单的 luntbuid 服务器(Linux、Tomcat、Luntbuild)。
构建服务器,有时甚至是开发人员机器都是虚拟机。这使得恢复项目非常容易。从文件服务器获取虚拟机,启动它,然后就可以开始了。
构建服务器创建每日站点,显示单元测试覆盖率统计、复杂性测量、CVS 活动和开发人员活动(谁更改了什么以及何时更改)。
我们所有的软件都内置了自建数据库脚本。将配置文件指向数据库,启动软件,它会弄清楚它需要对数据库本身做什么。这真的很方便,因为构建服务器可以启动软件。无需特殊步骤。我们的客户也很高兴,他们无需担心数据库或升级脚本。
在 GForge 中管理、记录和跟踪整个项目生命周期,并添加了一些用于预算跟踪的外部电子表格,因为这更容易。
不管你有没有集成的项目服务器,我认为有一个系统真的很重要。这使您能够在项目之间切换开发人员而不会迷路。它可以节省时间。尤其是当客户在 2 或 3 年后再次找您对旧软件进行修改时(是的,这种情况会发生)。
我们使用的所有东西都是开源的(您甚至可以使用 GForge 的开源分支)。它不在工具中,而在于你如何使用它们。
【讨论】:
这取决于工作的性质。在家为私人客户工作时,我首先为客户打开一个文件夹,里面有一堆我自定义的标准文档,例如合同、发票、报告、需求、测试、代码存储库等。随着项目的发展,我根据需要添加/修改目录。
如果我必须返回一个项目,我会重新打开该目录,并为任何非通用组件创建一个新目录。例如,如果我的客户构建了一个 Web 应用程序,现在他们需要第二个应用程序,我将使用相同的目录来存放发票和合同,并为代码库、需求和测试创建新目录。
在备份方面,我会在达到里程碑的任何时候存档工作,但我每天至少备份代码除外。在每个项目结束时,当我关闭合同时,我会取出整个目录并将其压缩并存储在远程服务器上。
【讨论】:
我创建包含项目阶段的文件夹,例如“初始化软件流程”,如果我们放置了诸如业务提案之类的文档,我们将另一个用于需求,另一个用于构建、发布、一个用于会议记录等等。
我们将它们保存在一个 subversion 存储库中,但这实际上取决于您使用的方法,还取决于您如何处理配置管理以及您想要的组织方式。是的,我们的大部分工件都使用模板,因此我们以某种方式保证了我们产品的质量。
【讨论】:
至于源代码,我们将其全部保存在 Subversion 存储库中。每次发布后,我们都会创建一个分支——新功能只添加到当前分支(下一个版本将基于该分支),关键错误修复在当前和旧分支中完成(因此我们可以为该版本提供修补程序客户目前拥有)。
对于属于某个版本的所有文档 - 从规划和资源表到我们创建的软件的规格、测试用例、用户和技术手册等 - 我们将它们存储在 Sharepoint 门户网站中.这个 Sharepoint 站点的优点是用户可以通过网站访问(因此无需授予对您的存储库的管理访问权限;-),您可以精细控制访问权限,并且可以打开版本控制。我们还使用标记来标记文档是否属于特定版本(例如 service pack xy)或产品,或者它是否普遍有效。
关于脚本,我们使用几个来执行,例如每晚构建加单元测试(我们通常在最后一个版本和当前版本中这样做),而且还在测试服务器上部署完整的软件解决方案(包括 IIS 站点创建、数据库数据模型升级......)。这些是nant 脚本,使用大量变量来表示路径、版本号等,因此很容易复制和修改它们以用于新版本。
【讨论】: