敏捷测试指引(3)- 用面向技术的例子支援程序员

翻译 2007年09月24日 17:38:00

敏捷测试指引(3)- 用面向技术的例子支援程序员

陈能技
2007-9-24

原文:Agile Testing Directions – Technology-Facing Programmer Support(Brian Marick)

为了帮助讨论和理解,我把“敏捷项目中的测试”这一主题分解成4个区分的主题。今天,我讲一下我们怎样使用面向技术的例子来帮助和支援程序开发。

这里适用的一个是测试驱动开发,在Kent Beck的书中,David Astel最近的书,Phlip,J.B.Rainsberger接下来的书中都讨论了这种开发方式。我认为测试驱动开发(我现在会叫它例子驱动开发,example-driven development)是可靠的。它不是主流的开发方式,但是看起来要成为主流了。套用Geoffrey Moore的话,我认为它正在跨越鸿沟的路途中。

也可以这样说,例子驱动开发已经从Thomas Kuhn所说的“革命性的科学”发展到“正规科学”。在正规科学中,人们扩展了特定方法的适用范围。因此我们现在很多人在GUI应用EDD(sic),设法让它与遗留代码(legacy code)一起工作,讨论mock objects的好的使用方法,讨论处理私有方法的技术,等等。但是这些都不是重大的发展。

我希望不久的将来会看到更多同时拥有测试和编程的技巧的人被吸引到敏捷项目中来。这些人既不会成为像纯测试人员那样的好测试员,也不会成为像纯编程人员那样好的编程人员。但是那还是不错的,如果你跟我一样相信敏捷项目应该重视通才多于重视专才的话。

我不是这样的混合人物。我没有与纯编程人员一起做很多的结对编程。但是我注意到,在维持编程的进度和目标的希望与确保很多好的测试的主意被考虑到的希望之间存在着紧张的关系。我发现我自己在进入程序员模式和退出并考虑全局的之间振荡。从经验看来,我们需要更好的思路来管理这个过程,以及关于什么类型的“测试思考”在编码过程中是合适的。

也可能有一些测试员在敏捷项目中不担当程序员的工作。不过,他们中的一些人还是跟程序员结对讨论单元测试(关于程序员如何检查代码)。程序员学习如何避免哪些类型的bug,测试员学习他们正在测试的是什么。不知何故,加拿大的卡尔加里成为了这些活动的温床,我指望Jonathan Kohl,Janet Gregory和其他人告诉我怎样才能做好。

我需要强调这些都是关于人的。传统上,测试员与编程人员会有很紧密(或者很广阔)的关系。对于矩阵的支援程序员这部分,我相信传统的关系是不合适的。

我使用术语“checked examples(检查例子)”作为支援程序员的测试。我们可以把这个概念一分为二。一部分作为指引下一步编码的决定。另外一部分是自动化的例子,作为“改变探测器”(change detectors),看刚才的修改是否是你期待的。

通常的习惯是,改变探测器仅仅是保留的代码的保护性例子。(你让你的单元测试套件作为救助,一个对应一个地,在编码的同时测试。)那不是逻辑上的要求。我喜欢先建立一些关于什么时候做其他事情的知识。

例如,考虑这样的维护场景:你首先开发了一些代码例子。一个月后,别人加了一个新的例子并改变了代码以便匹配。很多之前为那部分代码开发的例子都成了“bad examples”坏例子了。(测试失败,但是因为他们现在是错误的,不是因为代码错误。)修正那些例子以便他们一致。我的意思是在下表的左边的事件序列本来是期望与右边的测试一样的。(先看左边栏,然后看右边。)

Example foo written Example bar written
Code written to match foo Code written to match bar
Example bar written (foo invalidated) Example better-foo written (bar is still a good example)
Code changed to match bar - oops, now foo doesn't check out Code changed to match better-foo (and bar continues to check out)
Update foo to be better-foo  

 
最近坏掉的例子被重写以便匹配一个理想的开发顺序,在这个过程中不需要重写任何例子。但是为什么?在上表的左列,新的例子foo没有用于驱动开发,只是作为检查。对于驱动开发来说是最佳的可能对于检查来说不是最佳的。

假设软件系统开发切面层(shearing layers),切面层的接口通常是不会改变很大的。为了可维护性,在修改时移植坏掉的例子到界切面层是有意义的。取代一个例子对应一个类的一个方法的做法,我们现在使用一个例子对应整个子系统。那可能会很糟糕 - 想想调试 – 但是它减少了维护的负担,甚至能提供关于子系统的行为的完整文档的好处。

我希望人们分清楚两个角色 – 指引不远的将来和重新检查过去 – 会发现有建设性的知识。例如,什么时候编写面向技术的“改变探测器”(而这些与指引编程没有任何关系)可能会有用?

我在上面说的测试驱动开发是“期中一个适合”今天的主题的东西。那么其他适合的是什么?我不知道。EDD是否是最合适的?(是否最近可能发生革命性的改变?)我也不知道 – 我要依赖那些善于打破旧习的人来帮我找出来。对此我将非常感兴趣。
 

敏捷测试指引(4)- 用面向业务的例子支援项目组

敏捷测试指引(4)- 用面向业务的例子支援项目组 陈能技2007-9-24 原文:Agile Testing Directions – Technology-Facing Programmer Sup...
  • Testing_is_believing
  • Testing_is_believing
  • 2007年09月25日 21:15
  • 2725

敏捷开发模式下测试策略

在敏捷开发模式,往往传统以功能测试为主的测试难以适应新的角色,而敏捷团队也面临着产品质量和快速市场的压力,需要通过快速的迭代抢占市场,但另外一方面质量的问题,又可能导致市场丢弃,这时,测试应尝试调整测...
  • wildnesswolf
  • wildnesswolf
  • 2016年11月16日 17:54
  • 449

敏捷测试指引(2) - 测试与例子

敏捷测试指引(2) - 测试与例子陈能技2007-9-24原文:Agile Testing Directions – Tests and Examples (Brian Marick)It all d...
  • Testing_is_believing
  • Testing_is_believing
  • 2007年09月24日 17:24
  • 3420

敏捷测试指引(6)- 用面向技术的例子批判产品

敏捷测试指引(6)- 用面向技术的例子批判产品陈能技2007-9-26 原文:Agile Testing Directions –technology-facing product critiques...
  • Testing_is_believing
  • Testing_is_believing
  • 2007年09月26日 23:37
  • 2018

敏捷测试的四象限---学习笔记

根据《敏捷软件测试》的学习笔记整理,部分文字复制自网络。 作者:(美国)克里斯平(Lisa Crispin) (美国)格雷戈里(Janet Gregory) 译者:孙伟峰 崔康 出版社: 清华大学...
  • hgstclyh
  • hgstclyh
  • 2017年05月03日 16:31
  • 1268

敏捷测试指引(7)- 敏捷项目中的测试员

 敏捷测试指引(7)- 敏捷项目中的测试员陈能技2007-9-27 原文:Agile Testing Directions –Testers on agile projects(Brian Maric...
  • Testing_is_believing
  • Testing_is_believing
  • 2007年09月27日 16:49
  • 2215

面向开发的测试技术(一):Mock

引子:自上世纪末Kent Beck提出TDD(Test-Driven Development)开发理念以来,开发和测试的边界变的越来越模糊,从原本上下游的依赖关系,逐步演变成你中有我、我中有你的互赖关...
  • eMac
  • eMac
  • 2017年05月01日 17:04
  • 561

ISTQB-TA/TTA连载系列23:探索性测试vs脚本化测试

脚本化测试并不是一个好的测试实践,在实际测试过程中面临各种问题和挑战。探索性测试的引入,可以很好的作为脚本化测试的补充,以解决这些问题。 探索性测试的基本思路是:随着项目的不断进展和深入,测试人员设...
  • Wenqiang_Zheng
  • Wenqiang_Zheng
  • 2012年01月12日 22:11
  • 1298

敏捷测试指引(5)- 用面向业务的例子批判产品

 敏捷测试指引(5)- 用面向业务的例子批判产品陈能技2007-9-24 原文:Agile Testing Directions – business-facing product critiques...
  • Testing_is_believing
  • Testing_is_believing
  • 2007年09月26日 23:35
  • 2612

敏捷测试的方法和实践 (上)

什么是敏捷测试呢?敏捷测试当然不能简单地理解测得更快,绝对不是比以前用更少时间进行测试,也不是将测试的范围缩小了或将质量降低来减少测试任务。也有人说,只有敏捷开发,没有敏捷测试。下面我们就要讨论一下:...
  • KerryZhu
  • KerryZhu
  • 2010年12月15日 21:32
  • 23413
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:敏捷测试指引(3)- 用面向技术的例子支援程序员
举报原因:
原因补充:

(最多只允许输入30个字)