李宏伟
随着软件产品在各个应用领域的普及和发展,软件的质量问题越来越成为大家关注的焦点。质量不过关的软件在用户的使用过程中可能会出现各种意想不到的问题,因此,软件用户迫切希望能提高软件使用的可靠性,软件测试就逐渐担负起软件开发过程中的“质量监督员“的作用,重要性不言而喻!
软件测试方法可以分为静态测试和动态测试。
静态测试是针对需求说明书、设计文件等文档和源程序进行人工检查和静态分析,以保证软件质量。静态测试能有效的发现软件中30%到70%的逻辑设计错误和编码错误。动态测试则要在计算机上实际运行被测软件的代码模型,通过选择适当的测试用例,来判定运行结构是否符合要求,从而测试软件的正确性、可靠性和有效性。它是一种检错技术,根据功能划分为白盒测试和黑盒测试。黑盒测试侧重考虑组件的行为和结构;白盒测试侧重组件的内部结构,它独立于特定的输入输出行为,保证对象动态模型的每个状态与对象之间的每次交互都得到测试。白盒测试是对软件工作过程的细致检查,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同测试点检查程序的状态,确定实际的状态是否与预期的状态一样,因此白盒测试又成为结构测试或逻辑驱动测试。白盒测试一般选用最少量的可以有效揭露隐藏错误的路径进行测试,所以如何设计软件测试用例是这种方法的关键。
软件测试活动主要包括单元测试、集成测试、系统测试。
a.单元测试试图根据用例模型中的用例找出参与对象或参与子系统中的错误。单元测试主要是测试构成软件系统的模块即对象和子系统。
b.等价测试是黑盒测试技术。假设对一个类的所有成员都按照类似的方式运行,那么将可能的输入都划分为等价类,每个类选择一个用例,从而将测试实例的数量降到最小。等价测试由两步组成:确定等价类和选择测试。每一个等价类,至少选择两条数据:用来检验普通用例的象征性输入,以及用来检验组件处理异常能力的无效输入。所有等价类都确定后就要确定用于每个类的测试输入覆盖所有的等价类。
c.边界测试是等件测试的特例,主要考虑等价类的边界条件。边界测试要求从等价类的边缘选择元素,提出边界条件时,一定要测试临近边界的合法数据即测试最后一个可能的合法数据以及超出边界的非法数据。
d.路径测试是白盒测试技术。至少测试一次代码的所有可能路径,大多数错误将被发现。路径测试技术是为命令语言开发的,它特别依赖程序的控制结构,只能通过检查程序中的路径查出结果的错误。
集成测试使综合起来测试已经单独测试过的组件并找出错误的轰动。系统结构测试是集成测试的顶峰,集成并测试两个或多个组件。
集成测试策略如下:一次性组装测试、自底向下测试、自顶向上测试、多层结构测试。
a.一次性组装测试策略。假设所有组件一开始都经过单独测试然后作为单个系统一起测试。虽然一次性组件策略听起来很简单但它的花费很高,如果测试到故障很难查出导致故障的特定组件的正确位置,其优点是不需要附加任何测试驱动和存根。
b.自底向上测试策略。首先单独测试底层的每个组件然后把它们与上层组件集成起来。测试驱动用来模拟还没有集成的高层组件。它的优点是很容易找出故障,缺点是最后才测试最重要的系统即用户接口的组件。
c.自顶向下测试策略。首先对顶层组件进行单元测试,然后把它们与下层组件集成到一起,当新一层的所有组件都一起测试完毕后就选择再下一层进行测试;另一方面,将组件逐个加入测试中,如此反复直到所有的层次都包含在测试中。它用测试存根来模拟底层中还没有集成的组件。自顶向下测试的优点在于它从用户借口组件入手,从需求得到的同样一组测试可以用来测试复杂度逐渐增加的一组子系统。它的缺点是非常耗时而且很容易出错,通常测试重要系统需要大量测试存根。
d.多层结构测试策略。综合了自底向上和自顶向下策略,试图利用这两种策略的优点。多层结构式测试过程中,测试人员必须能够再次规划或将子系统的分解与三层结构映射起来(一个目标层和上下两层),将目标层作为注意的焦点就可以并行地进行自顶向下的测试和自底向上的测试。一般来说,与自顶向下和自底向上的测试相比,多层结构测试时间要短很多。
集成完组件后系统测试确保整个系统与系统的功能和非功能需求保持一致。系统测试统一测试的所有组件,作为单一的系统确定场景的误差。场景来自分析和设计系统中确定的问题说明、需求和设计目标,分别如下:功能测试、性能测试、验收测试、安装测试。功能测试也称为需求测试,功能测试是黑盒技术。从用例模型中找出测试实例。在功能需求比较复杂的系统一般是不可能根据所有的有效和无效输入测试所有用例。性能测试找出系统设计期间选定的设计目标与系统之间的差异。在性能测试期间执行的测试有:强度测试、容量测试、安全性测试、计时测试、恢复测试。安装测试,系统验收后就在目标环境中进行安装。一个好的系统测试计划允许系统从开发环境移到目标环境中进行简单的重新配置。安装测试的预期结果是安装的系统正确地处理所有的需求。大多数情况下,安装测试重复目标环境中功能测试和性能测试执行的测试实例。
随着全面质量管理思想在软件开发领域的应用,软件测试贯穿软件开发的全过程,包括从软件需求分析、软件概要设计、软件详细设计、编码、集成、验收等各个工程阶段,对于识别和控制软件缺陷、提高软件质量祈起到了明显的成效。