软件测试过程
软件测试是有阶段性的,软件测试过程与软件设计周期有相互对应的关系。从过程来看,软件测试可分为单元测试、集成测试、系统测试和验收测试等一系列不同的测试阶段。
概述
单元测试的目的是保证每个模块单独运行正确,多采用白盒技术,检查模块控制结构的某些特殊路径,期望覆盖尽可能多的出错点。
经单元测试后的模块,组装为软件包,对软件包进行集成测试,主要测试软件结构问题,因测试建立在模块间的接口上,所以多为黑盒测试,适当辅以白盒测试技术,以便能对主要控制路径进行测试。
系统测试主要是检验软件是否满足功能、行为和性能方面的要求,这一步完全采用黑盒测试技术。
验收测试是检验软件产品的最后一道工序,与前面各种测试过程的不同之处主要在于它突出了客户的作用,同时软件开发人员也要参与。
单元测试
单元测试是对软件设计的最小单元——模块进行正确性检验的测试工作,主要测试模块在语法、格式和逻辑上的错误。
单元测试应对模块内所有重要的控制路径进行测试,以便发现模块内部的错误。单元测试是检查软件源程序的第一次机会,通过孤立地测试每个单元,确保每个单元工作正常,这样比单元作为一个更大系统的一个部分更容易发现问题。在单元测试中,每个程序模块可以并行、独立地进行测试工作。
单元测试的重要性
从如下几个方面就可以看出单元测试的重要性:
-
时间方面
-
测试效果方面
-
测试成本方面
-
产品质量方面
单元测试的原则
-
单元测试越早进行越好
-
单元测试应该依据《软件详细设计规格说明》进行
-
对于修改过的代码应该重做单元测试,以保证对已发现错误的修改没有引入新的错误
-
当测试用例的测试结果与设计规格说明上的预期结果不一致时,测试人员应如实记录实际的测试结果
-
单元测试应注意选择好被测软件单元的大小
-
一个完整的单元测试说明应该包含正面测试和负面的测试
-
注意使用单元测试工具
单元测试的主要任务
-
模块接口测试
针对模块接口测试应进行的检查,主要涉及以下几方面的内容。
① 模块接受输入的实际参数个数与模块的形式参数个数是否一致。
② 输入的实际参数与模块的形式参数的类型是否匹配。
③ 输入的实际参数与模块的形式参数所使用单位是否一致
④ 调用其他模块时,所传送的实际参数个数与被调用模块的形式参数的个数是否相同。
⑤ 调用其他模块时,所传送的实际参数与被调用模块的形式参数的类型是否匹配。
⑥ 调用其他模块时,所传送的实际参数与被调用模块的形式参数的单位一致。
⑦ 调用内部函数时,参数的个数、属性和次序是否正确。
⑧ 在模块有多个入口的情况下,是否有引用与当前入口无关的参数。
⑨ 是否会修改了只读型参数。
⑩ 出现全局变量时,这些变量是否在所有引用它们的模块中都有相同的定义。- 有没有把某些约束当做参数来传送。
-
模块局部数据结构测试
-
模块中所有独立执行路径测试
-
各种错误处理测试
-
模块边界条件测试
单元测试环境的建立
在进行单元测试时,需设置若干辅助测试模块。辅助模块有两种,一种是驱动模块(Driver),用以模拟被测试模块的上级模块。 另一种是被调用模拟子模块(Sub),用以模拟被测模块工作过程中所调用的模块。
如图,往往被测模块依赖有另一个子模块,有时需要模拟子模块的行为来保证测试结果的准确性。如实际开发中,经常测试业务逻辑,其需要读写数据库,此时我们可以通过mock类实现模拟的数据访问层来保证测试结果的准确性与可靠性。
单元测试的主要技术
-
静态测试
-
动态执行测试
-
状态转换测试
<未完待续>