软件测试过程

软件测试是有阶段性的,软件测试过程与软件设计周期有相互对应的关系。从过程来看,软件测试可分为单元测试、集成测试、系统测试和验收测试等一系列不同的测试阶段。

概述

单元测试的目的是保证每个模块单独运行正确,多采用白盒技术,检查模块控制结构的某些特殊路径,期望覆盖尽可能多的出错点。

经单元测试后的模块,组装为软件包,对软件包进行集成测试,主要测试软件结构问题,因测试建立在模块间的接口上,所以多为黑盒测试,适当辅以白盒测试技术,以便能对主要控制路径进行测试。

系统测试主要是检验软件是否满足功能、行为和性能方面的要求,这一步完全采用黑盒测试技术。

验收测试是检验软件产品的最后一道工序,与前面各种测试过程的不同之处主要在于它突出了客户的作用,同时软件开发人员也要参与。

单元测试

单元测试是对软件设计的最小单元——模块进行正确性检验的测试工作,主要测试模块在语法、格式和逻辑上的错误。

单元测试应对模块内所有重要的控制路径进行测试,以便发现模块内部的错误。单元测试是检查软件源程序的第一次机会,通过孤立地测试每个单元,确保每个单元工作正常,这样比单元作为一个更大系统的一个部分更容易发现问题。在单元测试中,每个程序模块可以并行、独立地进行测试工作。

单元测试的重要性

从如下几个方面就可以看出单元测试的重要性:

  • 时间方面

  • 测试效果方面

  • 测试成本方面

  • 产品质量方面

单元测试的原则

  1. 单元测试越早进行越好

  2. 单元测试应该依据《软件详细设计规格说明》进行

  3. 对于修改过的代码应该重做单元测试,以保证对已发现错误的修改没有引入新的错误

  4. 当测试用例的测试结果与设计规格说明上的预期结果不一致时,测试人员应如实记录实际的测试结果

  5. 单元测试应注意选择好被测软件单元的大小

  6. 一个完整的单元测试说明应该包含正面测试和负面的测试

  7. 注意使用单元测试工具

单元测试的主要任务

  1. 模块接口测试

    针对模块接口测试应进行的检查,主要涉及以下几方面的内容。

    ① 模块接受输入的实际参数个数与模块的形式参数个数是否一致。
    ② 输入的实际参数与模块的形式参数的类型是否匹配。
    ③ 输入的实际参数与模块的形式参数所使用单位是否一致
    ④ 调用其他模块时,所传送的实际参数个数与被调用模块的形式参数的个数是否相同。
    ⑤ 调用其他模块时,所传送的实际参数与被调用模块的形式参数的类型是否匹配。
    ⑥ 调用其他模块时,所传送的实际参数与被调用模块的形式参数的单位一致。
    ⑦ 调用内部函数时,参数的个数、属性和次序是否正确。
    ⑧ 在模块有多个入口的情况下,是否有引用与当前入口无关的参数。
    ⑨ 是否会修改了只读型参数。
    ⑩ 出现全局变量时,这些变量是否在所有引用它们的模块中都有相同的定义。

    1. 有没有把某些约束当做参数来传送。
  2. 模块局部数据结构测试

  3. 模块中所有独立执行路径测试

  4. 各种错误处理测试

  5. 模块边界条件测试

单元测试环境的建立

在进行单元测试时,需设置若干辅助测试模块。辅助模块有两种,一种是驱动模块(Driver),用以模拟被测试模块的上级模块。 另一种是被调用模拟子模块(Sub),用以模拟被测模块工作过程中所调用的模块。

如图,往往被测模块依赖有另一个子模块,有时需要模拟子模块的行为来保证测试结果的准确性。如实际开发中,经常测试业务逻辑,其需要读写数据库,此时我们可以通过mock类实现模拟的数据访问层来保证测试结果的准确性与可靠性。

单元测试的主要技术

  1. 静态测试

  2. 动态执行测试

  3. 状态转换测试

<未完待续>