做社会化的测试工程师之一:把软件测试搬出实验室

在四月间,六月间分别在天津和北京参加了软件测试主题沙龙,在会上都讨论了同一个问题: 什么是软件测试人员的核心能力?

在天津的沙龙上,与会的测试经理和高级测试人员总结了十条,但是其中没有“写代码”。

在北京的沙龙上,不仅测试人员同意这个观点,一些资深开发人员也指出,出色的开发人员,他的核心技能不是写代码,而是对需求的把握,对设计的睿智,对品质的追逐。

反过来看我们的测试人员,尤其是那些刚刚参加测试工作两三年,正在经历“迷茫期”的工程师,他们总在问同样的问题:是该学习Java编程吗?学习 Loadrunner 可以让我加薪吗?既然Google 需要使用 Python,我是该系统的学习 Python 和 Selenium 吗?对这种问题我的回答都是:不!不!不!

测试人员(大部分是手工测试人员)问这个问题,是出于一种担忧:怕失去工作: 既然自动化测试的代码会代替手工操作软件,既然敏捷模式下的开发测试混合模式已经(号称)不再有独立的测试人员,那么出路何在?

首先,我们抛开愚蠢的工作安全性担忧——我家门口菜市场卖烧饼的老板不会英语,电脑使用仅限于播放dvd,但挣得比我多——我们回到测试的本质聊一聊。

独立软件测试出现的原因是为了应对软件质量风险,那么从这个角度我们来分析一下:

1. 由开发人员执行的测试从1940s年代,电脑又傻又大的岁月其起就有了,而第一个独立的测试人员是微软公司在1976年招聘的,那么,只要微软公司的智商还正常,他们的软件质量就一定遇到了靠开发人员测试无法保证的状况——这种状况实在太多,我就不意义列举了——那么,在1940年到1976年将近四十年,开发人员测试没有解决的质量风险,在今天就忽然可以解决了?

2. 开发人员是人类历史上最懒惰的一批人,自他们开始测试起,他们就发明了各种各样的工具来代替他们测试——也就是自动化测试,结果呢,到了1980年代,微软还是开始大批量招聘独立测试人员,到现在仅微软就有几万的测试人员——那么,在1940年到1976年将近四十年,自动化测试没有解决的质量问题,在今天就忽然可以解决了?

何况今天软件的使用场景、用户类型、业务都极大的复杂化了。

解决了是否会失业这个问题,谈谈个人的观点:手工测试人员不会失业,其中一个原因就是:我们的测试将会社会化、复杂化。

关于软件测试的社会性,我举两个例子。

例子1:几年前坐公交时,和旁边的两位美女搭讪,聊起工作。她们开始吐槽自己的职业。她们是银行信息中心的表单录入员。每天的工作就是把纸质表单中的数据录入到软件中去。她们说:“我们每天早上最大的期待,就是运气,期待挑到一台好电脑”(她们没有固定的电脑设备)。而好电脑的定义是:用Windows XP的是好电脑;用Windows 2000的是烂电脑。因为,表单录入软件的某些按钮,在xp下只需要做单次点击,在2000下就要双击。当录入一个表单时这很好,但是她们一天要处理将近3000个表单,这就意味着用“好”电脑的人可以早下班,而用“烂”电脑的那个就要加班。这个问题(注意,严格意义上说,都不能算bug,因为“客户没有明确这个需求”)对程序员来说,对测试人员来说,真的不算重要,我们只会点几次,看到完成了功能,就声明通过了,但是看看我们给客户带来的痛苦。

例子2:一个大学生告诉我,大夫给母亲开药的电子处方系统没有做限制,某个只能吃三天的药开了五天的量,幸亏在药房被发现,及时更改过来,否则就可能造成人命关天的医疗事故。

例子3:我的女儿只有三岁,但是她可以用ipad找到切水果,我观察过她的操作:首先她不会看字,全部靠图形识别,另外,她能记住划几下屏幕可以找到那个图标,如果找不到那个图标,她就会按下home键回到初始屏幕,然后再次执行同样的操作。但是一旦到了使用鼠标和树形菜单的windows系统下,我经常会听到她找不到应用而生气的大声哭。

有人(尤其是开发人员)会说,这三个例子中的问题,甚至都不是缺陷:

首先,客户没有提出明确的需求;

其次,只要使用“正确”,软件的功能都可以“正常的”完成;

再次,其他公司的大部分软件都是这么做的,而且似乎卖得也不错。

然而,用户只要有选择权,她们就会用脚投票,放弃那些“烂”软件。

最后,由社会因素导致的“真正的”缺陷,我也能举出半打,比如说时间:

我曾经有篇博客中讲过时间因素导致的缺陷。时间是一个典型的社会因素:对程序员来说,时间不过是简单2012073112000001(2012年7月31日12点零1秒)十六位字符,但是在实际的社会中,时间就会涉及到时区、原子时、世界时、闰年、闰月、闰秒,如果读者有心,可以去检索一下,前面列出的任何一个时间因素都造成过严重的软件缺陷。

所以,个人主张,软件——尤其是那些以消费用户为目标群体的软件——测试必须搬出我们舒适的带有中央空调的办公室,走入到社会中去。

一旦我们把软件测试“搬出实验室”,就会发现:那些在实验室看起来正常的东西对于客户来说就“不正常”——具体例子看前文。

一旦我们把软件测试“搬出实验室”,就会发现:影响软件质量的因素开始迅速复杂化。

比如最近我坚持使用 TDCDMA 网络的手机,因为我知道许多商人需要依靠中国移动网络接打电话。但是,大部分移动app对TDCDMA网络的兼容性都有问题,在 WCDMA 网络下就很好:这是因为 TD 网络是独生于中国的网络,国外没有。

比如我的家在近郊,我很想知道有多少移动互联网公司会测试在弱信号情况下的软件稳定性?

比如一旦考虑到需要适配十种分辨率,几十种品牌的三百种安卓平台,安卓app的测试复杂程度就会迅速膨胀。

比如考虑到软件的用户群体的多样性,任何一个在实验室里正确的功能最终对用户来说可能都是灾难:由于我老婆使用浏览器的习惯,IE8在她手下崩溃的频率要高很多。

比如考虑到业务的复杂性,胡乱的使用输入框而不对输入数据进行控制,最后都可能导致灾难性的后果,而一家企业,一个医院的业务复杂程度,岂是几篇博客可以说清的?

一旦我们把软件测试“搬出实验室”,我们就会发现,现有的测试是大大不足的,而且这种测试是单纯靠工具,代码很难测试全面的。

向计算机解释人类是由于何种脑残的原因,通过夜观天象开始计时,结果每每发现这种记时误差很大于是找出各种闰年,闰月,闰秒来弥补?快省省吧,Linux内核号称是由这个星球上最会写代码的人搞出来的,由于2012年某一天凭空多出一个闰秒,多少Linux核心进程死锁服务器挂掉这种事情,他们会随便告诉别人吗?

向计算机解释为什么我的老奶奶在七十岁以后手开始抖动以至于在于无法完成哪怕一次鼠标的双击操作?快省省吧,双击操作绝对是反社会软件设计的典型:如果你跟朋友打招呼时拍一下脑袋,他会认为是亲昵的表示,想象一下这时你来了个“双击”,嗯,很可能你们要开打。

一旦我们把软件测试“搬出实验室”,我们就会发现,手工测试人员是宝贵的:

他们似乎是团队中那个真正像个“人”那样思考的人……

说到这,大家应该清楚我的观点了,对于手工测试工程师来说:别光盯着学代码,学工具,琢磨琢磨这个“社会”。

PS: 单身程序员们,如果下次你用“这是特性不是缺陷”来搪塞测试人员报的“应该双击而不是单击”缺陷时,请花几秒考虑一下这个场景——恰恰就是你们这种木有社会责任感的行为,导致漂亮的银行妹子每天加班,没时间跟你约会,所以你才单身的…好吧…这个 bug 你改不改?

 

本篇完,后续敬请期待。@柴阿峰 授权伯乐在线使用,转载必须经过作者书面允许,邮箱:chaiafeng#163.com

 

收藏 评论

关于作者:柴阿峰

柴阿峰:比搞技术的相声说的好,比说相声的测试懂得多。反技术教条主义,反测试无用论。专注于开源测试技术、半自动化测试、测试架构、测试方法等的研究。(新浪微博:@柴阿峰 ,邮箱:chaiafeng#163.com) 个人主页 · 我的文章

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部