很多的软件公司都认为软件测试很重要,但基本上国内大部分的软件公司都只是象征性的请一到两个测试人员负责所有项目的测试。因为影响软件测试的因素太多了,时间限制、资源短缺、预算不足等等。于是开始来减少软件测试的投入了。那么我们不禁要问一句,软件测试到底是成本花费呢,还是一种长期的软件投资呢?
一、引言
随着软件市场的成熟,人们对软件作用期望值也越来越高,软件的质量、性能、可靠性等方面也正逐渐成为人们关注的焦点。目前,中国软件产业在产品功能和性能测试领域都存在着严重不足,中国软件企业已开始认识到,软件测试的广度和深度决定了中国软件企业的前途命运。
软件测试并非传统意义上产品交付前单一的“找错”过程,而是贯穿于软件过程的始终,是一个科学的质量控制过程。国外成熟软件企业,1个软件开发工程师对应1-2个软件测试工程师,而国内软件企业,平均8个软件开发工程师才对应1个软件测试工程师,比例严重失衡。
二、软件测试行业现状
软件的大工业生产决定了软件测试是生产的必不可少的环节。对于人员配置,一直以来流行一种五比一的标准说法。 从公司内部看任何时候都是远高于这一比例。从近一个时期看,开发与测试工作量的比重甚至达到了二比一。同类型成熟产品之间的竞争容易取胜的方法是提高质量。
软件的大工业化并不是在消灭个体户和小作坊,只是减少了他们直接与终用户打交道的机会和必要。如今他们生产和包装软件的目的在于等待大公司的收购。为此,在后阶段需要进行“终用户测试”。
与此同步的是,软件测试市场已成为软件产业中的一个独特市场。在美国硅谷地区,凡是软件开发企业或是设有软件开发部门的公司,都有专门的软件测试单位,其中软件测试人员的数量相当于软件开发工程师的四分之三。在这些公司或部门中,负责软件测试的质量保证经理的职位与软件开发的主管往往是平行的。据了解,在软件产业发展较快的印度,软件测试在软件企业中同样拥有举足轻重的地位。
与国外相比,国内的软件测试业状况又如何?目前,国内软件测试市场表现实在有点令人尴尬。中国市场中的软件开发公司比比皆是,但软件测试公司则如凤毛麟角,“市场化的第三方测试如同刚刚出生的宁馨儿,目前的市场几乎可以忽略不计。”
为什么国内的软件测试市场会如此嬴弱,到现在企业才开始关注呢?以笔者之见,究其主要原因,首先是因为企业对软件测试的重要性理解不够。很多人认为程序能试运行基本上已经成功,没有必要成立专门的测试部门或设立测试岗位。
另一方面,软件开发企业在为软件开发支付费用后,不希望再为软件的测试支付新的成本,而项目甲方则往往认为开发合格的软件是软件开发企业的责任。即使有些项目的开发方或委托方有意对软件进行第三方测试,也会考虑到在测试过程中往往需要软件开发商提供源代码,担心其知识产权遭到侵犯。这是软件测试市场无法长大的又一个重要原因。此外,软件开发企业不重视利用外部的测试力量进行测试也是因素之一。
三、困惑的软件测试员
很多时候,投资在测试上的人力及财力,将由许多的因素来决定。而其中软件测试人员是很重要的考虑因素。其实组织在软件测试方面大的成本开支是测试人员上。在软件工具及测试设备都比较接近的,竞争对手之间在软件测试方面的竞争,主要体现在软件测试人员上。
近期的无忧指数显示,软件测试工程师已经成为紧缺的人才之一,该类职位的需求主要集中在沿海发达城市;而从企业分布来看,民企需求量大,外商独资欧美类企业需求排列第二。目前,国内软件测试人才紧缺的现状已经凸现出来。
笔者认识一位朋友A,做专业的测试工程师已经有一年多的时间了,目前仍然在做较为底层的测试。有时候也会写写测试需要的代码,但还没有开始设计整个项目测试案例。目前A正在为某一软件公司做软件测试,工作的流程非常严谨而明晰,这自然也意味着枯燥的重复。枯燥并没有淹没A的工作激情,发现一个Bug带来很大的成感,特别是想到每天将会有几百万人通过使用没有这个Bug的软件准确无误的达到他们的目的。
前途在A心目中是非常明朗的,颇有一些“随需”择业的味道。曾经有媒体报道过近来软件测试工程师在职场需求中的风光景况,尽管IT行业的总体需求仍然疲软。在北京和上海等地,测试员的需求量占到了招聘总量的近1/3。另一方面,A认为从测试员成长为软件项目管理者是更有优势的。
例如微软的开发方式本来是“测试驱动”的,在测试过程中发现了墙角还有没涂到油漆的小块,开发则根据这个思想再补上那一块。测试的经历恰好让人更能从用户的角度来考虑问题,更能深入了解程序开发过程中可能出现的问题,这都是成为一个的项目管理者的必要条件。尽管可能一整天都为了一个小控件“循规蹈矩”地反复测试并撰写测试文档,这样的重复被A当作了重要的积累。A喜欢新东方学校的徐小平新书《骑驴找马》中的一句话:“重复做汉堡,是麦当劳;重复煮咖啡,是星巴克;重复教托福,是俞敏洪;重复做好事,是活雷锋。”
测试工作,在好多公司说到底还是不够重视。如果管理层从控制成本考虑,不打算对测试投入太多,例如对用了2年左右的测试工程师不想加更多的薪水留人怎么办呢?那我们要问了,什么是软件成本?不仅仅是生产过程中产生的费用叫成本,未来因为产品缺陷产生的服务费用也是成本,如果产生了客户退货、产品召回,也是要算成本的哦!作为测试的工程师要学会使用数据说话,把产品缺陷造成的成本数据搜集起来,关键的时候拿出来给重视成本的领导或管理层查阅方能实现工作向工作量的转变。
四、测试的成本
测试成本的要素包含很多方面,是否写了测试代码只是其中一个重要部分,是否采用JUint以及Mock对象更加不是对其评价的决定性因素。对测试的更好评价应该是额外代码、测试可重复性、测试范围和边界值识别等综合构成(测试对设计的作用是更高级的判断)。
对于涉及到数据库持久方面的测试、涉及到UI(浏览器或者富客户端)交互的测试以及多对象多方法过程的测试(也可体现为UI交互,这里是指独立性质的)等,以及上面说到的一些问题(不再重复),是我们现实测试实践要面临的问题。
对这些问题的解决,会更多的涉及到项目具体情况的选择和具体项目和团队的情况来做佳判断,这是成本的意义。
在软件开发的早期,软件开发只是编码及部署。但随着软件行业的发展,开发企业开始在发布前进行测试。因此,这个意义上来说,软件测试是成本。但从更普遍的意义上来讲,软件测试其实是一种提供软件质量的投资。
软件测试看似成本,但其实可能是一项可以减少将来若干不必要费用的投资,同时还可以为企业赢得良好的口碑。而达到这一目的解决方案,主要有:采用测试驱动开发方式;确保每个小功能的模块都得到很好的测试,并建立可持续的资源整合环境;进行可靠的整体测试。软件测试终将转化成为节约成本的开支。不论它是产品开发、软件升级、或是软件维护。
许多统计资料表明,开发过程每前进一步,发现和修复一个缺陷的平均成本要提高10倍.那么是不是说找缺陷不重要了呢?当然不是。软件测试的另一个经济目标是尽早发现缺陷,降低修复及售后服务成本。显然,每一个已发布产品中的缺陷除了会影响产品及企业的声誉外,还会直接增加产品的售后服务成本。无论是派人到现场调试,或研发、发布补丁程序都要远比在发布前的修复成本昂贵数十倍,甚至数百倍。
五、小结
软件测试的必要性已经完全为业内决策人士所接受。这是因为软件工业已经发展到了与其他主要工业相当的规模。经过十几年的发展,少数天才们手工作坊的世界已经转化为大工业生产的天下。由于Java的流行,我们更看到了组装生产线的模式。
在工业生产的传统行业里,测试是生产的有机组成环节,各道工序的测试、组装测试、出厂测试及致破坏性试验是生产目的实现的重要保证。
可以肯定,软件开发面临很多的困难,诸如发布时间紧、市场压力大、投资过高等。这些不能成为挤压软件测试投入的借口。因为软件测试是软件开以生命周期一个非常重要的部分。笔者认为,对于一些基于产品的公司或组织,软件测试作为一种投资可能更加适合一些,因为这样可以节约销售成本及技术支持成本。