测试团队能保证软件质量吗?
这是笔者经常在面试时问的一个问题,可能每个面试者都有不同的理解,不同的看法,给出不同的回答。有人认为只要测试团队做好测试(主要指系统测试)就能保证软件质量;有人认为不能,但不知道具体怎样做才能保证软件质量,等等。
不管面试者怎么认为,笔者始终认为测试团队在常规情况下都不能保证一款软件的质量。而测试团队更多是发现反馈既定的软件存在或潜在的缺陷,以期尽早的修复,避免后面交付和投入使用时出现灾难性损失。也就是说,测试仅仅是保证软件质量的重要一环,也应该是软件开发周期中验收前的最后一环。而开发团队作为软件的实现者,也是软件质量非常关键的一环。所以下面我会从软件开发环节(这里主要指编程及交付测试版本)谈谈,要保证软件质量要注意些什么和做些什么。
开发(团队)应正确认识测试
测试(团队)是开发(团队)的保姆,有了测试就可以那么任性?在很多情况下,开发都认为有了测试,那就可以任性的编程。从而一到版本交付就出现大量的错误,让测试工作难以继续而不得不让其返工。有时开发连完整的编译都没通过,就交付版本测试,使得部署后根本不能运行,甚至根本不能正确部署。一些浅显的bug反复的出现,不管在测试什么阶段。在这样的情况下,软件敢交付吗?测试敢说保证质量吗?肯定不能!
测试通常情况下都不能跨越式的提高软件的质量。如一件非常糟糕的美术作品,哪怕后面花再多的时间和笔墨去完善它,也总会有瑕疵,而不可能成为传世之作。同样,一款软件,如果开发人员不注重编程质量,导致代码中存在大量的错误和漏洞,这在测试(主要指系统测试)中不可能一一都发现,从而为软件后期的交付和使用带来严重的质量隐患。
软件如开发的孩子,大部分开发潜意识是都这么认为的。往往测试不停的提bug,开发会认为测试人员是在给自己找难堪,如在不停的指责自己孩子一样。大可不必,实际测试也是希望软件最后能取得成功,也是为了“孩子”的健康成长。相信负责任的开发也一样,也希望自己编写出的软件能获得社会和客户的认可。所以共识是统一的,如果希望自己的“孩子”少受指责,那就认真培养它。
为什么开发要重视编程质量,除了上面提到的以外,还有很多。但不管怎么样,开发是保证软件质量的重要一环,这一点是不可否认的。
开发如何做自测
上面已经提到关于软件开发质量对保证软件质量的重要性。那么作为一个开发者,应该去怎么保证软件的质量呢?除了编写代码需要遵循基本的标准规范外,还应该对开发的程序做好自测。具体可以有:
了解测试的基础知识,在代码实现时也应站在测试的角度去考虑一些问题。如功能测试方法有边界值分析法,如果一个模块在一个范围区间取值,针对取值范围做处理,那不是需要考虑边界值的处理情况?
测试签入库前,做好调试工作,确保自己提交部分代码是正确的,能通过编译器。往往一些懒惰的开发人员,会有意识的忽略这最基本的工作。
做好代码走查,让代码逻辑清晰易懂。这个代码走查的重要性就不用说了,大家都懂。
可能情况下做好重要模块代码的单元测试。单元测试,能发现80%及以上的程序问题,这是大部分文章对单元测试重要性的说明。可能没有那么夸张,但单元测试肯定能发现绝大部分的软件错误。
在提交测试版本前,做好预发布及测试,开发之间可以相互验证下基本功能。这个是我所在公司目前常用的做法。它的好处是不可置疑的,在没做和做了之后,测试版本易见的bug有明显的减少,并减少了测试版本回归的迭代次数。
开发与测试应该是好搭档
开发和测试是一种协作互补关系。开发更多注重功能的代码逻辑实现,而测试更多站在用户的角度去验证功能是否正确,软件是否能满足用户需求。如当软件存在性能问题时,测试可以根据性能设计执行定位到瓶颈,而开发也能根据测试定位的瓶颈快速修复它,避免灾难性故障发生的可能性。而且有些问题不是开发或测试单独能处理的,需要相互紧密的沟通,进行思想的碰撞才能找到问题并修复。
总结:
保证的软件质量绝不仅仅是测试团队的事情,同样需要开发团队的努力。上面仍然没有说道怎么全方面的去保证一款软件的质量,乃至“产品”的质量。因为精力有限,后面有机会我再找时间详细谈下这方面的话题。