敏捷方法已经获得了越来越广泛的应用。这是很容易理解的,特别是从开发人员与用户的角度来看。
  1. 用户??系统的需求与过程上的细节问题似乎永远也问不完,然后还要仔细阅读大量的说明文档,而他们明白这些文档会成为将来法庭上的证据。

  2. 开发人员??需要严格地遵循说明文档而无法表达自己的想法或发挥创造性天赋。他们知道即使有更好的办法,他们也不能更改说明文档,否则这会成为将来法庭上的证据。

  但是对于质量保证人员来说,敏捷方法却会带来麻烦??在原来的理想情况下,他们只需要用既有的说明文档来验证"完成"的产品。要根据一个变化的背景验证一个活动的目标是很不直观的。这表示所使用的技术与自动化也更复杂,并且需要一个新的测试方式,一种类似于用户和开发人员之间的关系的方式。

  所有的敏捷方法都有(至少)一个共同的特征,那是对QA职业的影响。如果所谓的影响是质量上的一次大飞跃,那倒也不是什么坏事。但是,如果决策是根据无效的范例做出的,改变不一定能与过程同步了。对于开发人员来说,新提出的软件开发范例以开发人员为中心可能是很平常的事。Abraham Maslow曾经说过:"擅长用锤子的人喜欢从钉子的角度考虑问题。"但是作为质量保证人员,我们不能装作敏捷开发不存在的样子,我们必须保证那些拿着锤子的人不会去硬敲一颗螺丝。

  某些人可能会对QA提出怀疑,认为测试驱动开发(TDD)才是测试的关键。但是,伴随着需求和方案的发展,QA在整个过程中都是与敏捷小组直接发生联系的,是整个测试设计团队不可或缺的一部分。但这只是QA团队所面临所必须解决的众多误会中比较表面的一个。

  对测试的误解

  近看了网络上所谓专家写的文章,发现了一些对TDD与QA部门的误解。本文将解释部分误区,并集中讨论QA团队要在敏捷的世界里获得成功所必须解决的一些问题。

  1. "你只需要做单元测试??TDD测试已经足够"

  对于大部分商业开发来说,根本没有这回事。即使是敏捷开发的强力拥护者也承认他们需要一系列的测试技术。

  TDD程序设计人员需要这些测试来验证代码的正确性。如果需求(测试用例)解释错误,那么你构建的代码也将无法达到目标要求。

  大多敏捷项目都会使用探索性测试方法(黑盒)来支持白盒测试,而不会认为这两种技术只能选一。的探索性测试可以在开发地过于深入之前发现开发人员所忽略的问题。

  2. "你可以重用单元测试来创建回归测试集"

  有些TDD拥护者认为常规的下游测试(downstream testing)是多余的,因为每一行应用代码都有对应的测试用例;他们认为重用单元测试可以做到用户验收测试和回归测试所能做到的一切。

  这听起来挺有道理,但由于某些原因,这是不现实的:TDD中的白盒单元测试的粒度与目标与下游黑盒测试的目的是不同的。

  虽然单元测试的整体目标是保证代码能够实现所需的功能,但是回归测试的目标是保证被改动的应用代码不会产生意料外的效果。这两个目标是不同的--比如,检查一项属性是否具有合法的日期格式,与检查输入域中是否存在所需的日期是不同的。

  3. "开发人员可以用开源工具写测试,因此我们不需要测试人员或者自动测试工具了"

  职业测试人员实现的是与其开发同僚不同但同样有效的作用。

  人们普遍认识到传统的自动测试工具并不像供应商们炒作的那么有效。

原始软件的源码和供应商的产品一样可以改善数据库测试环境下的效率。这是因为没有合适的工具可以提供用户界面测试,所以我们才把方案扩展到了这一领域;我们的传统是有效地实施测试而不是屏幕抓取自动测试。我们开发了测试驱动,是因为在过去的二十年里传统的供应商错过了这个机会。

  通常,TDD项目的测试代码至少与应用代码一样多,因此其本身是应用软件。这种测试代码是需要在目标应用的生命周期中进行维护的。

  4. "有了单元测试不需要手动测试了"

  手动测试是一项重复性很强的工作;成本昂贵、枯燥并且容易出错。虽然TDD可以减少功能测试所需的手动劳动,但是它不能消除对黑盒测试(手动和自动)的需求。

  通过自动抓取测试人员的过程并记录其键盘和鼠标动作,测试人员能够腾出更多的时间来进行更有意义、更有价值的活动,比如测试难以(甚至无法)自动化的复杂场景。虽然手动测试很费时间(因此也很昂贵),但是如果因为不进行手动测试而漏掉一些错误,则通常意味着将来可能要付出更大的代价。

  5. "我们不再需要用户验收测试"

  在敏捷开发中,用户验收测试的定位通常是和用户协作确定"错误的需求",而不是检查功能是否与需求匹配。用户在开始定义需求的时候,他们是根据自己的期望值来描述的。当他们看到"活生生"的系统的时候,他们必然还会产生一些不同的、或者额外的需求。虽然敏捷方法可以减少这种事情的发生概率,但是要完全解决这种问题还是不可能的,因此我们无法回避用户验收测试。商业用户的用户界面验证更无法回避了,因为他们想象的可能与开发人员稍有不同。而这得由我们来……