我曾经和来自不同开发机构的人探讨过关于他们如何管理软件开发,如何组织,他们遵循什么样的开发实践,以及什么样的开发实践真正有效。工作在小团队的大部分人都没有人手帮他们测试程序,因为测试人员们不是真正开发软件的人,所以通常觉得他们是多余的。这意味着程序员许要自己测试他们的软件 – 或者用户来测试。
  敏捷团队中的测试人员能做什么?
  很少敏捷团队会觉得需要测试人员。测试人员被看作是瀑布时代的产物(需求、设计、编码、测试)。在 XP 团队,每个人都是程序员,每个程序员都要负责测试自己的代码,写自动的单元测试,使得用户需要的验收测试自动化。Scrum 根本没有定义测试要做什么 – 团队会终找到解决方案,因为他们会检阅自己并调整自己,以获得佳的实践。
  如果程序员已经测试了他们的代码(也通过结队的方式进行了代码审查),那么他们需要测试人员做什么呢?
  Janet Gregory 和 Lisa Crispin 写了一本书来说明敏捷团队中测试人员的作用,它向程序员和测试人员说明测试人员是如何配合敏捷开发的,但这仍然没有改变大多数团队的看法,尤其在“工程驱动的文化”(程序员创立的创业团队)中更是如此。
  他们的论点是敏捷团队的步伐相对于测试人员来说太快了,黑盒测试人员们仅仅通过写测试计划,通过手动的测试代码来测试,或许要不断的更新他们的质量中心或 Selenium UI 回归测试,这些都不可能追得上在短时间内要发布新功能的团队的进度。如果测试人员不会用 Fitness 或 Cucumber 写验收测试,或者没有足够的业务知识帮助填补客户/产品拥有者的空当,不能回答程序员的问题的话,那么他们又有什么优势呢?
  这个问题在持续开发中更为显著,一些公司如 IMVU 和 Facebook,使得某种编程实践变得流行起来,他们查看自己的工作,写自动测试用例,查看代码看看测试是否通过了,更新都是很快的,然后自动发布到在线系统中去。

  让用户来测试你的代码
  一些公司把持续开发看作是“众包”(crowdsource)他们测试的机会 – 让他们的客户来为他们测试。这实际上很有竞争力。然而也很难用这种方法写出可靠安全的软件 – 可能也是不可能的。针对持续发布给用户的系统的质量问题,James Bach 有一篇批评的文章,是关于他们花了 20 分钟时间去测试一个持续部署的程序,发现在很短的时间内发现了问题。
  有一些持续部署的公司更小心些,他们按照 Etsy/Flickr 的做法,在晚上上线:持续的发布更新,但是在用户量很大之前进行了测试,他们还会密切关注结果。
  然而,很重要的一点是用户只能测试某些功能,事实上,也只有用户可以测试它们:一个功能是不是有用,一个功能是不是可用的,他们需要什么信息才能正确的完成一个任务,工作流程应该如何优化。这才是对比测试所应该达到的效果 – 通过实验不同的想法,功能和工作流程,收集数据,然后找到用户喜欢什么,以及他们不喜欢什么。去尝试不同的方法,并获得反馈。
  但是你不会问你的客户他们是否测试完毕了,代码是否有效,系统是否稳定安全,负载大的情况下是否正常工作。
  你需要从测试团队中获得什么?
  算是好的,负责的,有经验的程序员都会犯错。在我们公司,每个人经验都很丰富,其中有些人工作了 10-15年以上了。他们很仔细的测试代码,每次 check-in 之后都会更新自动测试用例。在持续集成过程中这些测试都会运行 – 我们非常依赖于这些测试(现在已经有成千上万的测试用例了,并有较高的覆盖率),静态分析的缺陷核查,以及安全核查工具来对付基本的代码错误。所有的更改都会让另外一个高级的程序员来核查,从来没有过例外。