|
|
|
|
移动端

1.16.1 数据依赖性

《软件测试基础教程》第1章软件测试的基本知识,本章作为一个导引,其目的在于让读者熟悉与软件测试相关的基本概念,建立起全书的框架。在本书后续章节中将要详细阐述的问题,首先在这里被提了出来。读完这章之后,读者就能够在软件测试和软件质量方面提出一些有意义的问题。本节为大家介绍数据依赖性。

作者:王峰/郭长国/陈振华 等译来源:机械工业出版社|2011-09-16 21:46

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

1.16 程序依赖图

程序P的程序依赖图(Program Dependence Graph,PDG)表现了程序P中各语句之间的不同依赖关系。为了进行测试,考虑数据依赖性和控制依赖性。这两种依赖性都是针对程序中的数据和断言而定义的。下面,介绍如何从程序导出数据依赖性和控制依赖性,以及它们的PDG表示形式。首先介绍如何?淮痰某绦蚬乖霵DG,然后介绍为带过程的程序构造PDG的方法。

1.16.1 数据依赖性

程序中的语句展示了大量的依赖关系。例如,考虑程序P1.3,可以说第8行语句依赖于第4行语句,因为第8行语句可能要用到第4行语句定义的变量product的值。这种形式的依赖被称作数据依赖。

数据依赖性可用数据依赖图(DDG)的形式表示出来。构造DDG时,程序P的每一条语句在DDG中都有唯一的一个结点对应;如果说明语句没有对变量进行初始化,则被省略掉。DDG中的每一个结点就像在CFG中一样,都用语句的文本或相应的语句行号进行标注。

要用到两种类型的结点:判断结点,用一个谓词进行标注,如if或while语句中的条件;数据结点,用一个赋值、输入或输出语句进行标注。从结点n2到n1的有向弧表示结点n2数据依赖于n1。这种数据依赖也称作流依赖。数据依赖性的定义如下:

数据依赖性

假设D是包含结点n1和n2的DDG,如果下面两个条件同时成立,则称结点n2数据依赖于n1:

(a)变量v在n1处定义、在n2处引用;

(b)存在一条从n1到n2的非空路径,不包含任何重定义v的结点。

例1.29考虑程序P1.3,其DDG如图1-20所示。该图描述了7个结点,数据依赖性是通过有向边展示出来的。比如,结点8数据依赖于结点4、结点7以及其自身,因?淞縫roduct在结点8处被引用,而在结点4、结点8处被定义;变量num在结点8处被引用,而在结点7处被定义。同样,对应输出语句的结点11,数据依赖于结点4和结点8,因?淞縫roduct在结点11处被引用,而在结点4、结点8处被定义。

 
图1-20 程序P1.3的DDG。图中的结点
编号对应程序中的语句行号,
说明性的语句被省略了
注意,判断结点6数据依赖于结点5和结点9,因?淞縟one在结点6处被引用,而在结点5、结点9处通过输入语句被定义。在图中,我们省略了第2、第3行的说明语句,因为被说明的变量在引用之前通过输入语句进行定义。为了完整起见,数据依赖图可以增加与这两条说明语句对应的结点,并且增加到达这些结点的依赖边(参见练习1.17)。
【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

《ASP.NET AJAX Web 应用开发秘诀(VB版)》

本书详细介绍了AJAX在Web开发上的应用。主要内容包括:ASP.NET AJAX技术概述、实现异步局部更新页面、UpdatePanel编程功能、PageRequestMan...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊