转:http://bbs.scmlife.com/thread-2290-1-4.html
作者:Steve McConnell
帖链接还不如直接转过来~~
------------------------------------------------------------------------------
如果你想创建一个只包含一个源程序文件的简单程序,那么你只需要编译、连接那一个文件就可以了。如果是一个团队项目组,有着许多甚至上千个源程序文件,那么要创建一个可执行程序的过程就变得更复杂、更耗时。你必须用各种各样的组件将程序逐步建立起来。
在微软或其它一些软件公司中惯例是:每日构造并做“冒烟测试”。每天都对已完成的源程序进行编译,然后连接组合成可执行的程序,并做“冒烟测试”,以简单的检查该执行程序在运行时是否会“冒烟”。
带来的好处
虽然这是一个非常简单的过程,但却有非常重要的意义:
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起码应该具备以下条件:
●能够成功编译所有的文件、库,以及其它相关组件;
●能够成功链接所有的文件、库,以及其它相关组件;
●不能存在任何使得系统无法运行或者运行出错的高级别故障;
●当然,必须通过冒烟测试
3、每天进行冒烟测试
冒烟测试应该是对整个系统流程从输入到输出的完整测试。测试不必是面面俱到的,但是应该能够发现系统中较大的问题。冒烟测试应该是足够充分的,通过了冒烟测试的build就可以认为是经过充分测试、足够稳定的。
不进行冒烟测试的build是没有太大价值的。冒烟测试就像一个哨兵,在阻止着产品质量恶化和集成问题的产生,不进行冒烟测试,每日构造可能会变成浪费时间的练习。
冒烟测试必须随着系统的扩充而扩充。最初,冒烟测试可能是非常简单的,比如验证系统是否会打印“Hello World”,随着系统功能的扩充,冒烟测试需要越来越充分。最初的冒烟测试也许只需要几秒钟来执行,逐渐地,测试可能会花费30分钟,1小时,甚至更长。
4、建立一个专门的build小组
在很多项目组,维护每日构造,并更新冒烟测试用例,会耗费一个人工作的大部分时间。因此在一些大的项目中,这项工作独立成不止一个人来完成的全职工作。比如在 Windows NT 3.0的研发中,就有一个由四个全职人员组成的专门的build小组(Pascal Zachary, Showstopper!, The Free Press, 1994)。
5、为build增加修订,如果这样做有意义的话
一般开发人员不会每天都经常向系统中快速的增加实际的代码,通常是每隔几天,他们在开发好完成某个功能的一套代码以后,然后集成到整个系统中。
6、规定一些导致build失败的惩罚措施
很多执行每日构造的项目组都会规定一些惩罚措施,来惩罚那些导致build失败的行为。从最开始,项目组成员就清楚的知道,build的正常执行是项目组的头等大事。一个失败的build是项目组的意外,无法成为项目组工作的准则。必须坚持:导致build失败的同事,必须停下手中的工作,首先来解决build失败的问题。如果一个项目组的build经常失败的话,久而久之的,再来谈build的正确性就没有意义了。
有种轻松的惩罚措施,能够突出解决问题的优先性。Some groups give out lollipops to each "sucker" who breaks the build. This developer then has to tape the sucker to his office door until he fixes the problem. 有些项目组会惩罚犯错的同事戴上山羊角,或者向一个项目基金捐献5块钱。
有些项目组对此的惩罚就有点残酷了。微软的开发人员,在一些知名度很高、很重要的产品如Windows NT,Windows 95,Excel等产品后期研发中,被要求随时带着寻呼机,如果你的代码导致build失败的话,即使是凌晨3点钟,也会要求你立即来处理这个问题。
7、即使在压力下也需坚持每日构造和冒烟测试
当项目进度的压力越来越大时,维护每日构造的工作看起来有些浪费时间,但是恰恰相反。在压力之下,开发人员丢掉一些平时的规定,会采用一些设计和实现的捷径,这在平时压力较小的环境下一般时不会用的。代码的review和单元测试也可能会比平时粗心一些,这些代码的状态变化也会比平时快很多。
为防止这种情况的出现,每日构造会坚持相关的规定,让压力下的项目保持在正轨上。代码仍然每天在不断变化,但是构造过程使得这种变化每天都可控。
谁能够从每日构造这种过程中得到好处呢?一些开发人员会抗议说,由于他们的项目太大,每天进行build是没有实际意义的。但是为什么现在最复杂的软件项目组却能够成功的执行每日构造的制度呢?本文首发时,Windows NT包括了560万行代码、分布在4万个源程序文件中,项目组仍然可以坚持每日构造。
分享到:
相关推荐
冒烟测试用例的选择原则包括提交测试功能的核心业务流程和本次提交测试功能中,优先级最高(P0、P1)的用例。 五、冒烟测试时间安排 冒烟测试的时间安排由各模块负责人安排具体的预测试时间,根据模块的复杂程度来...
冒烟测试报告可以帮助测试人员快速地了解软件系统的基本功能是否能够正常运行,从而提高测试效率和测试质量。 二、冒烟测试报告的结构 冒烟测试报告通常包括以下几个部分: 1. 编写目的:说明冒烟测试报告的目的...
冒烟测试与猴子测试虽然都是软件测试的重要组成部分,但它们各自的目的和应用场景有所不同。冒烟测试更侧重于验证软件的基本功能和稳定性,确保软件具备进行进一步测试的基础条件;而猴子测试则通过模拟用户可能的...
冒烟测试:变更履历,概述,冒烟测试跟踪表,总结
冒烟测试,也被称为预提交测试或基础稳定性测试,是一种在进行详尽的系统测试之前进行的初步测试,目的是确认软件的基本功能是否可执行,确保软件的核心部分在进一步的测试中不会崩溃。以下是一个详细的冒烟测试模板...
冒烟测试通常由开发人员或构建团队执行,它主要关注的是软件的主要功能和关键流程,而不是全面覆盖所有的测试用例。 在冒烟测试中,当开发人员修复了一个Bug后,为了确认这个问题是否真正得到解决,以及是否可能...
回归测试和冒烟测试是软件测试中的两种重要策略,它们在确保软件质量方面扮演着关键角色。在这篇文章中,我们将深入探讨这两种测试方法的定义、目的以及如何在实际工作中有效地运用它们。 首先,回归测试是一种确保...
测试用例 和冒烟测试用例模板
冒烟测试的一些示范性质的用例。 在软件中,“冒烟测试”这一术语...在检查了代码后,冒烟测试是确定和修复软件缺陷的最经济有效的方法。冒烟测试设计用于确认代码中的更改会按预期运行,且不会破坏整个版本的稳定性。
冒烟测试一般用于每日构建(Nightly build),构建服务器首先从 CVS 服务器上,下载最新的源代码,然后编译单元测试,运行单元测试通过后,编译可执行文件,可执行文件若可运行,并能执行最基本的功能,则认为通过了...
如果冒烟测试失败,开发团队通常会立即修复问题,而不是继续进行后续的测试,因为这可能会浪费时间和资源在不稳定的基础上。 "futurenetRunner.jar" 文件很可能是一个Java应用程序,它是冒烟测试的执行引擎。在Java...
软件开发人员冒烟测试用例模板,在实际项目中总结出来的,可做参考
参加华为软件精英大赛的冒烟测试工具
总的来说,Hi3861单板冒烟测试指南是确保产品在开发和生产阶段能够达到基本功能要求的关键工具,通过详细的测试步骤和安全提示,帮助工程师们高效且安全地完成测试工作。在实际操作时,必须遵循文档提供的指导,同时...
Unittest 和 Pytest 框架都是自动化冒烟测试的良好选择,但 Pytest 框架提供了更多的测试功能和插件,因此在实际应用中更受欢迎。 结论: 自动化冒烟测试是软件测试中的一种重要方法,可以快速验证软件的基本功能...
SDN洛川冒烟测试
该项目为基于Python语言的星云生产环境冒烟测试自动化UI测试设计源码,包含66个文件,包括19个Python源代码文件、16个思维导图文件、...该源码旨在实现星云生产环境的冒烟测试自动化,为软件质量和环境稳定性提供保障。
标题 "smoketest-hbase" 指向的是一个针对HBase进行的初步验证测试,通常称为“冒烟测试”。这种测试旨在确保软件的基本功能在重大更改或新版本后仍能正常工作。HBase是一个开源的、分布式的、版本化的NoSQL数据库,...
django-skd-smoke, 这里软件包用于简化冒烟测试的创建 django-skd-smoke 这里软件包用于简化冒烟测试的创建。内容安装工具使用情况配置文件示例许可协议 安装你可以通过使用pip获得 django-skd-smoke:$ pip i
今年遇到了几个问题,与接口的功能和性能相关,恰巧最近公司也在组织以冒烟测试为主题的活动,于是乎突发奇想,寻思着能否将接口测试与冒烟测试结合起来,发掘一些新的接口测 今年遇到了几个问题,与接口的功能和...