古人有云:千里之行,始于足下;九层之台,起于垒土。在软件测试中把每一个缺陷遏制在初期萌芽状态,以最低的成本修复缺陷是每一个测试人员的最基本守则,也是每一个测试人员的梦想。近期,我在所负责的一个软件测试项目中,因为时间紧张在接手项目后就立即开始运行程序进行测试,结果不尽人意。在反思中我得到一个经验教训是:软件测试不应该忽视静态测试,否则事后的补救将会是积重难返。
忽视静态测试,后果将会积重难返
在G.J.Myers的经典著作《软件测试之艺术》(The Art of Software Testing)中,软件测试被定义为:程序测试是为了发现错误而执行程序的过程。他认为测试是执行程序的过程,也就是在代码完成后,通过运行程序来发现程序代码或软件系统中错误的过程。但是,这种测试方式并不能在代码完成之前就发现系统需求、系统设计上的缺陷,而是把需求、设计上的问题遗留到后期,结果就会造成设计、编程的部分返工。而且,需求阶段和设计阶段的缺陷还会产生放大效应,大大增加了软件开发的成本和周期。这是非常不利于保证软件质量的,这种测试思想主要是受软件开发瀑布模型影响。
一般来说,在进行系统测试的功能测试阶段时,基本上编码工作已经完成。这个时候所发现的缺陷问题,是需要付出比较高的代价去修正它的。在分析缺陷成本上,有以下公认的结论,就是缺陷发现的越晚,修正的成本就越高。测试阶段修正缺陷的成本是编码阶段约4倍的关系。所以,为了减少修正成本,缺陷被发现的越早越好。
因此,在编程阶段就找到代码缺陷是很多测试人员的梦想。幸运的是,我们的确有这样的方法,就是不用等到编码结束就可先做静态测试,它可以在系统开始时的需求讨论、功能设计的时候就进行测试。例如,所有的书面的甚至非书面的文档、资料、方案等都可以成为静态测试的对象。通过静态测试在编码之前就把问题遏制在萌芽中,从而大大降低开发和测试的成本。所以,为了更早地发现问题,我们需要将测试观念延伸到需求评审、设计审查的活动中去。延伸后的软件测试就引出了两个概念,分别是静态测试和动态测试,而且静态测试显得更为重要。
什么是静态测试?
(1)什么是静态测试
静态测试是指不运行被测试程序而寻找程序代码中可能存在的错误或评估程序代码的过程。静态测试的特点是不需要运行代码,也不需要对代码编译、链接和生成可执行文件。它是通过分析或检查源程序的方法、结构、过程、接口等来检查程序的正确性。目的在于找出缺陷和可疑之处,纠正软件系统的描述、表示和规格上的错误,也是进一步执行其它测试的前提。
(2)静态测试的基本内容
在实际使用中,静态代码检查比动态测试更有效率,更能快速找到缺陷。按经验估算,一般能发现30%~70%的逻辑设计和编码错误的缺陷。但是静态代码检查非常耗费时间,而且代码检查需要丰富的知识和经验积累。
静态测试包括代码检查、静态分析两种途径。它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。代码检查包括桌面检查、代码审查、代码走查和技术评审等。主要检查代码的设计是否一致性、代码是否遵循标准性和可读性、代码的逻辑表达是否正确性、以及代码结构是否合理性等。静态分析则是一种计算机辅助的静态分析方法。主要对程序进行控制流分析、数据流分析、接口分析和表达式分析等。静态分析的对象是软件程序,程序设计语言不同,相应的静态分析工具也就不同。
文章来源于领测软件测试网 https://www.ltesting.net/