软件测试漫谈

企业动态
因软件缺陷而导致重大负面影响或损失的例子数不胜数,业内顶级厂商都不能幸免究其原因,几乎都可归入软件测试不够充分。如此多的案例,一方面佐证了软件测试的重要性,另一方面,也说明了做好软件测试远不是一件容易的事情。

2007年5月18日,众多使用诺顿防病毒软件的中国个人用户和企业用户在重启系统后出现蓝屏,系统不能正常使用。虽然诺顿当天下午就给出了解决方案,但是诺顿作为专业安全公司的信誉受到了严重影响,损失重大。该事故原因非常简单,就是当天的诺顿更新把两个简体中文版的Windows系统文件误当成了病毒。这个本该在实验室的测试中能被轻易发现的问题,却由于各种技术或管理原因被漏掉了。

因软件缺陷而导致重大负面影响或损失的例子数不胜数,业内顶级厂商都不能幸免究其原因,几乎都可归入软件测试不够充分。如此多的案例,一方面佐证了软件测试的重要性,另一方面,也说明了做好软件测试远不是一件容易的事情。

那么,什么是测试?如何做好测试?

一、软件测试的经典定义

即使是有经验的测试专家,也会因其自身经验和理念的差异,对软件测试给出不同的定义。业界引用较多的是G.J. Myers在其经典著作《软件测试之艺术》(The Art of Software Testing)中给出的测试的定义:测试是为了发现错误而执行程序的过程。 (The process of executing a program or system with the intent of finding errors.)

另一个经典的定义是IEEE 1999年对测试的定义:测试是在特定条件下,操作一个系统或部件,观察和记录结果,对系统或部件的某些方面进行评估的过程。(The process of operating a system or component under specified conditions, observing or recording the results, and making an evaluation of some aspect of the system or component).

这两个定义代表了两种主流的测试理念,前者强调测试的目的是为了发现问题,而后者则认为测试的目的是验证(在特定条件下)没有问题,两者各有特点。这两种测试理念都有不少追随者,在实践上,一般以某种理念为主,同时吸取另一种理念的长处。

以发现问题为目的的测试,会引导测试工程师全力投入易发现问题的测试方向,效率相对较高;但弊端是会忽略不易发现问题的方面,即使是系统的关键部分,也可能因不易发现问题而导致测试投入不够,事实上,“不能发现问题”本身就是主观认定的,不测更无法发现问题。这种测试理念如果把控不好,很容易导致测试方向错误,遗漏重要问题。

以验证(在特定条件下)没有问题的测试,这种理念最大的好处是测试范围明确,即所谓特定条件下,常见的是以产品需求、规格、应用场景来确定测试范围。一旦范围明确,测试计划和测试策略都相对容易制定,测试执行也可以有条不紊的展开。不好的地方,是必要的覆盖测试会降低平均问题发现效率。

不同的测试理念,必然导致不同的实践结果。但即使测试认知水平相近,其实践结果一样可能迥异。事实上,测试要真正起到质量把关作用,认知是前提,在实践中的制度设计、资源投入也非常关键。

首先,制度设计上,测试团队必须保持相对独立,和开发团队形成互相制衡、共同进步的关系。测试团队如果在组织管理上隶属于开发团队,则必然丧失独立性,只会沦为橡皮图章,质量控制也成为空谈。

其次,测试消耗巨大,必须保证资源投入。统计表明,一个大型的软件项目,测试相关的时间和费用往往占到50%以上,这将对商业公司的质量决心构成严峻考验。只有始终把质量放在第一位,才能做到在测试上的持续投入。

二、H3C的测试观

H3C更认同IEEE的测试观念,认为从质量控制理论出发,从关注客户应用的角度,验证没有问题比发现问题更重要。测试覆盖度是软件质量控制的关键衡量指标,只有全面验证了产品的各项规格,验证了产品在各种可能的客户应用场景下都没有问题,才能对质量有相对的信心。应该在确保测试覆盖度的前提下,再考虑尽可能高效的发现问题。

在这种认知下,H3C基于多年的测试实践给出了自己对于测试的定义:测试是指为了高效的验证被测系统是否满足目标客户的需求,是否提供了规格定义的功能和性能,而开展的一系列活动的总和。这个定义反映了H3C的测试理念,同时也是H3C测试实践的指导原则,指导H3C测试团队实施“好”的测试。

首先,测试必须目标明确,有的放矢,即验证规格定义的功能和性能,验证是否满足了客户的各种需求。H3C要求产品的测试需求分析和测试方案设计必须紧紧围绕产品规格、产品定位、目标客户的业务模型和应用场景展开,形成覆盖完备的测试用例体系。在测试执行阶段,则提倡二八原则,即80%的精力投入到已有测试用例的覆盖测试中,20%的时间可供测试工程师发散测试,投入到其认为可以更好的发现问题的活动中,充分发挥工程师的主观能动性。

其次,测试是一个系统工程。一个好的测试,需要系统的组织各项测试活动,全面的制定测试计划和测试策略,合理应对风险,设定测试目标,安排测试内容,开展测试执行,评估测试结果与产品质量,确定什么时候测试可以结束,分析测试如何改进等。H3C通过PTM(Product Test Management)构建了一套完整的质量保证流,对贯穿产品生命周期全过程的测试活动进行规范,H3C测试团队从产品立项第一天起就开始介入,每一个开发活动,都设置了对应的测试活动来进行质量保证,并通过事前引导、事中监控、事后审计来使得质量控制措施落到实处。

最后,高效的测试需要有强有力的工具和先进的方法支撑。所谓测试无极限,没有工具和方法的支撑,在有限的人力、时间和资源情况下,覆盖近乎无穷尽的测试需求是一个不可能完成的任务。在测试分析设计阶段,H3C提供经过实践检验的工程方法,指导测试工程师通过分析分解,抽象融合,以相对较少的测试方案有效覆盖最多的测试需求。在测试执行阶段,则有大量自开发和第三方的测试仪器和测试工具,辅助测试工程师高效率的开展复杂的测试,并且通过公司多年开发积累的系列自动化测试脚本来覆盖产品功能,保证每个发布版本达到100%的测试覆盖度。

三、结束语

测试,从来都不简单,也容不得半点马虎,只有知行合一,踏踏实实把每个环节做到极致,才能通过用户应用的最终考验。

责任编辑:遗忘者 来源: 51cto.com
相关推荐

2010-03-01 17:25:12

Python 测试框架

2009-02-24 10:31:33

软件测试工程师角色定位

2010-05-05 09:22:10

Canonical开源软件

2017-05-02 08:58:54

2009-06-18 11:03:47

经理 软件测试 行业

2009-07-01 16:01:48

软件

2015-08-31 13:59:28

软件定义网络SDN

2020-02-26 08:16:32

AIoT人工智能物联网

2011-01-21 14:33:30

软件测试

2017-01-12 08:51:41

2011-04-18 10:46:39

接口测试

2013-05-15 15:05:53

2011-06-14 14:27:43

灰盒测试

2011-04-18 17:03:59

动态测试软件测试

2020-07-03 11:31:50

云计算测试云计算软件测试

2012-11-28 01:51:53

2010-06-04 16:59:20

2011-05-19 16:47:50

软件测试

2011-01-19 10:54:14

软件评测师

2020-02-04 09:09:38

病毒技术故障
点赞
收藏

51CTO技术栈公众号