`
seemoon
  • 浏览: 159198 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

"集成测试"真的是阴谋?

阅读更多

InfoQ China刊了J.B. Rainsberger的一篇文章题为

J.B. Rainsberger:“集成测试是个阴谋”

J.B.对集成测试作了定义,认为集成测试是

 

写道
在我的理解中,集成测试表示那些测试结果(成功或失败)依赖于超过一个重要行为的实现正确性的测试。

 

简单可以理解为集成测试是依赖于其他(多于一个)测试的测试。

 

J.B.为什么认为集成测试是一个因为,他的观点是:

 

1.开发人员认为某一缺陷只能通过集成测试发现,因此认为应该integrate everywhere,要写大量集成测试。


2.J.B.列举一个中型web app的集成测试大概包含至少1000个集成测试,开发人员容易产生抵触情绪。


3.J.B.以两个测试进行对比,一个是对象测试(我的理解是单元测试),另一个则是集成测试,对象测试花费6秒,集成测试花费1分钟,而开发人员保持1分钟屏幕关注时间是不可能的,一分钟当中开发人员的注意力分散从而导致过多开销和低效,J.B.称之为集成测试的“隐含成本”。

 

关于观点1,根据我的测试经历,集成测试的目标应该关注于“集成可运行”上,比如一个集成涉及BO1, BO2,那么集成测试关注的应该是BO1+BO2得到的测试结果是可信的,而且测试结果通常不涉及太多可能性测试,比如通过不同的入口来测试集成结果的准确性,这样成本的确很高,而且会跟BO1,BO2的单元测试产生重叠,这也是一些集成测试采用MOCK测试的原因。

 

关于观点2,如果集成测试采用我说的那种“通过不同的入口来测试集成结果的准确性”的话,的确会发生抵触情况,因为集成测试的测试周期相对较长,内聚性不强,需要耗费很多精力,比如有可能涉及很多条件分支。

 

关于观点3,J.B.这里是拿集成测试和单元测试做比较,固然这是一个视角,但是这个视角是否全面我认为有失偏颇,拿一个JavaWebApp作例,对Service类做测试比较容易,如果把Action看作集成测试的话,Action测试的难度要较前者高,因而往往Action的测试有可能会被忽略掉,但是问题的发生在手工调试Action这一环节,比如出现Service中出现空指针,如果对Action做测试的话,问题有可能会在测试中发现并解决,而不是在对整个app进行编译和启动、运行、打开浏览器、输入用户名、密码,手工集成测试之后才发现问题,而这一系列过程所花的时间完全不止1分钟这么短,有可能是5分钟——完全可以来JavaEye灌水了!

 

如果把集成测试都累积做完之后,整个app会形成一个很完整的测试体系,再通过持续化集成工具来辅助实现集成自动化,专门拉到一台测试服务器做集成,J.B.说的那个1分钟问题其实可以完全避免,因此我认为J.B.的阴谋论有些牵强。当然,集成测试必须建立在单元测试之上,这点毋庸置疑,集成测试的重点应该根据项目实情做出策略上调整,比如对集成目标、深度的制定上做修正。

 

 

分享到:
评论
3 楼 seemoon 2009-05-12  
mock写的“传统的单元测试观念是根本无法支持敏捷开发的,充满了臭味”应该是“事后补测试”这种情况,通常发现一个功能做完后,某项目经理对开发人员说,“补上单元测试吧,这样以后好维护”,于是开发人员觉得象是被逼着去干一件“没有意义”的事。这种形式的测试失去了测试的最佳时机,也同时失去了“驱动”的价值,而且测试质量也不高,测试在这里成为了附加成本。
2 楼 daquan198163 2009-05-12  
mock1234 写道
这种“纠缠”之说的原因是 传统的测试观念把测试作为实现功能的代码开发之后才考虑的事情。

如果你使用XP或者其他敏捷开发,你就会发现,这根本没有懂什么是系统测试.测试用来驱动开发的,是架构设计和需求描述技术,是时时刻刻放在编码之前就开发好的,而不是编码之后才开始考虑的事。测试是用来协调开发的,是不纠缠那些细枝末节的。不要貌似很懂测试技术,结果只纠缠于细枝末节的技术。

当你把这个关系倒置过来,就会发现传统的单元测试观念是根本无法支持敏捷开发的,充满了臭味。

在审查任何貌似敏捷开发的人所谈论的测试方法之时,我们首先这样来看看它是真敏捷还是假敏捷,很重要。如果他是假敏捷,而还是在为传统的测试纠缠而烦恼,那么不论他对系统集成测试有什么样的担忧,我们也只是笑笑(同情他一下)就可以了。

所以首先不要纠缠于什么是系统集成测试,而要首先考察他是怎样的项目管理观念。

先写好测试程序,然后让测试程序发生异常(废话,现在连编译都过不去,因为被测试的接口还没有用代码来实现),然后写实现代码的目的就是让测试通过而已。这就是敏捷方法所说的系统测试!而不是传统测试理论中所说的任何一种测试。

所以,当我们站在敏捷开发的立场上来说系统测试时,只是引用其部分形式,而精神实质还是不一样的。

你越说我越糊涂了。
“传统的单元测试观念是根本无法支持敏捷开发的,充满了臭味”——能进一步解释一下么?
另外,我猜你有一个地方搞错了:
传统的测试观念把测试作为开发之后考虑的事情,但TDD并不是简单的把顺序掉过来——先写出完善的测试然后给出使其通过的实现,TDD就像走路,左右脚交替迈步,左脚是测试右脚是实现,测试代码和实现代码一起不断增长。
ps:也可能你本来就是这个意思,我的猜测是错的。
1 楼 seemoon 2009-05-09  
mock1234 写道
这种“纠缠”之说的原因是 传统的测试观念把测试作为实现功能的代码开发之后才考虑的事情。

如果你使用XP或者其他敏捷开发,你就会发现,这根本没有懂什么是系统测试.测试用来驱动开发的,是架构设计和需求描述技术,是时时刻刻放在编码之前就开发好的,而不是编码之后才开始考虑的事。测试是用来协调开发的,是不纠缠那些细枝末节的。不要貌似很懂测试技术,结果只纠缠于细枝末节的技术。

当你把这个关系倒置过来,就会发现传统的单元测试观念是根本无法支持敏捷开发的,充满了臭味。

在审查任何貌似敏捷开发的人所谈论的测试方法之时,我们首先这样来看看它是真敏捷还是假敏捷,很重要。如果他是假敏捷,而还是在为传统的测试纠缠而烦恼,那么不论他对系统集成测试有什么样的担忧,我们也只是笑笑(同情他一下)就可以了。

所以首先不要纠缠于什么是系统集成测试,而要首先考察他是怎样的项目管理观念。

先写好测试程序,然后让测试程序发生异常(废话,现在连编译都过不去,因为被测试的接口还没有用代码来实现),然后写实现代码的目的就是让测试通过而已。这就是敏捷方法所说的系统测试!而不是传统测试理论中所说的任何一种测试。

所以,当我们站在敏捷开发的立场上来说系统测试时,只是引用其部分形式,而精神实质还是不一样的。


说得对,测试是否起到driven是敏捷与否的“航标”。“纠结”在组织中引入测试(还不是敏捷所说的“测试”)必然存在,这也是国内敏捷推行的最大阻力,仿效scrum每天做15分钟的站立会议并不困难,难的是通过测试(不论传统或敏捷)步入真正的敏捷殿堂。

相关推荐

    软件集成测试报告.doc

    软件集成测试报告 软件集成测试报告是软件测试中的一种重要测试类型,它的主要目的是验证软件系统的各个组件之间的集成是否正确,确保软件系统的正确性、完整性和可靠性。本报告的编制是为了记录软件集成测试的过程...

    系统集成测试报告

    ### 系统集成测试报告知识点解析 #### 一、系统集成测试报告概述 **系统集成测试**是一项重要的软件质量保证活动,旨在验证不同模块或组件之间的集成是否符合预期的功能和性能要求。它不仅关注单个模块的行为,还...

    集成测试报告模板

    根据提供的集成测试报告模板,我们可以总结出一系列关于集成测试的关键知识点。这些知识点涵盖了从测试计划、执行、到结果分析的全过程。 ### 集成测试报告模板知识点详解 #### 一、目的 - **概述**:简要描述文档...

    测试集成测试案例模板

    集成测试案例模板 集成测试案例模板是软件测试中的一种重要测试方法,旨在验证软件系统的各个组件之间的集成是否正确。该模板提供了一个基本的集成测试用例模板,涵盖测试项目、测试主控、六个模块的集成测试等内容...

    什么是集成测试和用例

    集成测试和用例 集成测试是软件测试中的一种测试方法,旨在验证软件系统的各个组件之间的集成性和交互性。该测试方法的主要目的是为了确保软件系统的各个组件能够正确地集成和协作,从而确保软件系统的整体功能和...

    软件测试-集成测试指南

    ### 软件测试——集成测试指南 #### 1. 概述 集成测试作为软件开发生命周期中的关键环节之一,对于确保各个模块之间能够协同工作至关重要。在本指南中,我们将详细介绍集成测试的目的、范围、流程以及所需遵循的...

    集成测试(详细PPT)

    集成测试是一种软件开发过程中的关键环节,其目的是在系统组件之间发现并修复接口错误,确保各个模块协同工作。本详细PPT围绕集成测试的主题展开,深入解析了集成测试的原理、目的、策略以及最佳实践,同时也涉及了...

    集成测试方法及策略

    ### 集成测试方法及策略 #### 一、集成测试概述 集成测试是软件测试的一个重要阶段,它关注的是不同模块之间的接口以及这些模块如何协同工作。在软件开发过程中,通常先进行单元测试,确保每个独立的模块都能正常...

    Tessy—嵌入式软件单元测试/集成测试工具

    在V模型开发中,Tessy主要应用在单元测试和集成测试阶段。单元测试通过运行代码检测出函数中错误,比如算法错误、接口问题等;集成测试则在单元测试的基础上验证单元之间接口的正确性。基于越早发现bug开发成本越低...

    集成测试计划.doc

    集成测试计划是软件开发过程中的一个重要环节,它旨在检测不同组件或模块在组合时的相互作用,确保系统作为一个整体能够正确运行。以下是对集成测试计划的详细解释: 1. **编写目的**:集成测试计划的主要目的是...

    集成测试方案与报告的模板

    集成测试是软件开发过程中的关键环节,它在单元测试之后,系统测试之前进行,目的是发现模块间的接口问题,确保各个组件能协同工作。本资源提供的“集成测试方案”和“集成测试报告”的模板,旨在帮助开发者和测试...

    软件集成测试培训大纲

    ### 软件集成测试培训大纲精要 #### 第一章:集成自动化测试介绍 集成自动化测试是软件测试领域中的一个重要组成部分,它关注于不同软件模块间的交互与整合,确保整个系统按照预期协同工作。本章节旨在介绍集成...

    集成测试用例设计大纲

    集成测试是软件开发过程中的关键环节,其目的是在系统各个组件或模块被组合在一起时,检查它们能否协同工作,确保不同模块之间的交互无误。在这个过程中,设计有效的集成测试用例至关重要,因为这有助于发现早期集成...

    系统集成测试报告.docx

    试结果分析及结论4.1 测试结果分析在系统集成测试阶段,我们对各个模块进行了深入的集成测试,旨在确保所有组件能够协同工作,提供一个功能完整、性能稳定的应用系统。通过对XXX应用项目的测试,我们收集了详尽的...

    集成测试详解

    ### 集成测试详解 #### 一、集成测试的概述 ##### 1.1 集成测试的定义 集成测试(Integration Testing),又称组装测试或联合测试,是在单元测试的基础上,按照软件设计要求将所有模块按照某种策略组装成为子系统...

    系统集成测试验收方案.docx

    【系统集成测试验收方案】 系统集成测试验收方案是软件开发过程中的关键环节,它确保了各个模块在集成后能够协同工作,满足业务需求和性能标准。以下是对该方案的详细解读: 1. **文档说明** - **文档目的**:本...

    集成测试文档

    集成测试是软件开发过程中的关键环节,它在单元测试之后,系统测试之前进行,目的是尽早发现模块间的接口问题,确保各个组件能够协同工作。这份"集成测试文档"显然是为了帮助开发者和测试工程师更好地理解和实施集成...

Global site tag (gtag.js) - Google Analytics