一、软件测试的目标
软件测试的目标是发现软件问题,降低风险。一个好的测试用例在于能发现至今未发现的错误;一个成功的测试是为了发现至今未发现的错误的测试。
二、对代码覆盖率不同的覆盖方法
覆盖准则由弱到强依次是语句覆盖、判定覆盖(分支覆盖)、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。
其中,
语句覆盖是使得程序中每个语句至少被执行一次;
判定覆盖是使得程序中的每个分支至少都通过一次;
条件覆盖是使得判定中的每个条件获得各种可能的结果;
判定/条件覆盖是使得判定中的每个条件取到各种可能的值,并使每个判定取到各种可能的结果;
条件组合覆盖是使得每个判定中条件的各种可能组合都至少出现一次;
路径覆盖的含义是,选取足够多的测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)
三、软件测试之边界值分析法
边界值分析法(Boundary Value Analysis,BVA)的测试用例来自于等价类的边界,是等价类划分法的补充。根据边界值划分法,等价类分析法中的测试数据不是选取等价类中的典型值或任意值,而是应当选取正好等于、刚刚大于、刚刚小于边界的值作为测试数据。 使用边界值分析法设计测试用例,首先应该确定它的边界。
- 上点:边界上的点,区间的终点值。
- 离点:离上点最近的点称为离点。开区间的离点,就是开区间中上点内侧紧邻的点。闭区间的离点,就是闭区间中上点外侧紧邻的点。
- 内点:上点之间(域范围内)的任意一点。
边界值法是一种测试方法,适用于黑盒测试和白盒测试。它通过测试输入变量的边界值和临近值来发现潜在的缺陷。在黑盒测试中,边界值法用于验证系统的外部行为是否符合需求;在白盒测试中,它用于验证代码内部如何处理边界条件,了解和测试程序的内部数据结构。
黑盒测试关注的是软件的外部行为,而不考虑内部实现。边界值分析法在黑盒测试中的应用有以下几点:
- 用户输入的极限值:用户通常会在极限值(如最小值、最大值)处进行输入。测试这些边界值可以验证系统是否能正确处理用户输入的极端情况。
- 需求规格说明:边界值通常由需求规格说明定义,通过测试这些值,可以确保系统符合需求,并能正确处理边界条件。
白盒测试关注软件的内部实现细节。边界值分析法在白盒测试中的应用有以下几点:
- 代码路径覆盖:边界值测试可以帮助确定代码在处理边界条件时是否正确执行所有路径。例如,条件分支和循环结构在处理边界值时可能会有不同的执行路径。
- 内部变量的极限值:程序内部变量在接近其边界时可能会表现出不同的行为,通过测试这些边界值,可以发现潜在的边界条件缺陷。
其他方法的适用范围:
- 逻辑覆盖法:主要用于白盒测试,涉及代码逻辑结构的覆盖。
- 基本路径法:主要用于白盒测试,通过分析程序的控制流图,确定独立路径并进行测试。
- 正交试验设计法:主要用于黑盒测试,通过设计少量具有代表性的测试用例来覆盖大量输入组合。
四、测试的关键问题
测试的关键问题是如何设计测试,也就是说如何选择测试用例。
测试用例是测试程序正确性与否的关键。一个覆盖完全的测试用例可以测试出程序是否正确运行,是否有bug等等,是最重要的。
五、动态分析
动态分析:代码运行结束后。模块功能检查和系统压力测试,必须执行代码后才能分析。
静态分析:代码运行之前。数据流分析和代码覆盖率,不需要执行代码就可分析。
六、系统测试
瀑布模型的阶段划分中,
压力测试、功能测试、安全测试和性能测试都属于系统测试的内容。这些测试是在整个系统完成集成后,对系统整体进行验证,以确保系统在各种条件下都能正常运行。系统测试是一个对于软件的整个系统的性能以及稳定性测试,不用使用到算法内部逻辑结构和具体的算法,所以使用的黑盒测试。
接口测试则主要是在集成测试阶段进行的,目的是验证不同模块或系统之间的接口和交互是否正确。这通常在系统测试之前完成,因为接口测试是确保各模块能够正确通信的基础。
七、路径覆盖
路径覆盖是指测试用例集覆盖了程序中的所有可能执行路径。由于每条路径都会经过程序的所有判定点(即if语句、循环条件等),因此路径覆盖必然包含了所有判定点的覆盖,这就是判定覆盖(也称为分支覆盖)。
- 路径覆盖:测试用例集覆盖了程序中所有可能的执行路径。
- 判定覆盖(分支覆盖):测试用例集覆盖了程序中所有的判定点,并验证了判定的所有可能结果。
因此,实现路径覆盖的测试用例集一定会实现判定覆盖,但不一定会实现条件覆盖、判定/条件覆盖或组合覆盖,这些覆盖标准对条件的覆盖要求更高。
八、桩模块(Stub)
是指模拟被测试的模块所调用的模块,而不是软件产品的组成的部分。在自顶向下的集成过程中尤其有效。 ----即在单元测试中被其它模块调用、在自顶向下的集成过程中尤其有效
自顶向下的集成过程
自顶向下的集成测试从系统的顶层模块开始,逐步向下进行。这意味着在测试顶层模块时,其依赖的底层模块可能尚未开发完成或尚未经过测试。
桩模块的作用
在这种情况下,桩模块用于模拟这些尚未开发或尚未测试的底层模块的行为。这样,顶层模块可以被独立测试,而不需要等待所有底层模块的实现和测试。