如果你想创建一个只包含一个源程序文件的简单程序,那么你只需要编译、连接那一个文件可以了。如果是一个团队项目组,有着许多甚至上千个源程序文件,那么要创建一个可执行程序的过程变得更复杂、更耗时。你必须用各种各样的组件将程序逐步建立起来。

  在微软或其它一些软件公司中惯例是:每日构造并做“冒烟测试”。每天都对已完成的源程序进行编译,然后连接组合成可执行的程序,并做“冒烟测试”,以简单的检查该执行程序在运行时是否会“冒烟”。

  带来的好处

  虽然这是一个非常简单的过程,但却有非常重要的意义:

  1、能小化集成风险

  项目组可能遇到的一个很大的风险是,项目组成员根据不同的系统功能各自开发不同的代码,但是当这些代码集成为一个系 统的时候,也许系统完成不了预期的功能。这种风险的发生取决于项目中的这种不兼容性多久才被发现,由于程序界面已经发生了变化,或者系统的主要部分已经被 重新设计和重新实现了,相应的排错工作将非常困难和耗时。极端情况下,集成的错误可能回导致项目被取消掉。每日构造和冒烟测试可以使这种集成错误变得非常 小,而且便于解决,防止了很多集成问题的产生。

  2、能减小产品低质量的风险

  这种风险是和集成不成功、集成出错相关联的。每天对集成的代码做一些少量的冒烟测试,即可杜绝项目中那些基本的质量问题。通过这种方式,使系统达到一种周知的良好状态,维护这样的系统可以防止系统逐步恶化到耗费大量时间排查质量问题的地步。

  3、能简单化错误诊断

  当系统每天都进行build和测试时,系统任何发生的错误都能够变得十分精细,便于排查。比如在17日系统还运行正常,18日出错了,那么只需要检查这两次build之间的代码变化可以了。

  4、能极大鼓舞项目组的士气

  看到产品的不断成长,能够极大的鼓舞项目组的士气,有时甚至不管这个产品到底用来做什么。开发人员可能会为系统显示了一个矩形而感到激动。通过每日构造,产品每天进步一点点,保证项目士气的持续高涨。


  进行每日构造和冒烟测试

  虽然说这是一个简单枯燥的活,每天进行build,每天进行测试,但也有着一些值得注意的细节:

  1、每天坚持

  每日构造,重要的是“每日”。如Jim McCarthy所说,把每日构造看作是项目的“心跳”,没有“心跳”的话,项目也死了(Dynamics of Software Development, Microsoft Press, 1995)。Michael Cusumano and Richard W. Selby描述了另外一种隐含的比喻,把每日构造比作项目的“同步脉冲”(Microsoft Secrets, The Free Press, 1995)。 不同开发人员写的代码在他们的“脉冲”之间肯定都会存在“同步”的差异,但是必须有这样一个“同步脉冲”,使得这些代码能够组合为一个整体。当项目组坚持 每天把这些不同的“脉冲”组合到一起的时候,开发人员脱离整体的情况会得到极大程度的杜绝。

  有些项目组把这一过程简化为“每周build一次”。这样带来的问题是,某一次build失败后,可能要回溯好几周才能找到原因。如果这种情况发生的话,已经得不到经常build带来的好处了。

  2、严格检查每一次build

  要保证每一次build的成功,必须保证build后的结果(也可称为build)是可以正常运行的,如果build不可运行,那么本次build被认为是不成功的,同时应该将修复此次build的工作提高到项目组高级别来处理。

  对于如何衡量一个build,每一个项目组都会定义一些自己的标准,这些标准需要设定一个严格的质量级别来处理那些特别严重的缺陷,同时也需要具有一定的伸缩性来忽略掉那些微不足道的缺陷,一些不适当的关心也许会使整个过程举步为艰。

  一个好的build起码应该具备以下条件:

  ●能够成功编译所有的文件、库,以及其它相关组件;

  ●能够成功链接所有的文件、库,以及其它相关组件;

  ●不能存在任何使得系统无法运行或者运行出错的高级别故障;

  ●当然,必须通过冒烟测试