软件测试
- 软件测试是发现软件中错误和缺陷的主要手段。
- 软件测试不是为了证明程序是正确的。
- 软件测试不仅要证明程序正确执行了预期的功能,还应证明它不完成它不该完成的功能。
测试用例的概念
一个测试用例由测试输入数据和预期结果组成。
测试目的
Glen Myers给出的软件测试目的:
- 测试是一个为了发现错误而执行程序的过程
- 一个好的测试用例是指很可能找到迄今为至尚未发现的错误的测试用例
- 一个成功的测试是指揭示了迄今为至尚未发现的错误的测试
根据这个测试目的,应该排除对测试的错误观点,设计合适的测试用例,用尽可能少的测试用例,来发现尽可能多的软件错误。
- 揭示错误的能力
- 节省测试耗费
白盒测试
白盒测试(又称为结构测试)把测试对象看作一个透明的盒子,根据程序内部的逻辑结构及有关信息设计测试用例,检查程序中所有逻辑路径是否都按预定的要求正确地工作。
白盒测试主要用于对程序模块的测试,包括:
- 程序模块中的所有独立路径至少执行一次
- 对所有的逻辑判定的取值(“真”与“假”)都至少测试一次
- 在上下边界及可操作范围内运行所有循环
- 测试内部数据结构的有效性等
主要的白盒测试方法
- 逻辑覆盖测试
- 基本路径覆盖测试
- 循环测试
黑盒测试
黑盒测试(又称行为测试)把测试对象看做一个黑盒子,不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能需求。
黑盒测试是依据软件的需求规约,检查程序的功能是否符合需求规约的要求。
主要的黑盒测试方法
- 等价类划分
- 边界值分析
- 比较测试
- 错误猜测
- 因果图
等价类
等价类是指输入域的某个子集,该子集中的每个输入数据对揭露软件中的错误都是等效的,测试等价类的某个代表值就等价于对这一类其他值的测试。
等价类划分方法把输入数据分为有效输入数据(有效等价类)和无效输入数据(无效等价类)
- 有效输入数据指符合规格说明要求的合理的输入数据,主要用来检验程序是否实现了规格说明中的功能
- 无效输入数据指不符合规格说明要求的不合理或非法的输入数据,主要用来检验程序是否做了规格说明以外的事
在确定输入数据等价类时,常常还要分析输出数据的等价类,以便根据输出数据等价类导出输入数据等价类。
利用等价类设计测试用例的步骤:
(1) 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止。
(2) 为每个无效等价类设计一个新的测试用例。
边界值分析与等价类划分
使用等价类分析方法设计测试用例时,原则上,等价类中的任一输入数据都可作为该等价类的代表用作测试用例。而边值分析则是专门挑选那些位于边界附近的值(即正好等于、或刚刚大于、或刚刚小于边界的值)作为测试用例。
逻辑覆盖测试(白盒)
逻辑覆盖主要考察使用测试数据运行被测程序时对程序逻辑的覆盖程度。通常希望选择最少的测试用例来满足所需的覆盖标准。主要的覆盖标准有:
语句覆盖
判定覆盖
判定是条件的集合操作,比如图中的 a 和 c 。满足判定覆盖标准的测试用例也一定满足语句覆盖标准。
条件覆盖
条件是原子的,比如 y>1 , z=0 等。条件覆盖通常比判定覆盖强,但有时虽然每个条件的所有可能结果都出现过,但判定表达式的某些可能结果并未出现。
判定/条件覆盖
条件组合覆盖
条件组合覆盖是上述五种覆盖标准中最强的一种,然而,条件组合覆盖仍不能保证程序中所有可能的路径都被覆盖。
路径覆盖
路径覆盖实际上考虑了程序中各种判定结果的所有可能组合,但它未必能覆盖判定中条件结果的各种可能情况。因此,它是一种比较强的覆盖标准,但不能替代条件覆盖和条件组合覆盖标准。
基本路径测试(白盒)
基本路径测试是首先根据程序或设计图画出控制流图,并计算其区域数,然后确定一组独立的程序执行路径(称为基本路径),最后为每一条基本路径设计一个测试用例。(特别是包含循环的程序,其路径数可能非常大,所以有基本路径。)
前提是设计图的判定中不包含复合条件。如果设计图的判定中包含了复合条件,那么必须先将其转换成等价的简单条件设计图。
把流图中由结点和边组成的闭合部分称为一个区域(region),在计算区域数时,图的外部部分也作为一个区域。
独立路径是指程序中至少引进一个新的处理语句序列或一个新条件的任一路径,在流图中,独立路径至少包含一条在定义该路径之前未曾用到过的边。在基本路径测试时,独立路径的数目就是流图的区域数。
测试策略
一种测试策略就是将测试分为单元测试、集成测试、确认测试和系统测试。
V模型
V模型:描述软件开发各阶段与测试策略之间的对应关系
回归测试就是对已经进行过测试的测试用例子集的重新测试,以确保对程序的改变和修改,没有传播非故意的副作用。(用于集成测试中)
确认测试以软件需求规约为依据,以发现软件与需求不一致的错误。主要检查软件是否实现了规约规定的全部功能要求,文档资料是否完整、正确、合理,其他的需求,如可移植性、可维护性、兼容性、错误恢复能力等是否满足。
软件配置评审
软件配置评审也称软件审核(audit),其目的是保证软件配置的所有成分都齐全,各方面的质量都符合要求,具有维护阶段必需的细节,而且已经编排好分类目录。
软件配置主要包括计算机程序(源代码和可执行程序),针对开发者和用户的各类文档,包含在程序内部或程序外部的数据。
验收测试(用于单用户)
如果软件是为一个客户开发的,那么,最后由客户进行验收测试(acceptance test),以使客户确认该软件是他所需要的。
α测试和β测试(用于多客户)
- α测试是由一个用户在开发者的场所进行的,软件在开发者对用户的“指导下”进行测试。经α测试后的软件称为β版软件。
- β测试是由软件的最终用户在一个或多个用户场所进行的,β测试是软件在一个开发者不能控制的环境中的“活的”应用,用户记录所有在β测试中遇到的(真正的或想象的)问题,并定期把这些问题报告给开发者,在接到β测试的问题报告后,开发者对软件进行最后的修改,然后着手准备向所有的用户发布最终的软件产品
系统测试
常用的系统测试包括:
- 恢复测试(recovery testing)
- 安全保密性测试(security testing)
- 压力测试(stress testing)
- 性能测试(performance testing)
测试完成的标准
使用指定的测试用例设计方法产生测试用例,运行这些测试用例均未发现错误(包括发现错误后已被纠正的情况),则测试可终止。
仍然可能存在错误。
调试的目的和过程
测试的目的是发现错误,调试(也称排错)的目的是确定错误的原因和准确位置,并加以纠正。