软件测试(单元测试)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

局部数据结构测试
检查不正确或不一致的数据类型说明; 使用尚未赋值或尚未初始化的变量; 错误的初始值或错误的默认值; 变量名拼写错误或书写错误; 不一致的数据类型。
路径测试
常见的不正确的计算有:
运算的优先次序不正确或误解了运算的优先次 序; 运算的方式错误(运算的对象彼此在类型上不 相容); 算法错误; 初始化不正确; 运算精度不够; 表达式的符号表示不正确等。
桩模块( 桩模块(Stub) ) 又称为存根模块,它用来代替被测单元的 子模块。设计桩模块的目的是模拟实现被 测单元的接口。桩模块不需要包括子模块 的全部功能,但应做少量的数据操作,并 打印接口处的信息。
人们在进行单元测试时尽量避免开发驱动模块和桩模块。 尤其应避免开发桩模块,因为驱动模块开发的工作量一般 少于桩模块。 若采用自底向上的方式进行开发,底层的单元先开发并先 测试,可以避免开发桩模块,采用这种方法测试上层单元 时,也是对下层单元的间接测试,但当下层单元被改动后, 则需要执行回归测试判断其上层单元是否需要修改。 当不得不开发驱动模块及桩模块时,人们力求它们的简单 以提高工作效率。但过于简单的驱动模块和桩模块会影响 单元测试的有效性,因而,对被测单元的彻底测试有时会 被推迟到集成测试阶段完成。
多个被测模块之间的单元测试可同时进行,以提高单元测试效率。 单元测试一般应该由编程人员完成,有时测试人员也加入进来, 但编程人员仍会起到主要作用。 单元测试的依据是软件的详细设计描述、源程序清单、编码标准 等。
2.单元测试的目的
验证代码能否达到详细设计的预期要求。 发现代码中不符合编码规范的地方。 准确定位发现的错误,以便排除错误。
3.单元测试的优点
由于单元测试是在编码过程中进行的,若发现 了一个错误,不管是从做回归测试的角度,还 是对错误原因理解的深刻性的角度,修复错误 的成本远小于集成测试阶段,更是小于系统测 试阶段。 在编码的过程中考虑单元测试问题,有助于编 程人员养成良好的编程习惯,提高源代码质量。
4.单元测试的测试方法
路径测试
ቤተ መጻሕፍቲ ባይዱ常见的比较和控制流错误有:
不同数据类型的比较; 不正确的逻辑运算符或优先次序; 因浮点运算精度问题而造成的两值比较不等; 关系表达式中不正确的变量和比较符; “差1错”,即不正确地多循环或少循环一次; 错误的或不可能的循环终止条件; 当遇到发散的迭代时不能终止循环; 不适当地修改了循环变量等。
3.4.2 单元测试用例的设计思路 可按如下的步骤完成单元测试的测试用例 设计:
① 为被测单元运行设计测试用例 ② 为正向测试设计测试用例 ③ 为逆向测试设计测试用例 ④ 为满足特殊需求设计测试用例 ⑤ 为代码覆盖设计测试用例
在单元测试中,白盒及黑盒方法测试用例 的使用孰先孰后呢? 一般说来,由于黑盒测试是从被测单元外 部进行测试,成本较低,可先对被测单元 进行黑盒测试,之后再进行白盒测试,以 弥补黑盒测试不彻底的不足。
测试的内容
模块接口 局部数据结构测试 路径测试 错误处理测试 边界测试
模块接口
调用所测模块的输入参数与模块的形式参数在个 数、属性、顺序上是否匹配; 所测模块调用子模块时,它输入个子模块的参数 与子模块的形式参数在个数、属性、顺序上是否 匹配; 是否修改了只做输入用的形式参数; 输出给标准函数的参数在个数、属性、顺序上是 否匹配; 全局变量的定义在各模块中是否一致; 限制是否通过形式参数来传送。
控制流图
计算流图G的环路复杂度V(G)
有三种方法计算环路复杂度: V(G)= 区域个数=4 V(G)=E-N+2,E是流图中边的数量,N是流 图中结点的数量。
V(G)=10-8+2=4
V(G)= P+1 ,P是流图G中判定结点的数量
V(G)=3+1=4
导出程序基本路径
程序基本路径:基本独立路径就是从程序 的开始结点到结束可以选择任何的路径遍 历,但是每条路径至少应该包含一条已定 义路径不曾用到的边。
建立单元测试的环境,需完成以下一些工 作:
构造最小运行调度系统,即构造被测单元的驱 动模块。 模拟被测单元的接口,即构造被被测单元调用 的桩模块。 模拟生成测试数据及状态,为被测单元运行准 备动态环境。
3.4 单元测试用例设计
3.4.1 单元测试的内容 单元测试的对象是软件设计的最小单位——模块 或函数,单元测试的依据是详细设计描述。
错误处理测试
出错的描述难以理解; 出错的描述不足以对错误定位和确定出错的原因; 显示的错误与实际的错误不符; 对错误条件的处理不正确; 在对错误进行处理之前,错误条件已经引起系统 的干预; 如果出错情况不予考虑,那么检查恢复正常后模 块可否正常工作。
边界测试
在n次循环的第0次、1次、n次是否有错误; 运算或判断中取最大最小值时是否有错误; 数据流、控制流中刚好等于、大于、小于 确定的比较值时是否出现错误。
单元测试
第3章 补充扩展内容
主调单元1
主调单元M
被测试单元
调用单元1
调用单元N
本章要点
单元测试的含义、目的和优点 单元测试使用的方法 单元测试的步骤 单元测试环境 驱动模块和桩模块的含义 单元测试用例的设计 CppUnit的安装及环境配置 CppUnit的使用步骤
3.1 单元测试概述
1.单元测试的概念
单元测试是对软件基本组成单元的测试 对软件基本组成单元的测试。 对软件基本组成单元的测试
在传统的结构化编程语言如C语言中,单元一般是模块,也就是函数 或子过程; 在象C++中, 单元是类或类的方法; 在Ada语言中,单元可为独立的过程、函数或Ada包; 在第四代语言(4GL)中,单元对应为一个菜单或显示界面。
① 计划单元测试 ② 设计单元测试 ③ 实现单元测试 ④ 执行单元测试 ⑤ 单元测试结果分析并提交测试报告
3.3单元测试的环境构成
在单元测试时,如果模块不是独立的程序,需要辅助 测试模块,有两种辅助模块: 驱动模块(Driver) 桩模块(Stub)
3.3 单元测试环境
驱动模块( 驱动模块(Driver) ) 用来代替被测单元的上层模块的。驱动模 块能接收测试数据,调用被测单元,也就 是将数据传递给被测单元,最后打印测试 的执行结果。可将驱动模块理解为被测单 元的主程序。
4 C,D,G,I,A,B(4,6,13,19,22,4,24) 输入数据: i_count =1;i_flag=2 预期结果:i_temp=20.
3.6 小结
单元测试是所有的测试活动中最早进行的一种测试, 它能以最低的成本发现和修复软件单元中的错误。 应有计划地执行单元测试,并在整个软件开发的周期 内对其进行维护,使单元测试可重用。 单元测试采用白盒及黑盒方法对被测单元从静态和动 态两方面进行测试。 在执行单元测试阶段的动态测试时,应注重建立单元 测试的环境,以达到对被测单元进行测试的目的。
在单元测试阶段,应使用白盒测试方法和黑盒 测试方法对被测单元进行测试,其中以使用白 盒方法为主。 在单元测试阶段以使用白盒测试方法为主,是 指在单元测试阶段,白盒测试消耗的时间、人 力、物力等成本一般会大于黑盒测试的成本。
3.2 单元测试的步骤
单元测试的实施应遵循一定的步骤,力争 做到有计划、可重用。 单元测试的步骤如下:
3.5 基本路径测试
基本路径测试法:设计出的测试用例要保 证每一个基本独立路径至少要执行一次。
输入参数: int i_count ,int i_flag 输出参数: int i_return; 函数说明 : 当i_flag=0;返回 i_count+100 当i_flag=1;返回 i_count *10 否则 返回 i_count *20
基本路径测试步骤:
1.导出程序流程图的拓扑结构—控制流图G 2.计算控制流图G的环路复杂度V(G)
环路复杂度是一种为程序逻辑复杂性提供定量测试的 软件度量。将该度量用于计算程序的基本独立路径数 目。为确保所有语句至少执行一次的测试数量的上界。 简单的定义就是控制流图的区域数目
3.确定只包含独立路径的基本路径集 4.设计测试用例
白盒测试为主 黑盒测试为辅
白盒测试的用例设计: •逻辑覆盖 •基本路径测试 黑盒测试的用例设计: •等价类划分 •边界值分析 •猜测错误
主要单元测试方法
人工静态分析 自动静态分析 人工动态测试 自动动态测试
测试过程中各种人员的作用
系统分析设计人员 进行需求跟踪,确保系统需求的实现和更新。进行软件单元可测 性分析,确定单元测试的对象、范围和方法。 软件开发人员 负责编码和单元测试过程,完成单元测试计划、方案和报告。 软件测试人员 参与单元测试计划、方案和报告的评审,对单元测试的计划、设 计和执行质量进行监控。根据实际情况,可选择参与由开发人员 负责的代码检视、单元测试等活动。 配置管理人员 对代码及单元测试文档进行配置管理。 质量保证(QA)人员 参与编码与单元测试评审,对编码和单元测试过程进行审计。
基本路径
1B
(4,24)
2 C,E,J
(4,6,8,24)
3 C,D,F,H,A,B
(4,6,13,15,22,4,24)
4 C,D,G,I,A,B
(4,6,13,19,22,4,24)
测试用例
1 B(4,24) 输入数据:i_flag=0,或者是i_flag<0的某一个值。 预期结果:i_temp=0. 2 C,E,J(4,6,8,24) 输入数据: i_count =1;i_flag=0 预期结果:i_temp=101. 3 C,D,F,H,A,B(4,6,13,15,22,4,24) 输入数据: i_count =1;i_flag=1 预期结果:i_temp=10.
相关文档
最新文档