数据流测试

1、数据流分析

从数据流视角:程序是一个程序元素对数据访问的过程;
数据流关系:数据的【定义——使用】对;
出发点:对数据的不正确处理;
使用程序图来描述数据【定义——使用】对。

数据流测试:指关注变量接受值的点 和使用(或引用)这些值的点 的 结构性测试形式。

2、数据流测试

数据流测试按照程序中的变量定义使用的位置来选择程序的测试路径;
数据流测试关注变量接收值的点和使用这些值的点;
一种简单的数据流测试策略是要求覆盖每个定义-使用路径一次;
数据流测试用做路径测试的“真实性检查”。

数据流分析—程序控制流图

G(P ) :程序图
构造方式同前,语句片段代表节点,边代表节点序列
单入口,单出口,且不允许从某个节点到其自身的边
P:程序
V:一组程序变量

DD-路径

DD路径:决策对决策路径(Miller)。从决策语句的“出路”开始,到下一个决策语句的“入路”结束。
DD链:有向图中一条起始和终止节点不同点路径。
由一个节点组成,内度=0;
由一个节点组成,外度=0;
由一个节点组成,内度〉=2或外度〉=2;
由一个节点组成,内度=1并且外度=1;
长度〉=1的最大练

DD-路径图

DD-Path graph是一张带有标签的有向图,图中的节点表示程序图的DD路径,而边表示路径的控制流。
对于给定的程序,可以构造多种不同的程序图,所有这些程序图,都可以简化为唯一的DD-路径图。
对100行以内的程序生成DD路径是可行的,如果超过这个规模,一般需要有分析工具的支持。

控制流图最简化也就是DD路径了。可以理解为 DD属于控制流图。

3、定义/使用测试

定义节点

节点n∈G(P)是变量v ∈V的定义节点,记做DEF(v,n),当且仅当变量的值由对应节点n的语句片断处定义。
定义节点语句:

  • 输入语句
  • 赋值语句
  • 循环语句和过程调用
    如果执行这些语句,变量的值往往会发生变化。
使用节点

节点n∈G(P)是变量v ∈V的使用节点,记做USE(v,n),当且仅当变量v的值在对应节点n的语句片断处使用。
使用节点语句:

  • 输出语句
  • 赋值语句
  • 循环控制语句
  • 过程调用
谓词使用、计算使用

使用节点USE(v,n)是一个谓词使用(记做P-use),当且仅当语句n是谓词语句;否则,USE(v,n)是计算使用(记做C-use)

  • 对应于谓词使用的节点,其外度≥2
  • 对应于计算使用的节点,其外度≤1
定义-使用路径

定义-使用路径(记做du-path):是PATHS(P)中的路径,使得对某个v ∈V,存在定义和使用节点DEF(v,m)和USE(v,n),使得m和n是该路径的最初和最终节点。
就是以定义节点开头,使用节点结尾。

定义清除路径

定义清除路径(记做dc-path):是具有最初和最终节点DEF(v,m)和USE(v,n)的PATHS(P)中的路径,使得该路径中没有其他节点是v的定义节点。
以定义节点开头,使用节点结尾,且路径途中没有其他(该变量的)定义节点。

4、覆盖指标

定义-使用路径测试覆盖指标

数据流指标假设所有程序变量都标识了定义节点和使用节点,且关于各变量都表示了定义-使用路径
T:拥有变量集合V的程序P的程序图G§中的一个路径集合

全定义准则

集合T满足程序P的全定义准则,当且仅当所有变量 ,T包含从v的每个定义节点到v的一个使用的定义清除路径。(这ppt里定义的是真的拗口。)
可以理解为:T是一个路径集合,包含了(所有变量)变量v的所有定义节点到任意一个使用节点的dc-path。
有一说一,我思索了半天还是懵的。百度相关内容又太少!
这里先放下

图中标亮部分。
def(U,3),use(x,3),use(y,3);
use(U,5),use(U,14),use(U,15);

按照当时老师讲的:n3分别到n5、n14、n15的路径集合就是U的全覆盖。
我:???

全使用准则

集合T满足程序P的全使用准则,当且仅当所有变量 ,T包含从v的每个定义节点到v的所有使用以及到所有USE(v,n)后续节点的定义清除路径。

全谓词使用/部分计算使用准则

集合T满足程序P的全谓词使用/部分计算使用准则,当且仅当所有变量,T包含从v的每个定义节点到v的所有谓词使用的定义清除路径,且若v的一个定义没有谓词使用,则定义清除路径导致至少一个计算使用。

全计算使用/部分谓词使用准则

集合T满足程序P的全计算使用/部分谓词使用准则,当且仅当所有变量,T包含从v的每个定义节点到v的所有计算使用的定义清除路径,且若v的一个定义没有计算使用,则定义清除路径导致至少一个谓词使用。

全定义-使用路径准则

集合T满足程序P的全定义-使用路径准则,当且仅当所有变量 ,T包含从v的每个定义节点到v的所有使用,以及到所有USE(v,n)后续节点的定义清除路径,且这些路径要么有一次的环经过,要么没有环路。

这定义看的我是真的脑壳子晕。

其他白盒测试方法
  • 程序插装
  • 程序编译
黑盒白盒比较:

黑盒测试:漏洞和冗余,而且不能被发现。
白盒测试的基路径测试方法:用有向图表示代码和程序路径公式化,掩盖了代码中的重要信息,即可行路径和不可行路径的区别。

5、测试的效率

什么时候测试可以停止?多少是足够的测试?

当时间用完时——缺少标准
当继续测试没有产生新失效时
当继续测试没有发现新缺陷时
当无法考虑新测试用例时—原因?
当回报很小时—基于分析的方法
当达到所要求的覆盖时—结构化测试的指标
当所有缺陷都已经清除时—难以实现

相关内容可以参考这位大佬的博客。很清楚。

另外,学了这么多,感觉脉络有点杂乱,最后会整理一下。

THE END

#9.白盒测试:数据流测试相关推荐

  1. 白盒测试--数据流测试

    文章目录 白盒测试--数据流测试 基础定义 最少测试用例数计算 白盒测试–数据流测试 基础定义 数据流测试主要用于优化代码,早期的数据流分析常常集中于定义/引用异常的缺陷. 变量被定义,但从来没有使用 ...

  2. 【软件测试】白盒测试の数据流测试

    文章目录 数据流测试 数据流图 动态数据流测试 数据流测试 数据流测试方法根据程序中定义的位置和变量的使用来选择程序的测试路径. 数据流测试是一种强大的工具,用于检测由于编码错误而导致的数据值的不当使 ...

  3. 白盒测试——数据流测试

    数据流测试方法是按照程序中变量定义和使用位置来选择程序的测试路径. 一.基本概念 1.def(S)={x} 定义节点:表示在语句S中定义了变量x(此处定义表示对x进行了赋值). 2.use(S)={x ...

  4. 结构测试(白盒测试) 路径测试和数据流测试

    结构测试(白盒测试)  Structure Test 结构性测试的方法:路径测试.数据流测试 结构性测试力求提高测试覆盖率. 结构性测试主要用于软件验证: are we creating a syst ...

  5. 简述什么是静态测试、动态测试、黑盒测试、白盒测试、α测试 β测试

    简述什么是静态测试.动态测试.黑盒测试.白盒测试.α测试 β测试 静态测试是不运行程序本身而寻找程序代码中可能存在的错误或评估程序代码的过程. 动态测试是实际运行被测程序,输入相应的测试实例,检查运行 ...

  6. 软件工程——软件测试(黑盒测试、白盒测试、测试分析报告)

    经过前面软件测编码阶段,是不是我们就可以把软件发布出去供用户使用了呢?不是的,为了确保软件不会出现不必要的差错,还需要经过重重测试的. 目录 软件测试的目的 软件测试的原则 软件测试的方法有哪些? 测 ...

  7. 软件测试——2.5 数据流测试

    数据流测试 ​ 关注点上的变量的操作是否正确 关于变量的操作: ​ · 定义:赋值.初始化-- ​ · 使用 ​ def(n) def(e):节点n 边e上所有定义的变量 ​ use(n) use(e ...

  8. 软件测试学习笔记(三)控制数据流测试

    软件测试学习笔记(三)控制&数据流测试 视频链接:软件测试_中国大学MOOC 2.3 结构化覆盖 2.4 控制流测试 2.5 数据流测试 1.什么是顶点覆盖? 对每个测试需求,即可达顶点,都可 ...

  9. 测试基础之一——静态测试,动态测试,黑盒测试,白盒测试,α测试,β测试的定义

    1.静态测试 定义: 静态测试是指不运行程序本身而寻找程序代码中可能存在的错误或评估程序代码的过程. 包括对代码测试.界面测试和文档测试三个方面: 对于代码测试,主要测试代码是否符合相应的标准和规范: ...

最新文章

  1. 负载均衡策略关键因素
  2. 关于truncate与checkident
  3. html列表的列选择事件,html5 datalist 选中option选项后的触发事件
  4. C++11 中值得关注的几大变化
  5. 平衡二叉树,AVL树之图解篇
  6. signature=ec663bb1ca3cfa2e278da44aa044d1c6,Fair Exchange of Signatures with Multiple Signers
  7. React.js 基础入门四--要点总结
  8. DevOps正在扼杀程序员?
  9. EasyRecovery深度扫描以恢复桌面遗失数据的方法
  10. 软件验收测试报告报价,软件验收测试介绍和软件验收报告的费用是多少?
  11. DPDK Release 20.08
  12. 转《营销活动及网络红包个税征免与税收策划》
  13. python学习----简易版非诚勿扰
  14. Redis5.0新特性-集群管理器由redis-trib.rb迁移到redis-cli
  15. 汇客huikeCRM项目实战-牛刀小试
  16. 实现从一个按钮跳转到另一个页面
  17. 【修真院java小课堂】代码生成
  18. pixhawk连接到nvidia xavier
  19. Power Method for dominate eigenvalue
  20. 82-FastDFS详解

热门文章

  1. ui设计移动端字体适配_JavaScript之独立使用lib-flexible.js适配移动端UI设计750px设计图...
  2. 文件中查找并删除feff
  3. T(n) = 25T(n/5)+n^2的时间复杂度(转)
  4. php rsa模拟登录微博,微博模拟登录爬虫
  5. 【Python】asyncio的使用(async、await关键字)
  6. 苹果应用中含有第三方支付怎么办?
  7. 管家婆软件批量导入商品信息教程
  8. 计算机组成原理学习笔记————计算机指令,MIPS指令集,存储器操作数,数据传送指令,取数存数指令
  9. 指定端口启动minio
  10. Eyenuk宣布FDA核准EyeArt自主AI系统用于糖尿病视网膜病变筛查