1.软件测试是保证软件质量,提高软件可靠性的关键。
2.软件测试的目的:发现错误
3.测试与调试比较
测试 (test) |
调试 (debug)
|
1.以已知条件开始, 使用预先定义的程序, 有预知的结果 2.发现错误
|
1.以不可知内部条件开始,结果一般不可预见 2.找出错误位置,排除 |
单元测试: 检验每个模块能否单独工作.
集成测试: 检验概要设计中模块接口设计问题
确认测试: 以需求规格说明书为检验尺度
系统测试: 综合检验
平行运行:新旧两套系统并行运行,对照检验
(1)开发和测试队伍分别建立
(2)测试用例(测试用的一组输入数据、环境平台和运行条件)应由输入数据和预期的输出结果两部分组成.
(3)兼顾合理的输入和不合理的输入数据
(4)应检查程序是否作了不该做的事
(5)程序修改后要回归测试
(6)应长期保留测试用例,直至系统废弃。
6.软件错误的分类
功能错(需求分析错误);软件结构错;数据错;编码错;软件集成错;测试定义与测试执行错误。
7.软件测试信息流
测试过程需要三类输入:
软件配置:需求规格说明书;软件设计说明书;被测源程序
测试配置:测试计划;测试用例(测试数据);测试驱动程序
测试工具:
二. 两种测试类型
(1)静态测试方法:人工测试方法;计算机辅助静态分析方法。
基本特征是在对软件进行分析、检查和测试,不实际运行被测试的软件.
对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错.
(2)动态测试方法:白盒,黑盒,穷举。
通过运行软件来检验软件的动态行为和运行结果的正确性.
动态测试的两个基本要素:
被测试程序;测试数据(测试用例)
动态测试方法:(1)选取定义域有效值,或定义域 外无效值.(2)对已选取值决定预期的结果(3)用选取值执行程序(4)执行结果 与(2)结果相比,不吻和程序有错.
黑盒是根据程序外部特征进行测试。
白盒测试是根据程序内部逻辑结构进行测试。
三. 白盒测试方法的用例设计
逻辑覆盖法:一系列测试方法总称,特点是逐渐进行越来越完整的通路测试。
逻辑覆盖准则:(1)语句覆盖:是最弱的逻辑覆盖(2)判定覆盖:仍是弱的逻辑覆盖(3)条件覆盖:使每个判定的每个条件的可能取值至少执行一次。条件覆盖不一定包含判定覆盖;判定覆盖也不一定包含条件覆盖(4)判定/条件覆盖:选取足够多的测试用例,使判断中的每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次.
(5)条件组合覆盖:所有可能的条件取值组合至少执行一次
(6)路径覆盖(7)点覆盖(8)边覆盖
四. 黑盒测试方法的用例设计
选择少量而最具有代表性的输入数据
把所有可能的输入数据(有效的和无效的)划分成若干个等价的子集 (称为等价类),使得每个子集中的一个典型值在测试中的作用与这一子集中所有其它值的作用相同。可从每个子集中选取一组数据来测试程序即可。
当处理表格时:有效类可分为空表、含一项的表、含多项的表等。
(1)形成等价类表,每一等价类规定一个唯一的编号;
(2)设计一测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复这一步骤,直到所有有效等价类均被测试用例所覆盖;
(3)设计一新测试用例,使其只覆盖一个无效等价类,重复这一步骤直到所有无效等价类均被覆盖(通常程序执行一个错误后不继续检测其它错误,故每次只测一个无效类)。
5.边界值分析法
(1)这个等价类的每个边界都要作为测试条件。
(2)边界值分析不仅考虑输入条件,还要考虑输出空间产生的 测试情况。
(3)通常与等价划分结合进行。
边界分析测试用例原则:
(1)如输入条件代表以a和b为边界的范围,测试用例应包含a、b、略大于a和略小于b的值。
(2)如输入条件代表一组值,测试 用例应当执行其中的最大值和最小值,还应测试略大于最大值和略小于最小值的值。
(3)如规格说明中提出输入输出的有序集(顺序文件、有序表等),取有序集的第一个和最后一个元素做测试用例。
(4)如程序数据结构有预定的边界,应测试其边界的数据项。
(5)如输出条件规定了取值范围,取边界上下浮动值做测试用例。
五. 软件的测试步骤
1.单元测试:
A.单元测试的内容:主要对模块的五个基本特性进行评价。
B.单元测试的方法
1)驱动模块(驱动程序):相当于主模块
(2)桩模块(连接程序) :代替所测模块调用的子模块
2.集成测试
是将模块按照设计要求组装起来进行测试,主要目标是发现与接口有关的问题.
A.主控模块为驱动模块,所有直属主模块的下属模块全用桩模块代替,测试主模块.
B.根据所选结合方法(先深度或先广度),每次用一实际模块替换相应桩模块。
C.模块结合一个,测试一个。
D.完成一组测试后,用实际模块替换另一个桩模块。
E.为保证不引入新错误,进行回归测试。
(2)自底向上结合:
第一步:对叶模块配以驱动模块对其测试,也可把最底层模块组合成实现某一特定软件功能的簇,由驱动模块对它测试。
第二步:用实际模块代替驱动模块,与它已测试的直属模块组装成子系统。
第三步:为子系统配备驱动模块,进行新的测试。
第四步:判断是否已组装到达主模块是则结束,否则执行第二步。
3.确认测试:验收软件的有效性(功能和性能达标)。
4.系统测试:软件只是计算机系统的一个元素,软件最终要与其他系统元素(如新硬件、信息等)相结合,进行各种集成测试和确认测试。
用于系统测试的测试类型:
(1)恢复测试
(2)安全性测试
(3)强度测试
(4)性能测试