测试的角色 (Test) 要独立出来么 ?
独立出来的测试角色怎么才能发挥作用?
有些成功人士和成功的公司号称没必要有独立的测试角色 (Test), 你怎么看?
最近又看到一些关于开发人员要不要负责测试的讨论。 例如:
http://www.aqee.net/on-testers-and-testing/
大多数的开发团队并不需要一个独立的测试角色。即使有一个,他的所有的开发时间比上所有的测试时间应该 >20:1。
[注: 这个翻译就有错误, 原文指 开发: 测试 的比例应该 > 20:1 ]
我正好在写相关的教案, 也来凑个热闹。
[这篇文章的一些事例来自于我曾经和现在的团队。 希望这些例子不足以影响相关人物和团队的伟大形象。 任何软件团队都会犯错误, 伟大的团队有勇气面对自己的错误并不断改进。]
首先, 明确两个概念:
软件测试 (Test):运用定义好的流程,工具去验证软件能实现预先设计的功能和特性, 工作的流程和结果通常是可量化的, 例如, 测试用例, bugs, 代码覆盖率, MTTF, 软件效能的参数。 [注: 正因为流程和结果是可明确定义的, 可量化的, 很多测试工作可以自动化]
软件质量保证工作 (Quality Assurance):软件团队的成员为了让软件达到事先定义的质量而进行的所有活动,包括测试工作。
对于这两个术语, 不同人有不同的定义, 有人认为它们是互通的, 在《现代软件工程》的上下文中我尽量使用上述的定义.
测试的角色 (Test) 要独立出来么 ?
回答: 首先, 我相信有分工是好事, 软件团队中应该有独立的测试 (Testing) 角色。所有人都可以参与QA 的工作 (报告bug 什么的), 但是最后要有一个角色对QA 这件事负责。 不但角色要独立,而且在最后软件发布的时候, 必须得到此角色的签字保证 (sign off)。我在微软参与的项目都是这样做的。
在开始论证之前, 先引用斯密特 ·亚当斯的 《国富论》 来暖场 (我没读过这本书, 直接从网上抄的)。
分工理论
亚当斯认为,分工的起源是由人的才能具有自然差异。… 假定个人乐于专业化及提高生产力,经由剩余产品之交换行为,促使个人增加财富,此等过程将扩大社会生产,促进社会繁荣,并达私利与公益之调和。 他列举制针业来说明。“如果他们各自独立工作,不专习一种特殊业务,那么他们不论是谁,绝对不能一日制造二十枚针,说不定一天连一枚也制造不出来。他们不但不能制出今日由适当分工合作而制成的数量的二百四十分之一,就连这数量的四千八百分之一,恐怕也制造不出来。”
分工促进劳动生产力的原因有三:第一,劳动者的技巧因专业而日进;第二,由一种工作转到另一种工作,通常需损失不少时间,有了分工,就可以免除这种损失;第三,许多简化劳动和缩减劳动的机械发明,只有在分工的基础上方才可能。
引用
我们看团队形式的职业体育比赛, 各个位置的分工都很明确, 拿足球来说, 有专注进攻的, 有专注防守的, 但是在我的印象中, 那些伟大的前锋大多数只管一件事 - 进攻。 亨利 (Thierry Henry)参加防守么?
当然一些球赛也有没有分工的时候, 原因 有好几个:
事太小, 几个小孩踢个半场。
无知, 小孩们刚开始玩球。
人手不够, 一对一打篮球, 你要参与防守么? 沙滩排球,两人都是全攻全守。
如果你的软件团队做的事情和上面的情况类似, 那当然不必分工。你们做的很可能不是商用软件, 你的软件团队大概也不用受什么软件工程规律的束缚。 (参见: 软件工程概论).
任何产业产业成熟到一定阶段的时候, 独立的质量保证角色是不可避免的。团队内部有QA 角色, 团队外部也有独立的QA 角色。
拿药品和食品来做例子, 除了生产厂家自己的检测之外, 这些产品还要接受行业主管部门相关机构的检测和认可 (药品检验, 食品检验), 才能上市。 在出现争议的情况下, 还要第三方机构来进行测试或认证。
有人也许这样建议:
这些药品都是药厂同一批工人一边制造一边测试出来的, 特别有保证! 不用测了, 赶紧吃了吧!
也许还有人这样建议:
这个十字坡夫妻店的农家饭都是他们自己亲手做的, 很可信, 咱们今晚就去吃饭住一宿吧。
我们每天经常使用的电子产品, 从大彩电到电影插座, 也经历了很多团队内部的和外部的测试, 请随手拿过任何一个电器, 你会在背面看到密密麻麻的小字, 其中肯定有下列标记之一:
没有这些标记的产品电子产品, 市面上很少看到。
在软件和互联网产业, 目前没有这些认证, 相反的, 倒是有“人肉认证” :
你想申请某个著名专业网站的账户或者邮箱, 但是又担心这个网站对用户信息的保护程度不够。有人说, 没关系的, 这个网站的创始人也用账户, CTO , 总监什么的还经常发软件安全博客, 账户一定是非常安全的! 这里不存在独立的质量认证, 只能通过人肉 (创始人/CTO/总监)来认证产品的质量。
其实这种认证未必安全… (密码门事件) (明文密码事件)(邮箱密码漏洞)
如果有第三方的认证 “此网站对用户信息的保护程度是X级, 我们认证它不会明文存储用户密码… ” 我就放心了。 在第三方认证出现之前, 我希望团队内部至少有独立的QA 角色, 来确保软件的质量。否则我是不乐意使用这些软件/服务的。
[补充一句, 互联网服务的各种认证也在发展, 例如verisign 公司提供的各种认证。]
独立出来的质量保证角色怎么才能发挥作用?