【软件质量保证与测试】2.2 软件测试过程-单元测试

1. 单元测试方法

  1. 测试的四个阶段:单元测试→集成测试→系统测试→验收测试
  2. 什么是单元测试?
    定义:单元测试是对软件基本组成单元进行的测试
    时机:在代码完成后开发人员完成,QA人员辅助(QA:质量保证)
    对象:类、模块、组件、单元
  3. 单元测试的多个被测模块之间的单元测试可同时进行,以提高单元测试效率
  4. 单元测试一般由编程人员完成,有时也有测试人员,但编程人员起主要作用
  5. 单元测试的依据是软件的详细设计描述、源程序清单、编码标准
  6. 单元测试的目的
    (1)验证代码能否达到详细设计的预期要求
    (2)发现代码中不符合编码规范的地方
    (3)准确发现定位的错误,以便排除错误
  7. 单元测试优点:修复成本低;由于单元测试是在编码过程中进行的,有助于规范源代码,提高源代码质量
  8. 单元测试的步骤
    计划单元测试
    设计单元测试
    实现单元测试
    执行单元测试
    ⑤ 单元测试结果分析并提交测试报告
  9. 单元测试一般为编码步骤的附属部分,模块自己不能运行,要靠其它部分来调用和驱动,要为每个单元测试开发两个软件:驱动模块driver和桩模块stub
    在这里插入图片描述
  10. 驱动模块driver:被测单元的上层模块。能够接收测试数据,调用被测单元,将数据传递给被测单元,最后打印测试执行结果。可将驱动模块理解为被测单元的主程序
  11. 桩模块stub:又称为存根模块,用来代替被测单元的子模块。桩模块的目的是模拟被测模块的接口。桩模块不需包括子模块的全部功能,但应做少量的数据操作,并打印接口处信息
  12. 测试过程中应尽量避免桩模块和驱动模块,尤其是桩模块,因为开发桩模块的工作量更大
  13. 采用自底向上的方式进行开发时,可避免开发桩模块。

若采用自底向上的方式进行开发,底层的单元先开发并先测试,可以避免开发桩模块,采用这种方法测试上层单元时,也是对下层单元的间接测试,但当下层单元被改动后,则需要执行回归测试判断其上层单元是否需要修改。
当不得不开发驱动模块及桩模块时,人们力求它们的简单以提高工作效率。但过于简单的驱动模块和桩模块会影响单元测试的有效性,因而,对被测单元的彻底测试有时会被推迟到集成测试阶段完成

  1. 如何构建单元测试环境
    构造最小运行调度系统,即构造被测单元的驱动模块
    模拟被测单元的接口,即构造被被测单元调用的桩模块
    模拟生成测试数据及状态,为被测单元运行准备动态环境

2. 单元测试内容

  1. 单元测试的对象是软件设计的最小单元——模块或函数,单元测试的依据是详细设计的描述
    在这里插入图片描述

  2. 单元测试的内容
    模块接口
    局部数据结构测试
    路径测试
    错误处理测试
    边界测试

  3. 模块接口测试
    调用所测模块的输入参数与模块的形式参数在个数、属性、顺序上是否匹配
    所测模块调用子模块时,它输入个子模块的参数与子模块的形式参数在个数、属性、顺序上是否匹配;
    是否修改了只做输入用的形式参数
    输出给标准函数的参数在个数、属性、顺序上是否匹配;
    全局变量的定义在各模块中是否一致;
    限制是否通过形式参数来传送。

  4. 局部数据结构测试
    检查不正确或不一致的数据类型说明;
    使用尚未赋值或尚未初始化的变量;
    错误的初始值或错误的默认值;
    变量名拼写错误或书写错误;
    不一致的数据类型

  5. 路径测试
    (1)常见的不正确的计算有:
    运算的优先次序不正确或误解了运算的优先次序;
    运算的方式错误(运算的对象彼此在类型上不相容);
    算法错误;
    初始化不正确;
    运算精度不够;
    表达式的符号表示不正确等。
    (2)常见的比较和控制流错误有:
    不同数据类型的比较;
    不正确的逻辑运算符或优先次序;
    因浮点运算精度问题而造成的两值比较不等;
    关系表达式中不正确的变量和比较符;
    “差1错”,即不正确地多循环或少循环一次;
    错误的或不可能的循环终止条件;
    当遇到发散的迭代时不能终止循环;
    不适当地修改了循环变量等

  6. 错误处理测试(容错)
    出错的描述难以理解;
    出错的描述不足以对错误定位和确定出错的原因;
    显示的错误与实际的错误不符;
    对错误条件的处理不正确;
    在对错误进行处理之前,错误条件已经引起系统的干预;
    如果出错情况不予考虑,那么检查恢复正常后模块可否正常工作

  7. 边界测试
    在n次循环的第0次、1次、n次是否有错误;
    运算或判断中取最大最小值时是否有错误;
    数据流、控制流中刚好等于、大于、小于确定的比较值时是否出现错误

3. 单元测试类型

  1. 单元测试类型
    逻辑单元测试;
    集成单元测试;
    功能单元测试
  2. 在确定测试用例的同时,应给出期望结果
  3. 进行单元测试时,常用的方法是采用白盒测试,辅之以黑盒测试
  4. 根据测试对象的其内部结构的逻辑关系、测试的方法,按照由小到大、由单一到组合、又简单到复杂,单元测试可以逻辑单元测试、集成单元测试和功能单元测试
    在这里插入图片描述

4. 断言

  1. 断言定义:简单的方法调用,判断一个语句、一个函数或对象的一个方法所产生的结果是
    否符合你期望的那个结果(为真)。
  2. 断言应用时机:
    (1)用错误处理代码来处理预期会发生的状况,用断言来处理绝不应该发生的状况。
    (2)用断言来注解并验证前(置)条件和后(置)条件
    (3)对于高健壮性的代码,应该先使用断言再处理错误
  3. 断言应用场景:
    (1)在功能代码开发阶段,可以逐步添加断言测试是否获取自己想要的数据结果
    (2)写单元测试时,可用到断言,主要目的:测试这个功能片段的代码能否返回预期的结果。
    (3)自己提供接口供他人使用时,可先断言使用者传递过来的参数是否符合要求,如果不符合要求,将以AssertionError的方式告知使用者。
  4. assertion(断言)是软件开发中一种常用的调试方式,很多开发语言中都支持这种机制。
  5. assertion就是在程序中的一条语句,它对一个布尔表达式进行检查,必须保证这个表达式的值为true;如果为false,则说明程序已经处于不正确的状态,系统将给出警告或退出。
  6. assertion用于保证程序最基本、关键的正确性
  7. assertion 通常在开发和测试时开启。为了提高性能,在软件发布后,assertion 通常是关闭
  8. 断言的语法格式
    assert( b_exp1 );或 assert( b_exp1 ): info;
  9. 注意
    若断言为假,将抛出AssertionError异常。
    与if 判断不同,assert为假则报错

5. 单元测试的作用

  1. 单元测试的目的
    验证代码能否达到详细设计的预期要求。
    发现代码中不符合编码规范的地方。
    准确定位发现的错误,以便排除错误
  2. 单元测试的作用
    编写单元测试可以帮助开发人员书写高质量的代码。
    编写单元测试可以使开发人员更有信心重构应用程序 ,去拥抱变化
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值