目录
1. 软件测试
-
一个成功的测试应该能发现迄今为止未发现的错误;
-
软件测试不能表明软件中不存在错误,它只能说明软件中存在错误;
-
开发中的每个环节都有可能产生错误,因此软件测试应该贯穿到软件开发的各个阶段中,且需尽早地和不断地进行;
-
测试中存在一种集群现象,即在被测程序段中,若发现的错误数目越多,则残存的错误数目也较多;
-
软件测试的目的是发现更多的错误,而不是证明软件的正确性;(易错)
-
软件测试分为单元测试、集成测试和系统测试。
2. 单元测试
侧重于模块中的内部处理逻辑和数据结构;
主要检查以下5个特征:
-
模块接口
-
局部数据结构:包括 输入参数是否使用了尚未赋值或者尚未初始化的变量(考过)
-
重要的执行路径
-
出错处理
-
边界条件
3. 集成测试
所有模块都通过了测试之后,把模块集成起来仍可能会出现穿越模块的数据丢失、模块之间的相互影响等问题,因此,需要模块按系统设计说明书的要求组合起来进行测试,即集成测试,以发现模块之间协作的问题。
像模块之间传递参数的错误,在集成测试中最可能测试出来。
集成测试:把模块按系统设计说明书的要求组合起来进行测试。
存在多种组合的集成测试策略:自底向上、自顶向下、一次性集成、明治集成等。
自底向上:通过不断合并底层模块来测试更高层模块的方式进行。在该方法中,需要写驱动程序来调用待测试的底层模块,主要的设计问题需要到测试后期才能发现。由于是从底层的模块开始测试,因此过程中不需要写桩模块。但需要设计驱动模块来辅助测试。
补充:
桩模块(Stub)是软件测试技术的一种,主要用在单元测试阶段。它是一种模拟被测试模块所调用的模块,而不是软件产品的一部分。桩模块可以模拟被测试模块依赖的其他模块的行为,但功能较为简单,只足以让被测试模块运行。
自顶向下:与自底向上相反,从最顶层的构件开始,逐步向下。需要设计桩模块来辅助测试。
三明治:结合自底向上和自顶向下两种测试策略。
优点:较早地验证了主要的控制构件和底层模块,并行测试程度较高;
缺点:需要写较多的驱动模块和桩模块。
一次性:对所有构件一次性测试,然后集成。
4. 回归测试
是在软件发生变更之后进行的测试,以发现在变更时可能引起的其他错误。
5. 黑盒测试
也称为功能测试,常用技术包括:等价类划分、边界值分析、错误猜测、因果图的报告。
6. 白盒测试
也称为结构测试,常用的技术包括:逻辑覆盖、基本路径测试。
7. 软件调试方法
-
试探法:根据错误的特点,猜测问题的所在位置,利用在程序中设置输出语句等,一步步地试探和分析错误所在。
-
回溯法:从发现错误症状的位置开始,人工沿着程序的控制流积往回跟踪代码,直到找出错误根源为止。
-
对分查找法:在该方法中,如果已经知道程序中的变量在若干位置的正确取值,可以在这些位置上给这些变量以正确值,观察程序运行输出结果,如果没有发现问题,则说明从赋予变量一个正确值到输出结果之间的程序没有错误,问题可能在除此之外的程序中。否则,错误就在所考察的这部分程序中,对含有错误的程序段再使用这种方法,直到把故障范围缩小到比较容易诊断为止。总而言之就是将错误范围一步步缩小直到找到错误位置。
-
归纳法:从测试所暴露的问题出发,收集所有正确或不正确的数据,分析它们之间的关系,提出假想的错误原因,用这些数据来证明或反驳,从而查出错误所在。
-
演绎法:根据测试结果,列出所有可能的错误原因,然后分析已有的数据,排除不可能或彼此矛盾的原因。再去选择可能性最大的原因去分析。