软件测试学习-第二章单元测试1

单元测试的定义

  • 定义

单元测试(又称为模块测试, Unit Testing)是针对程序,模块(软件设计的最小单位(例如类或者函数))来进行正确性检验的测试工作。

  • 时机

单元测试和编码是同步进行,但在Test- Driven Development(TDD)中,强调测试在先,编码在后。单元测试一般由开发人员完成,QA人员辅助。

  • 概念

模块、组件、单元

单元测试的目标

  • 目标:单元模块被正确编码
  • 信息能否正确地流入和流出单元(输入和输出
  • 在单元工作过程中,其内部数据能否保持其完整性包括内部数据的形式、内容及相互关系不发生错误,全局变量在单元中的处理和影响
  • 为限制数据加工而设置的边界处,能否正确工作
  • 单元的运行能否做到满足特定的逻辑覆盖
  1. 各层判定处理正确
  2. 函数无措
  3. 功能逻辑正确

单元测试的必要性

  • 尽早介入越好
    越往后,费用越高

调式和测试

  • 调试:解决错误
  • 测试:发现错误

流程

  • 没有单元测试的流程
    将错误解决集中在功能测试阶段
    软件测试学习-第二章单元测试1_第1张图片

  • 有单元测试的流程
    将较多的错误解决,在编码阶段解决。
    软件测试学习-第二章单元测试1_第2张图片

评价标准

  • 代码覆盖率

代码覆盖的步骤:

  1. 第一步:源代码转换为流程图。流程图可以比较直观而详细地描述需要覆盖的语句

  2. 第二步:分析流程图,根据测试对象的要求选择需要覆盖的代码第三步:根据第二步结果确定测试数据,生成测试用例口测试用例:一组测试输入、执行条件以及预期结果

白盒测试/结构化测试方法(基于代码的测试技术)

  • 语句覆盖
  • 分支/判定覆盖
  • 条件覆盖
  • 判定/条件覆盖
  • 条件组合覆盖
  • 基本路径覆盖
    软件测试学习-第二章单元测试1_第3张图片

语句覆盖

(被执行的语句数量/总的语句数量)×100%

  • 不可达代码
    软件测试学习-第二章单元测试1_第4张图片
  • 处理错误代码(处理异常)
  • 小概率事件

分支/判定覆盖

(被执行的分支数量/总的分支数量)×100%
要确保每个判定得到了TRUE和 FALSE的结果,即保证每个判定条件取TRUE和取 ALSE各至少一次
所有路径都会被执行一次,100%的判定覆盖能保证100%的语句覆盖
缺点:条件错误的情况,无法被发现。所以要进行条件覆盖

条件覆盖

要确保每个条件TRUEFALSE取各至少一次,可检查每个原子条件,不能保证所有判断分支都覆盖

条件覆盖<语句覆盖<判定覆盖

判定判定/条件覆盖

判定条件中的所有条件可能至少执行一次取值,同时,所有判定的可能结果至少执行一次,判定覆盖与条件覆盖的结合。

条件组合覆盖

使得每个判定的所有可能的条件取值组合至少执行一次。可满足分支覆盖,也同时满足语句覆盖
口覆盖率使用的基本准则

覆盖率使用的基本准则

  • 覆盖率不是目的,只是一种手段
  • 不可能针对所有的覆盖率去测试
  • 只考虑一种覆盖标准不恰当
  • 不要追求绝对100%的覆盖率

其他准则

  • 使用最少测试来达到最大覆盖
  • 要考虑测试质量,兼顾效/成本分析
  • 软件规格变化则需要新相应的覆盖

习题部分

1.简述语句覆盖的基本思想

答:

  • 语句覆盖法的基本思想是设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次。
  • 如果是顺序结构,就是让测试从头执行到尾
  • 如果有分支、条件和循环,需要利用下面的方法,执行足够的测试覆盖全部语句

2.简述判定覆盖的基本思想

答:

  • 判定覆盖法的基本思想是设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。
  • 一个判定代表着程序的一个分支,所以判定覆盖也被称为分支覆盖。

3.简述条件覆盖的基本思想

答:

  • 条件覆盖的基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。

4.判断/条件覆盖的基本思想

答:

  • 判定-条件覆盖是判定和条件覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次。

5.简述条件组合覆盖的基本思想

答:

  • 条件组合覆盖的基本思想是设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次。

6.简述基本路径覆盖的基本思想

答:

  • 顾名思义,路径覆盖就是设计所有的测试用例,来覆盖程序中的所有可能的执行路径。

你可能感兴趣的:(软件测试)