测试的角色 (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)。我在微软参与的项目都是这样做的。

 

在开始论证之前,  先引用斯密特 ·亚当斯的 《国富论》 来暖场  (我没读过这本书,  直接从网上抄的)

分工理论

亚当斯认为,分工的起源是由人的才能具有自然差异。… 假定个人乐于专业化及提高生产力,经由剩余产品之交换行为,促使个人增加财富,此等过程将扩大社会生产,促进社会繁荣,并达私利与公益之调和。 他列举制针业来说明。如果他们各自独立工作,不专习一种特殊业务,那么他们不论是谁,绝对不能一日制造二十枚针,说不定一天连一枚也制造不出来。他们不但不能制出今日由适当分工合作而制成的数量的二百四十分之一,就连这数量的四千八百分之一,恐怕也制造不出来。

 

分工促进劳动生产力的原因有三:第一,劳动者的技巧因专业而日进;第二,由一种工作转到另一种工作,通常需损失不少时间,有了分工,就可以免除这种损失;第三,许多简化劳动和缩减劳动的机械发明,只有在分工的基础上方才可能。

 

引用 <http://baike.baidu.com/view/53445.htm>

 

 

我们看团队形式的职业体育比赛各个位置的分工都很明确,  拿足球来说,  有专注进攻的有专注防守的,   但是在我的印象中,  那些伟大的前锋大多数只管一件事 - 进攻。 亨利 Thierry Henry)参加防守么? 

 

 

当然一些球赛也有没有分工的时候原因 有好几个:

事太小几个小孩踢个半场。

无知小孩们刚开始玩球。

人手不够,  一对一打篮球你要参与防守么?  沙滩排球,两人都是全攻全守。

 

如果你的软件团队做的事情和上面的情况类似那当然不必分工。你们做的很可能不是商用软件你的软件团队大概也不用受什么软件工程规律的束缚。 (参见:  软件工程概论).

 

任何产业产业成熟到一定阶段的时候独立的质量保证角色是不可避免的。团队内部有QA 角色团队外部也有独立的QA 角色。

 

拿药品和食品来做例子,  除了生产厂家自己的检测之外 这些产品还要接受行业主管部门相关机构的检测和认可 (药品检验食品检验), 才能上市。 在出现争议的情况下还要第三方机构来进行测试或认证。

有人也许这样建议:  

这些药品都是药厂同一批工人一边制造一边测试出来的特别有保证!  不用测了,  赶紧吃了吧 

也许还有人这样建议:

这个十字坡夫妻店的农家饭都是他们自己亲手做的很可信, 咱们今晚就去吃饭住一宿吧。

 

我们每天经常使用的电子产品,  从大彩电到电影插座,  也经历了很多团队内部的和外部的测试,  请随手拿过任何一个电器你会在背面看到密密麻麻的小字, 其中肯定有下列标记之一:

现代软件工程讲义 9 测试 QA 的角色和分工_软件工程 现代软件工程讲义 9 测试 QA 的角色和分工_软件工程_02 现代软件工程讲义 9 测试 QA 的角色和分工_软件测试_03

 

没有这些标记的产品电子产品市面上很少看到。  

 

在软件和互联网产业目前没有这些认证,  相反的,  倒是有“人肉认证” :

你想申请某个著名专业网站的账户或者邮箱但是又担心这个网站对用户信息的保护程度不够。有人说没关系的 这个网站的创始人也用账户,  CTO , 总监什么的还经常发软件安全博客  账户一定是非常安全的!  这里不存在独立的质量认证只能通过人肉 (创始人/CTO/总监)来认证产品的质量。  

 

其实这种认证未必安全…  密码门事件 明文密码事件)(邮箱密码漏洞

 

如果有第三方的认证 此网站对用户信息的保护程度是X,  我们认证它不会明文存储用户密码… ” 我就放心了。 在第三方认证出现之前我希望团队内部至少有独立的QA 角色来确保软件的质量。否则我是不乐意使用这些软件/服务的。

 

[补充一句,  互联网服务的各种认证也在发展,  例如verisign 公司提供的各种认证。]

 

独立出来的质量保证角色怎么才能发挥作用?

有了独立的质保角色之后是不是万事大吉了?   未必,  分工意味着一件事要给别人去作。让别人做事并且依赖别人做出的结果,  这会出现一些问题。

 

问题:既然有专人负责那我就不用负责了!

生活中一个常见的歪理是,   既然有清洁工那我乱扔点儿垃圾算什么,  这才是他们工作啊!

 

尽管有专人负责QA 中的测试工作,  但是保证质量仍然是所有成员的职责。软件团队中的一些人往往在有意无意中忘记这一点。最常见的现象是开发人员写好一个功能之后,  迫不及待地宣布成功然后希望测试人员去发现所有问题。 如果问题在发布后才被发现,  开发人员会说 – 测试人员怎么搞的,这种bug 都没找出来!?

 

某项目的某功能有重要的改进,  这个改进经过研究员的研究, 开发人员的设计 美工的美化 两个开发人员的配合实现项目管理人员的督促 测试人员的测试,  最后所有人都号称做好了,  上线了!  为此 我约了某个目标用户给他做实地展示 几天后,  大家都到齐了开始演示。开始进行的不错,  马上最重要的killer  feature  就会出来了 …   ,  预想的效果怎么还没出现呢?   再试试,  还没有?  各相关人员面面相觑,  大家小声说: 

我不是把那个新模块给你了么? 

我就是照着那个接口实现的啊

我不是已经交给那啥… ” 

所有的bug 不是已经都搞定了么,

 

会议在尴尬中胜利结束了。

 

后来查问题的根源,  这个复杂的功能由于两个模块的接口在最后没有同步,  某重要的参数被忽略了,  这个功能中最出彩的部分压根就不可能工作!   那负责测试的角色怎么解释 "所有测试用例通过,  同意发布的呢 

这还是开发人员引以自豪的 杀手级功能  (killer feature),  那其它普通的功能是什么命运呢?

回过头来我们可以问:

·         这件事真的要通过这么多环节么?   

·         测试人员真的知道最最关键的地方如何测试么?

·         在系统上线之后,  所有为这个功能感到自豪的人是否去实地测试过呢? 

 

 

一个开发人员应该负责下面“开发功能”右边的几个圆圈呢? 

 

现代软件工程讲义 9 测试 QA 的角色和分工_软件测试_04

 

问题盲目信任 “专业人士”扮演的角色

每个角色的水平不一样,  软件的质量往往受最差的角色的影响最大。我们团队要为某软件写一段英语介绍文字,  团队成员都是通过四六级英语考试的牛人,  可他们都很谦虚说要请一个专业的人士来写不可。于是求了一个专业人士 ,  求了好几次(专业人士很忙的),  在上市之前才得到专业的文案, 于是, copy/paste 几次之后,  软件就向全世界发布了 

 

这个文案第一句就是热情洋溢的设问句: "have you ever think about ..."  随后还有几处非常明显的语法错误.  这个软件吸引了不少评论文章,  有旁观者说,  从介绍文字的几处典型中国式语法错误来看,  这个软件是由在中国的某分部搞出来的

 

即使有专业人士扮演各种角色,  还得有专人独立地检查验证质量。

 

我们回头来看,  可以问两个问题:

·         这件事真的要专业人士来做么?

·         专业人士做完之后谁来负责测试?

 

问题为了自己角色而做绩效优化

分工之后每个角色为了自己的绩效而优化,  会出现局部最优而全局未必最优的情况。

 

我们团队的另一个wp7 的应用也要发布,   这次专业人士又出手了,  写了175 个英语单词的介绍极尽溢美之事,  而且找不到明显的语法问题!   这的确是一种局部最优了。 但是完全没考虑到用户在小小的手机屏幕上有多少耐心读完那么多形容词和状语从句。经过简化,  我们把它减少到 78 个词勉强能放进手机的两个屏幕。