您好、欢迎来到现金彩票网!
当前位置:秒速快三 > 数据流分析 >

循环结构的数据流分析方法

发布时间:2019-07-24 21:55 来源:未知 编辑:admin

  在测试人员对代码文件进行静态分析过程中,数据流分析占有举足轻重的作用,很多重要的信息,比如不可达语句、DU、DD、UR…等都是基于数据流分析的结果而得出的。以往,数据流分析通常是由测试人员人工完成。测试者在理解代码逻辑的基础上,从被分析代码的起点跟踪数据的流向,直到到达被分析代码的终点。这项工作看起来简单,但是实际做起来却往往令测试人员感到非常头疼。主要原因有三点:1.数据的变化要随着路径长度的增加不断累积;2.分支条件要随着路径的增长不断累积,并且路径上每增加一个分支节点,都要在路径中最新的数据分析结果的基础上计算分支条件的值; 3.路径数通常随着代码规模的增长以几何级数的速度增长。无论是数据变化结果的累积还是分支条件的累积或者路径数的增长,当任何一个累计到一定数量的时候,对于人脑来说,在进行跟踪与分析就成为一件不可能完成的任务了。所以在实际的工作中,测试人员的通常做法就是尽力而为,能分析多少就分析多少。这就使很多隐藏在代码中的很多问题在测试人员面前逃之夭夭。

  随着计算机技术的不断发展,各行各业的信息化工作也进行得如火如荼。“让电脑代替测试人员进行数据流分析”也不断的被提到测试行业的信息化工作当中。然而却一直进展缓慢,始终达不到工程应用的水平。最主要的拦路石有两块:1 代码中的循环结构的数据流分析;2代码中的函数调用语句的数据流分析。本文阐述的分析方法能够准确高效的完成循环结构的数据流分析。关于函数调用语句的数据流分析方法在另外一篇文章中阐述。

  在介绍具体方法之前,先交代涉及的主要的概念。代码的数据流分析,顾名思义就是对一段代码中从起点到终点数据流动的全过程进行分析。在数据流动的过程中,可能会出现数据定值,也可能会出现数据引用。同时,由于代码中有可能会存在多种分支语句,因此,从起点出发,会产生一条或者多条路径,每条路径中由多个节点组成,每个节点对应相应的约束条件,除此之外,每个节点还对应着到达该节点之前所有的变量应用的最终结果,我们将其称之为数据切片。随着路径长度的增长,约束条件不断累积,在到达终点之前,如果约束条件的取值为永假,则路径终止,此路径为不完整路径,如果顺利到达终点,则此路径为完整路径。由于本文阐述的是循环结构的数据流分析方法,所以有必要介绍循环相关的概念。循环的入口条件表达式如果是可计算的,或者循环中的跳出语句的约束条件集合是可求值的话,则循环为正常结束循环;否则的话,在数据流分析过程中,为了避免无意义的循环导致路径的无限延长,本文阐述的方法会设定一个阈值,如果不是正常结束循环,当循环次数超过阈值后,强制令循环终止,这样的循环称之为强制结束循环。循环中的语句和循环后的语句由于可能受到循环所造成的数据变化的影响,称之为循环相关语句。

  对于没有循环结构和函数调用语句的代码段,目前已经形成了比较成熟的数据流分析方法,循环结构的数据流分析是对普通数据流分析方法的改进。

  对于没有循环和函数调用的代码段,一般的数据流分析方法包括变量应用分析、构建块树、建立控制流图、遍历路径等几个步骤。

  在语法分析的基础上,对在代码中发生定值及引用的语句进行分析,并将定值及引用的变量及其具体值按照发生的顺序进行记录。注意,一定要按照顺序记录,因为不同的顺序会产生不同的数据结果。

  在词法分析、语法分析的基础上,以代码段起始点为根节点,分析代码段中各分支语句如if、else if、for、 while、case…等分支语句以及break 、exit、 return…等强制转向语句的层次关系及先后关系,从而构建成一颗树,通常会将带有函数调用的语句处理为普通语句,不做为单独的一个块来处理。

  在块树构建完成后,从根节点开始,以根节点作为源点,按照子块的先后顺序及层次关

  系对子块进行分析,根据每个子块的具体类型建立其所有目标节点,所有块分析完毕后,将会构建成特定代码段的控制流图。

  从控制流图的源点开始,使用深度优先搜索遍历图中所有路径,路径边上面的变量应用都要记录到数据切片上。以最新的数据切片为基础,在遍历的过程中不断计算各节点累积约束条件的逻辑值,计算并记录下每个节点对应的最新的数据切片,获取所关注的数据流分析结果。

  要对循环结构进行正确的数据流分析,前提是正确的绘制for,while, do,break, continue等循环相关块的控制流图。在此基础上,本文分别介绍正常结束循环和强制结束循环两种情况下的数据流分析方法。

  如果循环是正常结束循环,那么就按照正常的数据流分析即可。相较于普通的数据流分析方法,所不同就是路径随着循环次数的增加不断延长,直至循环结束。

  由于循环被强制结束,所以每条路径的最新的数据切片、约束条件集合都是不准确的。理论上说,循环相关的语句都是不能够进行正确的数据流分析了,包括循环中的语句和循环后的语句。可循环相关语句的数据流分析往往非常重要,所以只能尽力而为了。通过对循环结构内部的数据分析,我们能够获取循环内部数值可能会发生变化的变量集合,这个集合可以看成是当前强制结束循环所造成的数据结果。在路径遍历过程中,如果到达了循环相关语句中的分支语句,暂时可将循环视而不见,认为其不存在,对分支语句的分支条件进行变量分析,如果该条件中使用了循环内部的定值集合中的变量,则认为其可取任意值,不进行分支条件的数值检测,所有分支路径都遍历。如果该条件中没有使用循环内部的定值集合中的变量,则进行正常的数据流分析。如此,能够对强制结束循环的循环相关语句中的相当一部分进行必要的数据流分析。

  在测试之家开发的ufinder(不可达语句检测工具)V0.97中应用了上文阐述的对循环结构的数据流分析分析方法,相对于一般的数据流分析,在ufinder中对数据流分析进行了一定程度的简化,主要有两点:1.数据切片中仅仅存储变量的定值,而没有存储变量的引用;2.遍历过程中如果找到一条完整路径,说明存在一条可达路径,遍历过程立刻停止;通过实际工程应用的检验,本文阐述的方法确实能够准确高效且全面地对包含有函数调用语句的代码段进行数据流分析。

  《DesigningData-IntensiveApplications》的核心部分都已经翻译完成了。此书是分布式系统架构必读书,出版于2017年,中文版目前还没有面世。我找了其中比较吸引我的那几章,...博文来自:wujiandao的专栏

  参考:一、数据流图的基本组成成分数据流:是由一组固定成分的数据组成,表示数据的流向。值...博文来自:Jesse_嘉伟的专栏

  引子编译器后端会对前端生成的中间代码做很多优化,也就是在保证程序语义不变的前提下,提高程序执行的效率或减少代码size等优化目标。优化需要依靠代码分析给出的“指导信息”来相应地改进代码,而代码分析中最...博文来自:电影旅行敲代码

  对汽车数据流分析诊断故障,常采用以下5种方法:(1)数值分析法;(2)时间分析法;(3)因果分析法;(4)关联分析法;(5)比较分析法。数据分析法是怎样进行汽车动态数据流分析的...博文来自:bee-factory

  1.数据流分析框架关键步骤。个人的问题: 什么叫做数据流分析?为何将下列问题作为关键步骤?关键问题及步骤(soot生存手册中提到):1.1.决定分析的本质是什么:是否向前后者向后的数据分析?是否考虑分...博文来自:课桌

  结构化方法是强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法,也称为新生命周期法,是生命周期法的继承与发展,是生命周期法与结构化程序设计思想的结合。其基本思想是用系统工程的思想和工程化...博文来自:柳婼 の blog

  一引言       在测试人员对代码文件进行静态分析过程中,数据流分析占有举足轻重的作用,很多重要的信息,比如不可达语句、DU、DD、UR…等都是基于数据流分析的结果而得出的。以往,数据流分析通常是...博文来自:plstudio1的博客

  首先回顾一下软件开发方法学在整个软件开发过程中的位置:结构化方法一种系统化的软件开发方法,包括:结构化分析方法——需求结构化设计方法——设计结构化程序设计方法——coding一、结构化分析方法目的是为...博文来自:土豆洋芋山药蛋的博客

  (1)结构化开发方法是使用最广泛、历史最长的过程化开发方法。结构化开发方法产生过程的抽象,这些抽象把软件视为处理流,定义构成一系列步骤的算法,每一步骤都是带有预定义输入和特定输出的一个过程,把这些步骤...博文来自:缥缈

  1.哈希值工具:MD5deeep用于判定开发者的程序是否被修改2.查找字符串帮助了解程序功能属性3.动态链接函数工具:DependencyWallker根据调用的DLL模块中的函数推测功能常见三大dl...博文来自:shannow_123的博客

  引子在数据流分析(一)和数据流分析(二)中我们介绍了数据流分析的基本模式以及到达定值和活变量的分析。在这篇文章中我们简要介绍一下可用表达式和数据流分析中的格。可用表达式数据流分析中的格可用表达式如果从...博文来自:电影旅行敲代码

  定义以程序模块化为基础建立起来的软件机体,结构的基本单元是模块,模块的相互作用实现功能,模块的组合构成系统。结构化方法尽管是早期的方法,但可以初步了解软件开发的细化过程是如何进行的。理解有关结构化分析...博文来自:廊坊师范学院信息技术提高班 十五期

  请根据以下描述画出‘定货合同管理’子系统的第0层和第1层数据流图。该子系统共有三个加工:1)首先是“建立订货合同台帐”:从客户的订货合同和材料检验单及客户文件输入数据、输出形成合同台帐文件;2)然后是...博文来自:be_solider

  面向对象的分析:领域模型、用例图、类图、活动图、顺序图、状态图。面向过程或称结构化的:流程图、数据字典、er图。...博文来自:Ask马小向的专栏

  数据流图从数据传递和加工的角度,以图形的方式刻画数据流从输入到输出的移动变换过程。...博文来自:沃不打牌的博客

  计算机最擅长解决重复的问题,这个问题主要通过循环机构来解决,以VB为例VB提供两种循环结构FOR循环(一般已知循环次数)DO循环(一般未知循环次数) 接下来展开叙述,两种结构 FOR循环作用:一般用于...博文来自:shang_0122的博客

  1.循环结构 (1).while循环    while循环的三要素:①进入循环的条件;②循环变量;③循环结束的条件(退出循环的条件)    while(循环体执行的条件,满足这个条件,才开始循环){ ...博文来自:jiuytgjgtg的博客

  @[循环结构总结与感受toc]循环语句一.for,while,do-while语句的内容介绍,特点与应用。二.程序设计容易出错的误区。三.学习感受总结。一:①(●—●)for语句格式:for(控制变量...博文来自:的博客

  注:求n! 1、前面板如图所示: 2、程序框图如下图所示:博文来自:Destiny_LI的博客

  一.循环结构1.循环的条件循环的条件,循环变量,循环体2.三种语法①.while语法下面一个demo,模拟10086人工客服服务,输入不同数字进行不同操作,输入0退出循环,显示谢谢使用 varinpu...博文来自:Josie_Huang的博客

  ·C++循环结构与C大致相同,在I/O工具上有细微差别1./*·要求用户输入两个整数·计算并输出两个整数之间所有整数的和·假设先输入的是较小的整数·例2-9的整数和为44分析:此题主要考察的是输入与循...博文来自:江南蜡笔小新

  1,输入与输出及格式化2,常见输入函数a.多类型输入函数:scanf(格式控制,地址列表);b.按指定格式的要求将数据保存到指定内存空间;c.当格式控制部分中相邻的两个格式字符...博文来自:嗳夏晨网络智能化

  1、数据流图的定义数据流图(DFD)是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。在结构化开发方法中,数据流图...博文来自:Switch的博客

  目前认识到的C,主要是通过for、while和do-while三种语句来进行循环语句的。循环结构主要分为两种:①当型循环结构:根据条件判断是否执行循环(for循环和while循环);②直到型循环:先循...博文来自:hzcx777的博客

  一:while语句注意:1.特点:先判断表达式,后执行循环体(当型)2.说明:循环体有可能一次也不执行循环体可为任意类型语句下列情况,退出while循环:-条件表达式不成立(为零)循环体内遇b...博文来自:weixin_43478706的博客

  for循环结构循环结构:在开发中遇到需要重复的做某见事情的时候,需要用到循环结构.python中提供的循环结构有两种:for循环,while循环.for循环:一般在知道循环次数的时候使用.while循...博文来自:韩波的博客

  1.理论知识1.二重循环就是一个循环体内又包含另一个完整的循环结构;  while循环, do-while循环和for循环.  这三种之间是可以互相嵌套的.2.循环结构包括循环条件和循环操作.  循环...博文来自:weixin_43930997的博客

  循环结构1循环结构的概念先看看生活中的一些场景(1)食堂阿姨打菜:接过顾客的餐盘→询问菜品→打菜→递回餐盘,重复以上过程,直到所有顾客的菜都打完了。(2)快递员送快递:查看送件地址→赶往目的地→电话告...博文来自:肉嘟嘟的博客

  一、循环结构、循环结构作用是重复执行一段程序 它是有条件的次序是有限的1.for循环语句for循环语句一般用于循环次数已知的情况格式为:(循环变量初始化;条件判断;循环变量变化){循环体}例:for(...博文来自:yunlnog的博客

  这些只是本蒟蒻的一些见解,还望各位神犇积极评论提出宝贵意见,万分感谢!!!!!!!!!!第四篇啊,给点关注和赞吧,以后会写更多的!!!!!!!!!!!!!!!!!!!!!!!!!本章讲的是C++语言三...博文来自:C++

  分支结构  在C语言中,if语句的写法应该是这样的if(条件判断){ ......}在python中稍有不同,第一条件判断不用打括号,当然打括号也没有关系,第二没有花括号,那没有花括号的话,那怎么判断...博文来自:The_last_knight的博客

  一,简介本篇主要介绍Python中的选择分支结构(if-elif-else)和循环结构(for、while)的使用。注意不管是选择结构、还是循环结构,Python用缩进代替了Java/C/C++/C#...博文来自:熊猫大哥大

  第五章循环结构程序设计例1计算2+4+6+8+…+98+100运行结果例2一个球从100米高度自由落下,每次落地后反跳原来高度的一半,再落下,求它在第十次落地时,共经过多少米?第十次反弹多高......博文来自:weixin_44596213的博客

  upszhang:有些CWE的问题,怎么使用CWE,能请教你吗?要用CWE标准检查C的源码,该如何使用CWE?

  plstudio1:[reply]dashuniuniu[/reply] 我所在的单位是就是软件测评中心,我也有自己研发的静态分析系统plsta(所以有机会获取大量的静态分析数据。另外,还有一系列自主研发的白盒测试产品:pldyn(单元测试工具),ufinder(不可达语句检测工具)、dfparser(数据流分析工具),这系列品为白盒测试奠定了坚实的基础。 测试之家官方网站:

http://starnet-france.com/shujuliufenxi/668.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有