TDD团队中的测试人员(2)

发表于:2016-06-13来源:infoq作者:Maarten Folkers点击数: 标签:测试人员
我在多年的经验中观察到了这种反模式:如果你打算采用TDD或其他某种由开发者进行测试的实践,那么仅仅是因为在团队中出现了一位功能测试人员,就会

  我在多年的经验中观察到了这种反模式:如果你打算采用TDD或其他某种由开发者进行测试的实践,那么仅仅是因为在团队中出现了一位功能测试人员,就会让你的努力付诸东流。因此,如果你确实计划实施TDD,我的建议是从团队中取消功能测试人员的角色!

  但事实上,在实施TDD的过程中,在团队中保留一定的QA仍然是必要的,这是因为某些变化或许会出乎你的意料。在上述关于TDD与QA的对话中,David Heinemeier Hansson说道:“ 或许你已经通过了所有测试,但或许它并没有发现真正的问题。一旦到了实际应用过程中,用户会以你始料未及的方式使用你的应用。 ”

  Martin Fowler十分赞同David的观点,但在同一番对话中,Kent Beck的措词显得更为谨慎。但他也同意,在QA这方面,“ 事情的发展已经趋向于另一个极端 ”。如果你无法预见到所有的可能性,那么从外部获取某些反馈的做法“非常有意义”。

  TDD团队中的测试与团队组成

  在以上对话的最后,我们已意识到在TDD的实施中,除了在编程过程中所创建的测试外,进行一定其他形式的测试工作仍是有意义的。敏捷测试的概念在 “敏捷测试”(Crispin,Gregory 2009)等书籍中进行了详尽的描述。但实施敏捷测试是否仍然需要“测试人员”,即专业从事测试的员工,人们对于这一点似乎还有争论。Google仍然有数百名测试人员,而Facebook几乎完全没有设立测试人员的职位。

  而普通的公司则有着不同的考虑,他们必须保证员工已掌握了工具与概念方面的知识以开发并维护各种应用,并确保高效的分工。让我们实际分析一下在Java环境中引入测试人员意味着什么。

  支持Java的TDD工具包括JUnit与某种模拟测试框架,一般的开发者都能够掌握这些工具。不过,JUnit框架不仅支持在Java环境中应用TDD,它还表现出了测试工作的第二次革新:它不仅支持自动化单元测试,还支持其他各种测试的自动化。

  JUnit目前还支持运行:通过JAX-RS实现的集成测试、自动验收测试、基于Selenium Webdriver的UI测试、以及支持各种数据集的参数化测试等等。并且这些测试都能够与持续集成(CI)方案进行整合。

  除了这些测试工具之外,其他各种工具与框架也大量涌现。可以说,一般的开发者很难掌握在一个普通的现代化项目中所用到的全部工具。

  概念性的知识是创建高质量应用的基本。要实现高可维护性,开发者需要了解代码整洁之道,而要掌握这方面知识需要多年的经验积累。如果我们想要精通这一领域的知识,接下来还可以学习设计模式、线程以及性能的原理。

  准确的、可维护的以及高性能的代码虽然十分重要,但他们并不能保证某个应用是可信赖的。为了弥补这方面的缺失,开发者还需要学习安全方面的知识。而为了创建一个能够吸引用户的应用,开发者还要了解UX方面的知识。最后,为了设计一种高效的方式以保证以上所说的特性,开发者还需要熟悉测试的知识。

  在组建IT部门时,工作的分工是又一项要考虑的重点。在团队的专业构成中,我们可以选择由各领域的专家,例如由一位安全方面的专家、一位UX设计师和一位测试人员组成一个团队,但这样一来就没有编码者的位置了,结果就是团队无法产出任何实际的东西。

  反过来,我们也可以由多面手构成整个团队,但这意味着整个团队必须将最好的光阴花费在学习上,除非他们都是天才。这样的团队同样不会有很高的产出。

  因此,我们的结论是在开发团队中有必要引入部分专利性。我们不能指望每个开发者不仅能够掌握全部的工具,并且还是整洁代码、UX以及安全和测试方面的专家。另一方面,在团队中引入的专家数量也应有所限制。

  既然我们必须引入一定的专业性,那么设置一位测试专家是比较有意义的:对于开发者来说,如果让他们来选择,那么大多数人不会去探索单元测试之外的内容,甚至有很多人根本不愿意承担任何测试工作。这也是为什么许多开发者不喜欢、甚至是厌恶测试的原因。如果要在这种环境中尝试转变为敏捷测试实践,那么就需要设立一位对于测试工作有热情并乐于实现它的专家。

  与TDD的实施类似,以上过程同样需要他人的指导,并且向团队展示其工作结果。如果某位测试专家创建了对某个服务的测试集,并且能够从IDE中执行,那么程序员就很可能会去使用。不仅如此,如果开发者感受到了测试的实用性,那么他们就会开始扩展其功能,并以可维护的方式实现。一旦为测试所触动之后,程序员就会愿意继续进行测试。但以我的经验来看,仅靠程序员自己是无法感受到测试的好处的。

原文转自:http://www.infoq.com/cn/articles/testers-TDD-teams