白盒测试 - KalosOwen

KalosOwen 2021-08-04 原文


白盒测试


白盒测试 目的 分类 动态白盒测试 语句覆盖 基本路径测试方法

一、什么是功能测试?
  a.功能测试根据测试用例逐一对被测系统的各项功能进行验证,验证各项功能是否满足用户的需要(需求规格说明书),关注一个用户使用被测系统的情况

二、什么是性能测试?
  在系统功能已通过测试后,借助测试工具(Loadrunner、Jmeter)在正常、峰值以及异常的情况下来测试被测系统的各项性能指标是否满足用户需求,关注多用户使用被测系统时快不快

三、什么是黑盒测试?
  不考虑系统的内部逻辑结构,把程序看成是一个黑盒子,只考虑系统的输入输出,检查程序是否按照需求规格说明书正常使用
  输入:测试用例中的数据
  输出:被测系统的反馈情况(响应)
  黑盒测试又称为数据驱动测试,基于功能的测试

四、什么是白盒测试?
  白盒测试是通过对程序内部结构进行分析来检测出问题,又称为透明盒测试和逻辑驱动测试,基于代码的测试

五、白盒测试
  1、为什么要做白盒测试?
    在系统中出现一个缺陷往往不是由一个原因导致的,就需要通过白盒测试,提前把每个功能模块都测试一次

  2、白盒测试的目的:
    a.保证程序中所有关键路径都被测试到,防止系统投入生产后用户发现系统问题
    b.便于衡量测试的完整性,完整性:有没有把某个功能点的所有可能情况都测试到
    c.可以测试到程序中所有的真分支、假分支
    d.检查内存泄漏
      c语言:malloc()–>free()
    e.检查程序的异常处理能力,Exception
    f.解决实际实验条件下很难搭建真实测试环境的问题
      测试环境:被测系统(数据库+服务器、代码)、网络、操作系统、测试工具
    g.检查代码是否遵循一定的编码规范

      功能:升温、降温
      驱动模拟温度高于+300->降温
      驱动模拟温度低于-300->升温

      username + passwd
      if(username正确andpasswd正确)
        返回登录成功界面
      else
        提示用户名错误或者密码错误

  3、白盒测试的分类:
    (1)静态白盒测试
      a.什么是静态测试?
        不实际运行被测系统本身,检查文档内容、界面、代码规范等
      b.静态白盒测试
        不实际运行被测系统本身,检查和审查代码的设计、结构,也称为结构化分析
        尽早发现程序中的缺陷,可以发现30%-70%的缺陷,可以为黑盒测试人员提供测试思路
      c.静态白盒测试的策略(方法)
        –桌前走查
        –代码检查
        –代码审查(人员:语言专家、行业专家、程序员、项目经理、测试人员)
        –正式审查
      d.审查单(Checklist):记录审查代码时或者公司内部整理的错误类型
    (2)动态白盒测试
      a.设计测试用例,根据测试用例执行被测程序(代码),验证代码的逻辑结构是否满足需求
      b.设计测试用例的方法:
        语句覆盖
        判定覆盖
        条件覆盖
        判定+条件覆盖
        条件组合覆盖
        路径覆盖
        基本路径测试方法

六、动态白盒测试–逻辑覆盖
  逻辑:代码
  覆盖:测试

  1、语句覆盖:关心代码中的可执行语句,设计足够多的测试用例来执行代码,确保程序中所有的可执行语句都至少被执行一次
    (1)程序流程图的组成:
      菱形–判定语句
      长方形–可执行语句
      箭头–程序流向
      圆角长方形–程序开始、结束
      判定M:a>0 and b>0 真分支Y
        a<=0 or b<=0 假分支N
      判定Q:a>1 or c>1 真分支Y
        a<=1 and c<=1假分支N
      1) 需求:把程序中所有可执行语句都至少测试一次
      2) 找到程序中所有可执行语句
        可执行语句1
        可执行语句2
        可执行语句3
      3) 如果要执行语句1,程序必须执行判定MY,要执行语句2,程序必须执行判定QY,执行完判定M和判定Q,就会执行语句3
      4) 找到满足用例的条件
        MY:a>0 and b>0
        QY:a>1 or c>1
      5) 设计测试
        a=9,b=16,c=8

 

  2、判定覆盖:设计足够多的测试用例来执行被测程序,把程序中所有判定的真分支、假分支至少执行一次
    判定M:a>0 and b>0 真分支Y
      a<=0 or b<=0 假分支N
    判定Q:a>1 or c>1 真分支Y
      a<=1 and c<=1假分支N
    1) 需求:测试程序中所有判定的真、假分支
    2) 找到程序中所有的真、假分支
      分支1:MY
      分支2:MN
      分支3:QY
      分支4:QN
    3) 程序执行M判定后,会执行到Q判定,所有程序执行一次可以覆盖两个分支
      a:MY->QY b:MN->QN
    4) 找到满足用例的条件
      a:a>0 and b>0 and a>1 or c>1
      b:a<=0 or b<=0 and a<=1 and c<=1
    5) 设计测试用例
      a:a=6,b=19,c=20
      b:a=,b=,c=

 

  3、条件覆盖:设计足够多的测试用例,来执行被测程序,使得程序中所有 (判定) 中的所有 (条件) 的所有 (取值) 都至少被执行一次
    判定M:a>0 and b>0 真分支Y
      a<=0 or b<=0 假分支N
    判定Q:a>1 or c>1 真分支Y
      a<=1 and c<=1假分支N
    1) 需求:测试程序中判定中条件的取真、假值
    2) 找到程序中所有的取值
      取值1:a>0 真
      取值2:a<=0 假
      取值3:b>0 真
      取值4:b<=0 假
      取值5:a>1 真
      取值6:a<=1 假
      取值7:c>1 真
      取值8:c<=1 假
    3) 分析
      程序执行一次可以覆盖4个取值,a b a c
        a: a 真 b 真 a 真 c真
        b: a 假 b 假 a 假 c假
    4) 设计测试用例
      a: a=12,b=15,c=14
      b: a=0,b=-23,c=1

  4、条件组合覆盖:设计足够多的测试用例,来执行被测程序,使得程序中所有条件取值组合都至少被执行一次
    判定M:a>0 and b>0 真分支Y
      a<=0 or b<=0 假分支N
    判定Q:a>1 or c>1 真分支Y
      a<=1 and c<=1假分支N
    1) 需求:测试所有条件取值的组合
    2) 找到所有条件取值组合
      组合1:a>0 and b>0
      组合2:a>0 and b<=0
      组合3:a<=0 and b<=0
      组合4:a<=0 and b>0
      组合5:a>1 and c>1
      组合6:a>1 and c<=1
      组合7:a<=1 and c<=1
      组合8:a<=1 and c>1

  5、路径覆盖:设计所有的测试用例,来执行被测程序,使得程序中所有的可执行路径至少被执行一次
    判定M:a>0 and b>0 真分支Y
      a<=0 or b<=0 假分支N
    判定Q:a>1 or c>1 真分支Y
      a<=1 and c<=1假分支N
    1) 要求:测试所有的可执行路径
    2) 找到程序中所有的可执行路径
      路径1:MY->QY
      路径2:MY->QN
      路径3:MN->QY
      路径4:MN->QN

 

  6、基本路径测试方法
    (1)基本路径测试方法跟路径覆盖类似,至少路径覆盖适合简单的程序,复杂的程序使用基本路径测试方法计算出所有的关键路径
    (2)基本路径测试方法是根据程序(代码)画出控制流图,根据控制流图计算圈复杂度(可执行路径数),根据圈复杂度导出独立路径(程序怎么执行,有哪些路径),根据独立路径设计测试用例
    (3)画控制流图
      a.圆圈:一条或者多条语句
      b.箭头:程序的控制流向
      c.圆圈可以是判断语句,如果是判断语句发出的箭头必须有一个终止的节点
      d.一个圆圈称为一个节点
      e.由节点和箭头圈定的范围称为一个区域,区域用来计算圈复杂度,区域外的范围也应该计为一个区域
    (4)计算圈复杂度
      a.V(G)=区域数
      b.V(G)=边(箭头)-节点(圆圈)+2
      c.V(G)=判定节点+1,不适合case多分支语句
    (5)导出独立路径
      路径1:4→14
      路径2:4→6→7→ 13→4→14
      路径3:4→6→9→10→13→4→14
      路径4:4→6→9→12→13→4→14

发表于
2018-05-03 19:24 
KalosOwen 
阅读(2952
评论(0
编辑 
收藏 
举报

 

版权声明:本文为KalosOwen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/KalosOwen/p/8987068.html?ivk_sa=1024320u

白盒测试 - KalosOwen的更多相关文章

  1. 傅立叶变换系列(三)傅立叶变换 – 影醉阏轩窗

    傅立叶变换系列(三)傅立叶变换 说明:   傅里叶级数、傅里叶变换、离散傅里叶变换、短时傅里叶变换。。。这些理 […]...

  2. Unity3D面试——真实的面试,unity3d面试 – Sun‘刺眼的博客

    Unity3D面试——真实的面试,unity3d面试   本来想写一个系列的,一半是抨击现在面试之水,要人之奸 […]...

  3. 在采集程序中增加定时发送邮件以及关机处理的实现 – 伍华聪

    在采集程序中增加定时发送邮件以及关机处理的实现 我们在采集特定数据的时候,往往需要耗费较长的时间,有时候因为一 […]...

  4. 运维工程师是要学python还是学go那? – 小猿圈IT

    在我们的认知中,运维工程师就是一个背锅侠,那么咱们怎么样来避免做背锅侠那? 可能有人会告诉你,你需要去懂一门开 […]...

  5. 如何在电脑硬盘安装linux系统 – 兔斯基摩洛哥

    如何在电脑硬盘安装linux系统 如何在电脑硬盘安装linux系统 准备软件: unetbootin,下载地址 […]...

  6. 03 . Django之腾讯云短信

    简介 由于项目在注册、登录、找回密码 时需要发送短信验证的功能,我们使用腾讯云短信做。 为什么要用腾讯云短信呢 […]...

  7. 分库分表(1) — 理论

    分库分表—理论 当一张表的数据达到几千万时,查询一次所花的时间会变长。业界公认MySQL单表容量在 […]...

  8. 电脑接口大集合 – Iron

    电脑接口大集合 2008-10-01 08:00  Iron  阅读(235)  评论(0)  编辑  收藏  […]...

随机推荐

  1. 数据库主从

    1. 主从复制1.1. mysql主从的原理1.1.1. Replication 线程Mysql的 Repli […]...

  2. 【阿里云IoT+YF3300】7.物联网设备表达式运算

       很多时候从设备采集的数据并不能直接使用,还需要进行处理一下。如果采用脚本处理,有点太复杂了,而采用表达式 […]...

  3. 敏捷史话(十五):我发明了敏捷估算扑克牌 —— James Greening

    James Grenning 是敏捷估算扑克的发明者,也是测试驱动开发的先行者,他把面向对象、极限编程、测试驱 […]...

  4. 5年从DBA到运维架构总监 — 做对了什么

    本文来自宝宝树运维总监刘秋岐的分享。随着MySQL的不断成熟,逐渐被用于更多大规模的网站和应用了,比如说当前最 […]...

  5. 测试用例是开发人员最后一块遮羞布 – 轩脉刃

    测试用例是开发人员最后一块遮羞布 2019-03-25 13:49  轩脉刃  阅读(3318)  评论(2) […]...

  6. 精简商务合同管理系统开发

    精简商务合同管理系统开发 2018-04-03 18:09 by 傅超, … 阅读, … […]...

  7. .net core 微服务项目-介绍篇

    .net core 微服务项目-介绍篇 项目介绍   1、各种方式连接API都会连接到 APIGateway […]...

  8. 信息检索参考网站

    一、免费学术搜索引擎 1.谷歌学术:http://scholar.glgoo.org/ 2.百度学术:http […]...

展开目录

目录导航