自动化构建:一致性关键之道

发表于:2013-3-14 10:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:雷慈祥 译    来源:51Testing软件测试网采编

  介绍

  如果有那么一件事软件开发人员很在行(并非引述电影《黑客》),那一定是将通常需要人工完成的任务自动化。让计算机处理重复乏味的任务将使得大家生活得更轻松,这里我们讨论的是如何让大家专注于他们所关心的事情。然而,研发团队时常会忽略那个最有帮助的受众—他们自己。

  在为数众多的中小型软件作坊中,不存在自动化构建和发布工具。构建、交付准备环境、代码发布全由手工完成,同样还有运行测试、备份旧版本、新版本打标签以及许多其他重复的事情。毕竟你可能认为这全是非常简单的工作,集成开发环境通过按钮或快捷键就可构建项目,你开启两个窗口拖放少许文件或文件夹即可完成网站发布。但当你在维护代码库和应用时所有这些事情加在一起,这里几分钟,那里几分钟,最终会浪费几个小时。

  庆幸的是,很容易解决这个问题。基本的自动化构建方案易部署,可高度定制化,成本低廉。本文描述了组建自动化流程的一些动机,以及你将需要接触的一些概念。本系列的第二部分将描述针对.NET解决方案的具体实现,但这些技术在任何环境下都适用。

  我们试图解决什么问题?

  在我们深入了解之前,我们先看下一些我们试图解决的问题。并非所有这些问题在你的组织中都存在,但是如果你仔细观察你们团队,你将发现可能存在其中的一些问题,很可能你的构建流程中其余部分可能会耗费一些工作。

  不一致的构建:用集成开发环境编写代码是件美妙的事情。然而这是有代价,诸如框架/运行时版本、输出结构、编译/调试版本、配置设置、环境变量以及编译选项等通常是由集成开发环境或操作系统处理。看似好事,但除非大家使用完全一样的开发机器,如果开发人员不注意这些细节,同一个代码库,不同开发人员会得到不同的输出。

  不完整的构建:我们中的大部分人都曾经都对糟糕的源码控制实践感到内疚。我们可能忘了提交一个缺陷修复,或是编译前忘了更新最新代码以获取其他人的改动。当这些发生在人工构建环境下时,即将发布的代码便不是最新的。我们需要一个解决方案,它保证你发布的总是源码控制系统中存在的。

  失败的单元测试:单元测试是任何优秀应用程序不可或缺的一部分,如果使用得当,它有助于避免在修复bug的同时引入新bug。然而,光写测试远远不够。你必须定期批量执行所有测试,当有些事需要你自己亲自处理时很容易会被遗忘。实际上没人执行这些测试,所以可能有些单元测试没通过而你却从来不知道。

  人为错误:即使是精心策划的简单流程也容易出现人为错误。我们都有过手指在键盘上徘徊却意外敲错按键,或者意外删除了操作系统内核(这比你想象地要经常发生)。或是在凌晨1点钟,昏昏欲睡时,我们意外地把正式服务器当作测试机开启。这是不可避免的,因为人无完人,所以任何事情一旦需要人工交互都有可能出错。

  安全:服务器和网络的安全总是由单独的软件团队处理。通常有两个极端,要么服务器连接有限制,达到这个限制任何人都访问不了,培养新员工的繁文缛节需要一个月之久;要么服务器对所有人开放,那么你们团队任何一个成员的恶意点击都可能搞垮系统。身为一名开发人员,我通常偏向于第二种方案,因为实际上我可以把事情做好,但我看到了这种做事方式的危险性。无论你的组织在该领域处于什么位置,自动化只会改进你的流程。

  我们首先需要做什么?

  一旦你确定了团队的主要痛点,你可以针对需求设计解决方案。没有放之四海而皆准的方案。只要你有自动构建,它能就减少人为操作并使事情趋于一致,你前进的方向就是对的。

  然而,你真正还需要很多东西。

  你必须开始接触优秀的源码控制实践。不管你是使用SVN、Mercurial、GIT或是TFS(请不要使用SourceSafe),你需要定义诸如分支策略,如何处理第三方以及内部库,如何在仓库中组织项目。当然了,你的团队已经启航。当有人在小项目里做事不遵守规范,他们能搞砸整个流程。

  必须有一名开发人员担任自动构建工程师。这个人将负责编写构建脚本,搭建持续集成开发环境,很可能还负责源码控制系统的搭建和部署。除非你有个很大而且复杂的环境,否则这些工作应该只占用他一小部分的时间,所以他一周中大部分时间还能从事常规的开发工作。

  即使你希望永远不要用到,流程中还是应该有个应急计划,就像组织中其他的任务关键型程序。编译服务器很可能成为一个单点故障,它很可能不具备负载均衡的能力,而且也不会有热备份以防服务器宕机。像这种情况,你想要确保能够快速搭建新的服务器,完成配置和权限的设定,还应该有个不使用构建服务器的B计划。尽管该实现的目标是再也不要由人工完成任何事情,却总应保证它是可行的。

  构建脚本

  构建流程的自动化依赖于简单的重复性任务。第一步是编写构建脚本。构建脚本可以是任何形式:批处理文件/shell脚本、基于xml的任务集合、自己写的可配置程序、或是他们中的任意组合。在.NET世界中,MSBuild是由微软提供的命令行功能,它使用基于xml的项目文件构建Visual Studio解决方案。NAnt是另一个常见.NET构建脚本工具,类似于流行的Java工具Ant。其他的包含开源社区中常见的Make,Ruby中的Rake等。

  无论你选择如何编写构建脚本,你应该寻找适合你的方法并坚持下去。例如,你一旦找到构建web程序项目的最佳方式,为新的web应用程序创建构建脚本应该就很简单了,只要从其他项目中拷贝脚本、修改部分名称和路径即可。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号