隐形的软件质量
作者:网络转载 发布时间:[ 2012/10/30 9:56:50 ] 推荐标签:
近被问到了一个话题:软件的质量真的能完全看得到么?比如两款手机,一个是山寨机,一个是三星或者Google Nexus,同样是安卓系统,同样的配置甚至装上同样的App,那么它们从测试的角度功能可以说Function是完全一样的。它们的质量的差具又在哪里呢?可能这个例子是手机还可以划分到硬件范围,那么举一个纯软件的案例,同样的两款软件,比如都是微博、或者浏览器,当他们外在的功能几乎完全一样的时候,你如何衡量他们质量的区别在哪里?
这是一个很有意思的话题,互联网的迅速发展和变化,改变了许多软件设计、研发的模式,许多曾经红极一时的书籍里提到的佳测试实践也好,测试理念和方法论也好在当前的时代,效率其实是非常低下的,甚至在许多情况下毫无意义,并适得其反的拖延了抢占市场的先机。软件测试的传统的流程是:开发人员写好代码,测试人员制定策略,编写用例,覆盖率,把所有的bug都找出来然后改正、回归再终发布。但是当代的软件测试,特别是互联网测试,夹杂了两个特点对传统的测试流程形成了致命的冲击:1. 需求很可能是时刻变化,传统测试的笨重流程根本无法适应需求的迭代更替。2. 市场Timing转瞬即逝,在许多情况下测试团队不会有足够的时间来执行全套测试,你可能面临代码提交之后2个小时要正式发布这样的挑战,如何在有限的时间完成对质量的把关,倍加重要。总结一点:团队要敏捷的开发,更要敏捷的测试
在过去三年的测试实践中,我遇到了这样一种情况:我们的研发团队几乎都是加拿大很的工程师,他们对需求的理解、代码的质量、单元测试都做得非常不错。于是我发现在进行功能测试的时候,QA在95%的情况下把功能确认了一遍执行正常完成了测试任务,在5%的情况下发现了一些显而易见更多的是UI的小问题,fire bug并快速的跟这些负责任的开发修复bug,测试任务也随之完成。其实从一个较长的周期来看,QA总是在不断的确认功能,不能有效的发现许多有价值的bug。这是为什么呢?因为开发人员本身具有不错的水准,他们接到某个功能研发的任务,能高质量的编写代码完成并本着责任心自己会多次确认(包括单元测试),而在一个架构较为成熟的系统中由于解耦合,不同的开发人员在不同的模块中所写的代码,又不太容易产生交互的深层次bug。这种情况下,QA按照传统的理念和流程,去一遍遍的安装、操作功能、确认功能正常后测试pass了,仔细想来,效率低下,且意义真的不大。
遇到过几个案例,经过测试团队测试通过后发布的产品,在客户那里得到了一些不太好的反馈:比如网页加载速度不理想、比如有的功能在跑的时候网线掉了整个server挂了,比如一些莫名其妙的错误弹出来,还有特定的条件下例如在用户频繁操作了一个月以上才引发的一些性能问题和不好的用户体验……这些案例无疑都是测试团队的警钟。并不是大家在确认功能交付的时候做得不够仔细或者工作不努力之类的,笔者觉得这是因为软件在表面的功能健康之余,还存在着一种笔者叫做“隐形的质量”的东西。
所谓的“隐形的质量”,可以这样来理解,面对同样的需求使用同样的技术,一个国内的二流团队来开发跟Google这样的精英团队来开发。经过基本的功能验收发布之后,可能从功能上来看,二者没有太多的区别。但是不用问也都知道,如果说二者的质量是对等的,那是痴人说梦!那么在表面功能都一致的情况下,所谓二者的质量之差,可以理解成“隐形的质量”了。它可能包括的范围包括了传统测试理论里的:系统的稳定性、性能、兼容性;还包括笔者所想到的:代码的质量、架构的合理性、消息传输效率、数据存储搜寻命中的效率、软件持续运行的各项健康指标数据模型、甚至包括了UI的人机交互等许多概念。后面所提到的方面,很少在测试团队中听到,但却都是在当代软件行业非常影响产品质量和成败的因素。笔者认为,往往那些的团队和公司之所以能在竞争中屹立不倒,都在“隐形的质量”方面做到了一定程度的保障。
自动化也是在测试行业一个被反复炒作的概念。其实道理也是一样的,花了许多时间建立了基于功能的自动化测试,这本身没错。但往往在的开发团队提交交付的代码中,仅仅基于功能的自动化是发现不了多少bug的。自动化的目的是代替人的繁琐重复的操作,这一点没错,但考虑到维护的成本和变化更新的代价,需要谨慎为之。如何在“隐形的质量”这个领域中探索测试的方法和流程,并有效的结合自动化来快速的完成测试,这可能才是未来软件测试的发展趋势。笔者听过的两个案例分别来自Facebook和Google:Facebook没有测试工程师,或者说所有的开发工程同时也是测试工程师,他们编写对自己提交代码的自动化覆盖测试,但更重要的是他们研制了各种工具来监控采集上线产品和后台server、数据库在运行期的各种关键指标,由此来反馈产品的质量。而Google,他们有自己的测试工程师、也有测试开发工程师,在Google里不会把开发和测试分成不同的学科,测试和开发是齐头并进的,测试不是独立的实践活动而成为了开发的一部分,它们认为质量是当你把开发和测试搅拌均匀分不清彼此的时候才能产生的。他们甚至把测试当成了产品的一个功能从而让整个团队对产品的质量负责。总结一句:Facebook无测试人员所做的自我监控分析,和Google少而精的挑选测试人员融入开发团队不分彼此共同保障产品质量,正是它们为了保障“隐形的质量”做的特别好的方面。
说到这里,笔者觉得当代的测试行业已经从一个相对统一的测试实践和理念的经验圈子中跳了出来,在各自摸索中前进探索适合自身的测试工具和测试流程。更多关于这个话题的思考和讨论,笔者也会继续写在blog中,推荐一本书“How Google Test Software”,里面介绍了作为全世界发展快的互联网公司,Google的测试工程师是如何来完成测试任务并保障产品质量的。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11