【编者按】敏捷的理念已经深入人心,开发过程已经渐入佳境,测试的处境却稍显尴尬。
测试从业者应该何去何从,怎样才能拥抱敏捷,体现出自己新的价值呢?InfoQ特地邀请了来自Google的敏捷测试专家段念,为读者答疑解惑,希望所有测试从业者可以从中得到自己的答案。更多关于敏捷测试的内容,请访问InfoQ中文站敏捷测试相关内容。
在与不少测试从业人员讨论到敏捷的时候,被问得最多的大约是两个问题:到底?,敏捷软件开发还需要测试工程师吗?。前一个问题是对于敏捷测试本身定义的疑问,第二个问题则是对敏捷开发将测试工程师排除在外的担心。
其实,在探寻这两个问题答案的过程中,我们可以更清晰的了解敏捷软件开发中测试的工作定义,测试价值观,以及敏捷开发中开发与测试工程师的配合。鉴于这两个问题的意义,在本敏捷测试专栏的第一篇文章中,本人尝试从自己的实践出发,尽可能清楚的回答这两个问题。
确实,相对于敏捷开发红遍大江南北的状况而言,对敏捷测试的讨论则低调得多。敏捷联盟定义了敏捷的4个价值声明,以及伴随的12条支持原则,这12条原则中没有一条单独提到测试。
这是不是意味着测试在敏捷开发中并不重要呢?实际上,如果仔细研读敏捷的12个原则,以及各种不同的敏捷实践,就会发现,测试在敏捷开发中占有非常重要的地位。无论是原则中的频繁交付,还是对可工作的软件的度量,或是敏捷开发实践中的测试驱动开发,行为驱动开发,都离不开测试的支持。
在本人看来,敏捷开发中不把测试单独拿出来描述的原因,恰恰是因为在敏捷开发中,测试不再是一个单独的、和开发独立的过程,而是变成了驱动开发、衡量产出的主要的手段,成为了敏捷开发中所有工程师在工作时必须时刻考虑和实践的一个部分。简而言之,敏捷软件测试更多的是一种理念,而非过程。
既然是这样,为什么我们还要在这个专栏中专门来讨论敏捷软件测试?本人接触过不少软件开发和测试工程师,他们所处的组织有的正在努力向敏捷开发转型,有的已经实践了一段实践的敏捷开发,但由于由来已久的工作习惯,他们中的绝大多数并不能自觉的认识到测试在敏捷开发中的关键作用,而是有意无意的将测试仍然看作是与开发截然分开的下一个阶段,导致在实践敏捷开发的过程中遇到种种问题:要么是忽略了代码质量,导致在频繁的迭代过程中,每一个迭代的问题层出不穷;或是沿用原有的方法安排对系统的系统测试,导致测试团队疲于奔命,却总也赶不上开发所要求的进度。在这种情况下,专门来讨论敏捷软件开发中的测试,也就是敏捷软件测试的话题,对这些工程师应该会有一些帮助。
那么,到底?很难给敏捷测试下一个精确、完善的定义,在本人看来,接纳了敏捷的核心价值观(沟通,简单,反馈,勇气,尊重),在敏捷软件开发过程中开展的测试就可以被称作是敏捷软件测试。因此,敏捷软件测试并不是一个与敏捷软件开发同一层次的划分,而是敏捷软件开发中的一部分,与传统的测试不同,敏捷软件测试并不是一个独立的过程,相反,它与整个敏捷开发中的其他活动交织在一起,处处都能看到它的影子。
由于敏捷软件测试并不倾向于一个单独的过程定义,本人拟从敏捷软件测试与传统测试观点的比较、敏捷软件测试中采用的方法、测试工程师在敏捷软件测试过程中的工作等方面来阐述之。在这篇文章中,我们主要从宏观的角度来描述敏捷软件测试,而在本专栏的后续文章中,我们将对敏捷软件测试中采用的方法、工程师在敏捷软件测试中的工作内容等进行进一步的描述。
使用Dashboard、燃尽图等方式展示当前工作与可交付产品之间的距离建立单元测试覆盖率等度量指标共享质量目标意味着质量责任由所有工程师共同承担开发测试应该建立一定的测试覆盖率标准,例如,在单元测试这个级别上,建立60%或80%的覆盖率要求通过使用TDD、BDD等技术,保证产品和代码的可测试性建立足够多的自动化测试,保证测试能够满足快速迭代的要求检查表提到了团队、反馈、质量文化和开发测试四个方面的内容,在本人看来,这四个方面体现的就是敏捷软件测试与传统软件测试的最大的不同。传统软件测试关注的是通过尽可能完备的覆盖去发现尽可能多的问题,把测试和开发当成是两个独立的过程,测试是对开发阶段产生成果的验证。
而敏捷软件测试则建立了一种不同的质量文化:测试的目的是为了保证产品快速发布,也就是对生产率本身的提高。基于验证的出发点必然会要求测试与开发的独立,以及尽可能客观和完备的度量产品质量;而基于生产率的出发点则要求建立敏捷的团队,要求测试与开发尽可能紧密,要求建立具有高度可测试性的软件,以及基于这些的高度自动化测试。
在检查表列出的所有项目中,质量文化是基础,团队是敏捷软件测试得以实施的条件,反馈和开发测试则是敏捷软件测试的具体方法。当然,你可以可以从敏捷的核心价值观来阶段这些项目:团队关注的是沟通与尊重;反馈直接对应于反馈;质量文化基于勇气(承担质量责任的勇气)与尊重;而开发测试则是反馈与简单的具体体现。
另一个在本文最。
敏捷测试应该是适应敏捷方法而采用的新的测试流程、方法和实践,对传统的测试流程有所剪裁,有所不同的侧重,例如减少测试计划、测试用例设计等工作的比重,增加与产品设计人员、开发人员的交流和协作。在敏捷测试流程中,参与单元测试,关注持续迭代的新功能,针对这些新功能进行足够的验收测试,而对原有功能的回归测试则依赖于自动化测试。由于敏捷方法中迭代周期短,测试人员尽早开始测试,包括及时对需求、开发设计的评审,更重要的是能够及时、持续的对产品质量进行反馈。
在敏捷方法中,需求变化比较快、产品开发周期很短,我们目前采用四周时间,也就是每个月发布一个新版本。开发周期短,功能不断累加,给测试带来很大的挑战,测试流程要做相应的调整。
在对新功能进行app功能测试和回归测试策略上,测试任务简单地可分为新功能测试和回归测试。在敏捷方法中,针对这两部分的测试建立相应的策略,加上自动化测试,以提高测试的效率,最大限度地降低质量风险。
TestBird - 手游和App自动化测试
1、敏捷测试人员的定义
我们这样定义敏捷测试人员:专业的测试人员,适应变化,与技术人员和业务人员展开良好协作,并理解利用测试记录需求和驱动开发的思想。敏捷测试人员往往具有优秀的技术能力,知道如何与他人合作以实现自动化测试,同时也擅长探索性测试。他们希望了解客户在做什么,以此更好地理解客户的软件需求。
谁是敏捷测试人员?她是驱动敏捷测试的团队成员。我们知道许多敏捷测试人员刚开始的时候在从事其他工作。开发人员可能会爱上测试而超越单元测试的范畴。习惯以敏捷方式工作的探索型测试人员也会被敏捷团队吸引。其他角色的专业人士,比如业务或者功能分析师,也可能具有同样的特质并做同样的工作。
技能很重要,但态度更值得关注。Janet总是说:“如果态度不好,那么技能则一无是处”。既然我们要为敏捷团队招募大量的测试人员,那么必须慎重考虑这一点,并与敏捷社区的其他朋友进行相关讨论。测试人员往往可以总览全局。他们更多时候是以客户的角度看待应用程序,这意味着他们一般以客户为中心。
2、敏捷测试思想
如何使一个团队变得“敏捷”?对我们而言,敏捷团队持续关注如何最出色地工作并发布最优秀的产品。根据我们的经验,这需要大量的训练、学习、时间、实验和协同工作。这并不适合所有人,但是对那些希望自己团队充满活力并关注持续改进的人来说非常适合。
成功的项目总是因为优秀的人才完成了出色的工作。在敏捷团队中做一名成功的测试人员所需要的特质可能与在任何团队做一名高水平的测试人员所需要的相同。
敏捷测试人员不会把自己看作是质量管理办公室的主管以保护客户避免受到缺陷代码的伤害。她会乐于收集和分享信息,与客户或者产品负责人协作以帮助他们充分展示自己的需求,从而得到他们需要的功能,同时向所有人提供项目进展的反馈。
敏捷测试应该是适应敏捷方法而采用的新的测试流程、方法和实践,对传统的测试流程有所剪裁,有所不同的侧重,例如减少测试计划、测试用例设计等工作的比重,增加与产品设计人员、开发人员的交流和协作。
在敏捷测试流程中,参与单元测试,关注持续迭代的新功能,针对这些新功能进行足够的验收测试,而对原有功能的回归测试则依赖于自动化测试。由于敏捷方法中迭代周期短,测试人员尽早开始测试,包括及时对需求、开发设计的评审,更重要的是能够及时、持续的对产品质量进行反馈。
在敏捷方法中,需求变化比较快、产品开发周期很短,我们目前采用四周时间,也就是每个月发布一个新版本。开发周期短,功能不断累加,给测试带来很大的挑战,测试流程要做相应的调整。
在对新功能进行app功能测试和回归测试策略上,测试任务简单地可分为新功能测试和回归测试。在敏捷方法中,针对这两部分的测试建立相应的策略,加上自动化测试,以提高测试的效率,最大限度地降低质量风险。
TestBird - 手游和App自动化测试。
敏捷开发包括一系列的方法,主流的有如下七种:
XP
XP(极限编程)的思想源自 Kent Beck和Ward Cunningham在软件项目中的合作经历。XP注重的核心是沟通、简明、反馈和勇气。因为知道计划永远赶不上变化,XP无需开发人员在软件开始初期做 出很多的文档。XP提倡测试先行,为了将以后出现bug的几率降到最低。
SCRUM
SCRUM是一种迭代的增量化过程,用于产品开发或工作管理。它是一种可以集合各种开发实践的经验化过程框架。SCRUM中发布产品的重要性高于一切。
该方法由Ken Schwaber和 Jeff Sutherland 提出,旨在寻求充分发挥面向对象和构件技术的开发方法,是对迭代式面向对象方法的改进。
Crystal Methods
Crystal Methods(水晶方法族)由Alistair Cockburn在20实际90年代末提出。之所以是个系列,是因为他相信不同类型的项目需要不同的方法。虽然水晶系列不如XP那样的产出效率,但会有更多的人能够接受并遵循它。
FDD
FDD (Feature-Driven Development,特性驱动开发)由Peter Coad、Jeff de Luca 、Eric Lefebvre共同开发,是一套针对中小型软件开发项目的开发模式。此外,FDD是一个模型驱动的快速迭代开发过程,它强调的是简化、实用、易于被开发团队接受,适用于需求经常变动的项目。
ASD
ASD(Adaptive Software Development,自适应软件开发)由Jim Highsmith在1999年正式提出。ASD强调开发方法的适应性(Adaptive),这一思想来源于复杂系统的混沌理论。ASD不象其他方法那样 有很多具体的实践做法,它更侧重为ASD的重要性提供最根本的基础,并从更高的组织和管理层次来阐述开发方法为什么要具备适应性。
DSDM
DSDM(动态系统开发方法)是众多敏捷开发方法中的一种,它倡导以业务为核心,快速而有效地进行系统开发。实践证明DSDM是成功的敏捷开发方法之一。在英国,由于其在各种规模的软件组织中的成功,它已成为应用最为广泛的快速应用开发方法。
DSDM不但遵循了敏捷方法的原理,而且也适合那些成熟的传统开发方法有坚实基础的软件组织。
轻量型RUP
RUP其实是个过程的框架,它可以包容许多不同类型的过程, Craig Larman 极力主张以敏捷型方式来使用RUP。他的观点是:目前如此众多的努力以推进敏捷型方法,只不过是在接受能被视为RUP 的主流OO开发方法而已。
软件测试的方法根据软件工程的组织和实现方式,有很大差别,有些是比较技术化的方法,有些则是工程方法,主要分为: 黑盒测试方法群:等价类划分、边界值、因果图、基路径法、专家测试法、smoking、场景测试等 白盒测试方法群:同行评审、需求审查、代码审查、接口测试(调用测试和返回测试,需要结合等价类和因果图方法)等。
当在单元层面黑盒而在集成层面白盒时,基本上两类方法就会有结合了,就会出现习惯上说的灰盒测试(说实话,不做到纯产品级开发,基本上都是用的灰盒测试)。
可能在软件测试技术的概念上,你不太熟悉,敏捷测试和自动化测试,不是测试技术,是一种测试类型。比如你参与的项目是敏捷开发,那么你做的测试就成为敏捷测试,而自动化测试,是相对于手工测试而言的。
软件测试的技术,有很多,毕竟软件测试人员要做的工作涉及范围很广,相对应的,要懂的技术也很懂,根据用途,我做了以下分类,希望对你有所帮助吧:
1、进行数据库测试,那么就要掌握数据库的操作语句和数据库相关知识,如sql、触发器、内/外连接、单表/多表操作;
2、进行客户端测试,就要考虑各种测试方法;
3、进行产品的网络性能测试,就要具备一定的网络知识。
相对于手工测试而言,自动化测试要掌握的东西就更多了,除了以上几点外,还要掌握:
1、性能测试工具/功能测试工具,如loadrunner和QTP;
2、掌握自动化脚本语言,因为脚本语言有很多种,要看你做的是什么测试,用的是什么工具,不过各个语言都是想通的,如果你掌握了java,基本上那些东西都是能够用起来的。
1)按照测试技术划分
黑盒测试:功能测试,必须
白盒测试:逻辑结构测试,代码的逻辑、算法、结构是否正确,要求必须懂得代码,需要编写测试用例,可选
灰盒测试:介于中间
注意:在单元测试时,白盒应用相对较多,在集成测试时,灰盒测试应用相对较多,在系统、验收测试时一般就不会使用白盒测试和灰盒测试了。
2)按是否需要运行代码划分
静态测试:界面测试,文档测试,代码测试【重点关注代码的规范性,一般检查变量的命名,注释的频率,编程的规范性,不需要写测试用例,一般只需要有代码审查单】
注意:一般经常把白盒测试和静态测试的要素结合在一起,形成静态白盒测试
动态测试:运行程序进行检查,检查实际输出结果和预期结果是否相符
3)按软件特性分类
功能测试
性能测试
敏捷开发包括一系列的方法,主流的有如下七种:XPXP(极限编程)的思想源自 Kent Beck和Ward Cunningham在软件项目中的合作经历。
XP注重的核心是沟通、简明、反馈和勇气。因为知道计划永远赶不上变化,XP无需开发人员在软件开始初期做 出很多的文档。
XP提倡测试先行,为了将以后出现bug的几率降到最低。SCRUMSCRUM是一种迭代的增量化过程,用于产品开发或工作管理。
它是一种可以集合各种开发实践的经验化过程框架。SCRUM中发布产品的重要性高于一切。
该方法由Ken Schwaber和 Jeff Sutherland 提出,旨在寻求充分发挥面向对象和构件技术的开发方法,是对迭代式面向对象方法的改进。Crystal MethodsCrystal Methods(水晶方法族)由Alistair Cockburn在20实际90年代末提出。
之所以是个系列,是因为他相信不同类型的项目需要不同的方法。虽然水晶系列不如XP那样的产出效率,但会有更多的人能够接受并遵循它。
FDDFDD (Feature-Driven Development,特性驱动开发)由Peter Coad、Jeff de Luca 、Eric Lefebvre共同开发,是一套针对中小型软件开发项目的开发模式。此外,FDD是一个模型驱动的快速迭代开发过程,它强调的是简化、实用、易于被开发团队接受,适用于需求经常变动的项目。
ASDASD(Adaptive Software Development,自适应软件开发)由Jim Highsmith在1999年正式提出。ASD强调开发方法的适应性(Adaptive),这一思想来源于复杂系统的混沌理论。
ASD不象其他方法那样 有很多具体的实践做法,它更侧重为ASD的重要性提供最根本的基础,并从更高的组织和管理层次来阐述开发方法为什么要具备适应性。DSDMDSDM(动态系统开发方法)是众多敏捷开发方法中的一种,它倡导以业务为核心,快速而有效地进行系统开发。
实践证明DSDM是成功的敏捷开发方法之一。在英国,由于其在各种规模的软件组织中的成功,它已成为应用最为广泛的快速应用开发方法。
DSDM不但遵循了敏捷方法的原理,而且也适合那些成熟的传统开发方法有坚实基础的软件组织。轻量型RUPRUP其实是个过程的框架,它可以包容许多不同类型的过程, Craig Larman 极力主张以敏捷型方式来使用RUP。
他的观点是:目前如此众多的努力以推进敏捷型方法,只不过是在接受能被视为RUP 的主流OO开发方法而已。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:3.042秒