2010年1月8日

在第四届软件质量年会上的演讲,标题是”让测试敏捷起来“。

 

下面的链接是InfoQ上的视频和PPT:

让测试敏捷起来

posted @ 2010-01-08 15:59 关河 阅读(146) | 评论 (0)编辑

2009年11月14日

在本系列的第一部分中,我们简要回顾了敏捷开发,以及敏捷测试与传统测试的不同。在第一部分中,我们特别提到,敏捷测试的要点之一就是,不依据于角色而是依据于任务来考虑整个开发过程中的测试。

但是,对一个开发组织来说,组织中一定存在开发工程师和测试工程师的角色划分,作为一个敏捷团队中的测试工程师,他的主要工作职责是什么呢?或者说,他可以在哪些工作上发挥自己的作用呢?

敏捷过程中与测试相关的任务很多,概括说来有如下一些:

  1. 建立不同级别的测试验收标准(也就是test suite),包括单元测试、集成测试、系统测试等各个层面的验收标准;
  2. 推动整个组织的质量文化,保证整个组织的成员在质量责任与目标方面达成一致;
  3. 通过技术或是管理的手段,保证产品、代码具有良好的可测试性;
  4. 通过自动化测试手段缩短每个产品发布周期中测试所需的时间;
  5. 与客户沟通确认客户可接受的软件质量标准,并建立针对此标准的验收测试;
  6. 深入了解应用系统和业务需求,通过探索性测试方法设计有效的测试用例,发现产品中的缺陷;
  7. 建立对整个团队可见的质量度量体系,保证整个团队能够随时看到产品的质量度量值。
这些工作都可以是敏捷团队中测试工程师角色的工作任务,但显然,在现实中,不太可能要求所有这些工作都由测试工程师来承担─同时,让测试工程师承担全部这些工作任务也并不合理,某些工作由开发工程师角色,或是由开发工程师和测试工程师共同承担更为合理。

接下来,我更详细的把列出的这7项工作中非常成“测试工程师必须完成的工作”,“测试工程师需要去推进的工作”,以及“能为项目带来巨大价值的工作”。

  1. 测试工程师必须完成的工作: 
    • 与客户沟通确认客户可接受的软件质量标准,并建立针对此标准的验收测试;
    • 深入了解应用系统和业务需求,通过探索性测试方法设计有效的测试用例,发现产品中的缺陷;
    • 建立系统和用户验收级别的测试验收标准;
    • 通过自动化测试手段缩短每个产品发布周期中测试所需的时间
  2. 测试工程师需要去推进的工作:
    • 推动低层次测试(单元测试和接口级别的测试)的进行。低层次是测试对于需要快速发布的敏捷开发来说至关重要,但在大部分国内的软件组织中,开发测试都需要经过不断的推动才能被最终执行下去,测试工程师具有相关的测试技巧,并且能够用翔实的统计数据表明低层次测试的必要性,是最好的推动低层次测试的人选;
    • 推动整个组织的质量文化,保证整个组织的成员在质量责任与目标方面达成一致。这一点对于敏捷组织来说也是至关重要的;在许多传统的软件开发组织中,经常能看到开发和测试之间的扯皮,针对一个遗漏的缺陷,大家考虑第一件事不是如何去修复,如何去防止,而是首先“追究责任”─在敏捷过程中,需要一个非常不同的环境:也即,质量责任是由所有工程师共同承担的,对于出现的问题,重要的是解决和预防。
  3. 能为项目带来巨大价值的工作
    • 建立对整个团队可见的质量度量体系,保证整个团队能够随时看到产品的质量度量值。保证产品质量度量的可见可以让整个团队清楚的看到我们现在正在工作的产品与我们期望交付的产品在质量上还有多大的差距,这样整个团队可以以质量度量作为指示,集中精力工作在这些差距上,从而可以尽快的发布“可工作”的产品。“验收测试的通过度”,“单元测试的通过率”,“功能完成情况”等等项目都可以是质量度量中的度量项。
    • 通过技术或是管理的手段,保证产品、代码具有良好的可测试性。良好的可测试性对于产品的维护,自动化测试的进行都是非常有利的─我觉得,甚至可以武断的说,如果一个应用系统没有良好的可测试性,就很难期望可以在该项目上设置良好的测试框架。测试工程师一般不参与具体的设计工作和代码实施工作,但测试工程师可以推动开发工程师在设计和实现时尽可能的考虑可测试性设计,另一方面,测试工程师也可以通过测试覆盖率这个质量及时发现应用中可测试性不强的地方,推动开发工程师的改进。
综上,就是我个人认为的敏捷过程中的测试角色必须,应该和可以进行的工作。当然,要完成这些工作,和传统的QA工程师相比,敏捷过程对测试工程师提出了更好的技能上的要求。在我看来,一个敏捷项目中的测试工程师应该具有这样一些技能:

  1. 良好的沟通和协作能力;
  2. 良好的设计和代码能力,至少可以和开发工程师在同一水平上讨论具体的设计和代码实现;
  3. 快速学习和总结的能力(运用探索性测试发现缺陷);
  4. 对自动化测试有深刻的理解(至少要能清楚的认识到自动化测试不等于UI自动化测试,也不等于用自动化测试工具进行录制和回放);
  5. 快速的风险分析和判断能力(在许多情况下都不会有足够的时间开展full regression,如何判断风险和决定相应的对策至关重要)。
==========================分隔线============================

第二部分完结。

第三部分我打算探讨下敏捷测试中的测试过程管理。与传统的软件测试过程不同,敏捷测试过程是一个非常简单的过程模型,我的重点会放在敏捷测试过程管理中的一些实用工具上。

 

另外,可测试性貌似也是一个很好的话题,不知道有没有对这个话题感兴趣的朋友?

 

posted @ 2009-11-14 21:19 关河 阅读(1001) | 评论 (0)编辑

2009年11月6日

Agile testing(敏捷测试)基本上是伴随着敏捷开发的概念成长起来的,但在受关注程度上,远远不及敏捷开发本身。自然,开发队伍从数量和活跃度上来讲大于测试队伍,是其中的一个原因;除了这个原因之外,“敏捷测试究竟如何在项目中发挥作用”这个问题可能也是导致敏捷测试概念的流行度远远不如敏捷开发的原因之一。

关于敏捷测试,我能找到的较早的比较系统化的描述文档应该是2002年的这份PPT:http://www.io.com/~wazmo/papers/agile_testing_20021015.pdf,这份PPT定义了敏捷测试的两个主要特点:“遵循敏捷宣言的测试实践,将开发当成是测试的客户”(Testing practice that follows the agile manifesto, treating development as the customer of testing),以及“在使用敏捷技术的项目中的测试实践”(Testing practice for projects using agile methodologies)。敏捷开发宣言中提到了敏捷开发的四个核心价值观:简明(Simplicity)、沟通(Communication)、反馈(Feedback)、勇气/决断(Courage)─ 如果我的翻译有错,请指正 ─毫无疑问,从开发的角度来说,很容易理解这四个核心价值观对应的行为(敏捷开发的best practice),但从测试的角度来说,“简明”和“勇气”就很难对应到具体的测试行为中。

既然难以清楚的寻找敏捷测试的实践行为,我们先尝试来寻找另一个问题的答案:“敏捷开发究竟会给测试带来哪些改变(相对于传统的测试)?”如果可以找到这个问题的答案,我们应该可以顺藤摸瓜的找到敏捷测试中对应的best practice。这里有一段有趣的视频,是在某个敏捷开发大会上对许多嘉宾的采访,采访的主题就是“How does Agile affect testing”,从回答中你会发现,似乎没有任何人能够准确的回答这个问题。从采访片段中我听到的观点有:

  1. 敏捷开发有不同模型,不同的模型会以不同的方式影响测试(废话─我的comment)
  2. 敏捷测试需要工具的支持…(貌似卖工具的厂商喜欢隐晦的这么表达)
  3. TDD方法要求测试优先,其实除了测试优先外,我认为测试也可以和开发同时进行;
  4. 敏捷过程中的测试是一个integration的任务,在不同层面(单元测试,集成测试,系统测试,用户验收测试)均需要按照敏捷的方式组织测试,目的是符合敏捷方法的价值观。

在这些观点中,我最喜欢的是第4个观点,这也是一直以来我的认识,其实敏捷本质上并非是一个过程,而是一种理念。至于敏捷测试这个敏捷开发的同源产物,自然也会继承其中的“目标驱动”而不是“过程驱动”的特性。

个人认为,敏捷测试和传统测试观点最大的不同在这几个地方:

  • 敏捷测试并不倾向于严格区分开发和测试角色,全体工程师对于质量具有同等的责任,测试任务由开发和测试工程师共同完成;
  • 敏捷测试的迭代周期很短,为了在很短的迭代周期中完成测试任务,要求建立“足够好”的验收测试,建立足够的自动化测试;
  • 敏捷测试不严格依赖于文档(需求,设计等),测试角色必须和其他成员以及客户有良好的沟通,以保证建立的质量标准符合用户的需求,以及能够使用项目中的相关知识建立合理的测试框架;
  • 关于底层测试和关于代码质量是敏捷测试中的一个非常好的实践。

其中,对传统测试观点最大的冲击是第1和第3点,打破测试角色和开发角色之间的严格限定,用沟通而不是文档作为建立测试的基础,这些的确会让一个熟悉传统测试环境的测试工程师骤然间不知所措。拿我来说,N年前我自认为对敏捷测试有一定的了解,结果真正进入到一个敏捷测试项目的时候才发现仍然需要一段时间来改变自己的工作方式和习惯。不过一旦习惯了这种方式,我转变成了一个彻底的敏捷测试的鼓吹者 ─ 毕竟,敏捷测试为产品质量产生的价值,让团队成员得到的成就感和喜悦是实实在在能够看得到的。

-------------------------------------------不怎么华丽的分隔线--------------------------------------

借用一休哥的台词:“就到这里吧”,下一次我的主题是“敏捷过程中的测试角色”,希望这个系列完成的请留个言,我好知道有多少人对这个主题系列感兴趣,谢谢。

posted @ 2009-11-06 19:03 关河 阅读(1150) | 评论 (6)编辑

2009年6月1日

我也是本书的作者之一,虽然只在其中占了两章的内容:)

《Google API大全:编程·开发·实例》这本书是国内的第一本较为完整的介绍Google API的书,内容囊括了所有主要的Google API,并用大量的实例展示了Google API的应用方法。在这本书的首页上,我选择了“Google是一种生活方式”作为我对这本书的推荐语。

“Google是一种生活方式”,此言不虚,现在的网名,或多或少的被搜索引擎影响着使用Internet的方式,Google在其中的贡献不言而喻。当然,对我而言,“Google是一种生活方式”更有所指,Google的产品一向以良好的编程接口著称,对于以技术工作为主的工程师们,基于Google的产品构建自己的产品,更是一件值得一试的事情。

《Google API大全:编程·开发·实例》作者序:

10年前,使用Email邮箱收发邮件,只是很少一部分技术人员才能享受到的便利;5年前,出行时如果没有随身携带地图,只好在路人的指点下摸索找寻。而今天,无处不在的互联网和丰富多彩的互联网应用,已然嵌入了我们的生活。GMail带给我们免费、好用且容量不断增加的邮件服务,Google Maps成了我们出行前必不可少的参阅工具,甚至通过移动终端将地图随时带在身边。所有这些,都悄无声息成为我们生活的一部分。

互联网技术每天都在更新和发展,促成这一切发生的,正是背后极具创造性的程序员,和那些通过产品为用户带来价值的新技术公司。在这些公司中,Google毫无疑问是在帮助用户改变互联网使用方式上做得最为出色的。

Google以其独具特色的互联网应用,一直引领着互联网产品开发的方向。同时,Google为其绝大部分产品提供了面向开发者的API调用接口。这些设计良好的API,帮助开发者通过Mashup调用将Google产品所提供的内容集成在第三方应用中。

Google 多达几十种的开放API无法一一列举,但我们在日常使用互联网时一定在不经意间享受过它所带来的便利。提供地图服务的Maps API,实现互联网社区化联系的OpenSocial API,开发定制个性化首页的iGoogle Themes API,简化广告营销管理活动的AdWords API,提供网络应用程序平台的App Engine,等等。这些API的出现,不仅仅为开发者带来更具灵性的开发创意,为用户带来更为丰富多彩的互联网产品,更重要的是,它们说明了 Google的产品不是封闭的,而是属于整个互联网开放平台的,任何人都可以在Google的产品之上进行拓展,并享用Google产品为互联网带来的便利。


完整的作者序请移步至Google Doc上阅读。 或者,你可以查看豆瓣China-pub上的本书信息。

 


 

posted @ 2009-06-01 15:46 关河 阅读(373) | 评论 (4)编辑

2009年3月11日

4月份到上海出差,有机会的话希望能够和上海的测试同行们见见面:)


不知道有没有感兴趣的朋友?我到上海会住在南京路附近。 

posted @ 2009-03-11 11:39 关河 阅读(296) | 评论 (2)编辑

2008年9月11日

posted @ 2008-09-11 13:59 关河 阅读(753) | 评论 (6)编辑

2008年5月16日

posted @ 2008-05-16 10:29 关河 阅读(380) | 评论 (2)编辑

2008年5月5日

posted @ 2008-05-05 17:17 关河 阅读(393) | 评论 (1)编辑

2008年4月28日

     摘要: 本来打算写一篇JMeter和LoadRunner的简单比较的文章,Google了一下,发现类似的文章已经有不少了,中文的英文的都有。大致阅读了几篇,发现其中一篇文章的总结和比较还是比较中肯的,因此直接把这篇文章的Link贴在这里,供大家参考(请注意,这篇文章是2006年的文章,有些内容有点过时了)。

文章标题:Shootout: Load Runner vs The Grinder vs Apache JMeter
http://blackanvil.blogspot.com/2006/06/shootout-load-runner-vs-grinder-vs.html

随着对JMeter使用的深入,我越来越倾向于在自己的工作中使用JMeter工具,并且也不遗余力的向我认识的测试工程师推荐这个工具,但很多工程师在初步使用过这个工具后,会向我抱怨JMeter有太多不能做的事情,但在我看来,JMeter确实有不能做的事情,不过,对于Web应用的测试,JMeter是足够强大了。很多人会把JMeter和自己正在使用的LoadRunner进行比较,然  阅读全文
posted @ 2008-04-28 14:13 关河 阅读(1766) | 评论 (12)编辑

2008年4月27日

     摘要:


在4月26号下午的讲座中,我提到了“将Script放到HTML文件中尽量靠近尾部”的方法来提高用户感觉上的响应时间,有朋友对这个问题提出了疑问,因此在这里更详细的对该方法进行说明。

首先,浏览器对于script的下载是避免并行进行的。HTTP/1.1协议中规定浏览器和同一host之间只建立最多两个连接,也就是说允许的最大并行度为2(当然,对IE和Firefox来说,你都可以通过修改浏览器的设置来扩大这个并行度)。但对于Script的下载来说,浏览器在开始下载Script之后,是不会并行的下载其他element的。不会并行下载script这一点是一个事实,但浏览器为什么要采用这种策略,以及浏览器我们提到的“将Script放到HTML文件中尽量靠近尾部”到底能起到多大的作用,需要注意哪些事项,我希望在这篇文章中进一步的进行讨论。

  阅读全文
posted @ 2008-04-27 22:08 关河 阅读(696) | 评论 (5)编辑

导航

公告

本搜索尽可能收录分散在各处的各大网站、论坛中的灾区寻人信息,希望为我们找寻灾区的亲人提供方便的搜索平台。

共同努力、度过难关!祝愿我们的灾区的乡亲平安无恙!

寻找灾区的亲人
<2010年2月>
31123456
78910111213
14151617181920
21222324252627
28123456
78910111213

统计

搜索

 

常用链接

我的标签

随笔分类

随笔档案

朋友们的BLOG

最新评论

  • 1. Re:JMeter与LoadRunner的比较
  • @路过一下 强烈同意:) 而且,即使不是简单的HTTP协议,JMeter也提供了非常灵活的方式来扩展对不同协议的支持。
  • --关河
  • 2. Re:JMeter与LoadRunner的比较
  • @wy3552128@gmail.com 比较当然有意义,特别是工具选型。对于只是单纯web性能测试而言,昂贵的代价选用LR几乎是愚蠢的行为了。
  • --路过一下
  • 3. Re:敏捷测试感悟(之一)
  • 支持啊!
  • --CoderZh
  • 4. Re:敏捷测试感悟(之一)
  • @尤利卡 好建议,不错实际操作有难度─即使拿一个实际的项目,也不能描述项目中的方方面面,况且,文字描述不是录像,很多细节是无法体现的。在这个系列的第三部分“系统的可测试性”里面,会有一些实际的案例描...
  • --关河
  • 5. Re:敏捷测试感悟(之一)
  • 能不能实际的弄一点案例出来呢,都是文字看得有点晕
  • --尤利卡

阅读排行榜

评论排行榜