|
|
51CTO旗下网站
|
|
移动端

1.14.1 基本块

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

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

1.14 控制流图

CFG描述了程序中的控制流。CFG帮助测试人员在分析程序时从控制流的角度理解程序的行为。对于相当小的程序,比如不超过50行语句,用手工方式构造出CFG并不太难。然而,随着程序规模的扩大,构造CFG的难度也在增大,因此,有必?捎霉ぞ摺?

CFG又被称作流图(flow graph)或程序图(program graph)。但是,不要将CFG与1.16节中介绍的程序依赖图(Program Dependence Graph,PDG)相混淆。在本节,我们将介绍究竟什么是CFG,以及如何从一个程序构造其CFG。

1.14.1 基本块

假设P是一个用过程式程序设计语言(可能是高级语言如C或Java,也可能是80×86汇编语言)写的程序。P的基本块(或简称块),就是一个连续的语句序列,只有一个入口点和一个出口点。因此,一个基本块具有唯一的入口点和出口点,这些入口点、出口点就是基本块的第一条语句和最后一条语句。程序的控制总是从基本块的入口点进入,从出口点退出。除了其出口点之外,程序不可能在基本块的其他任意点退出或中止。当基本块只包含一条语句时,入口点与出口点重合。

例1.23下面的程序输入两个整数x和y,输出xy。程序总共有17条语句,包括begin语句和end语句。程序的执行从第一行开始,然后到第2行、第3行、第4行、第5行,第5行语句是个if语句。由于第5行语句是一个判断语句,程序的控制可能走到两条分支中的某一条,即第6行或第8行。因此,从第1行开始、到第5行结束的语句序列就构成了一个基本块,其唯一的入口点在第1行,出口点在第5行。

程序P1.2

 
下表列出了程序P1.2中的所有基本块。
 

程序P1.2总共包含9个基本块,依次编以序号1至9。注意,为何第10行的while语句单独构成一个基本块?另外也注意,我们在列表中省略了第7行和第13行,因为它们是语法标志符,还有begin和end也被省略掉了。

注意,某些程序分析工具把单条过程调用语句当作一个单独的基本块。假如我们也这么做的话,就得把程序P1.2中的input和output语句当作两个独立的基本块。考虑下面从程序P1.2中的抽取出的程序片段:

 

在例1.23中,从第1行到第5行语句构成了一个基本块。上述语句序列包含对input函数的一个调用。假如函数调用要区别对待的话,上述语句序列就包含3个基本块,第一个基本块是从第1行到第3行语句,第二个是第4行语句,第三个是第5行语句。

函数调用本身常常被当作基本块,因为它们会造成控制程序从当前执行的函数转移到别的地方,从而可能引起程序的非正常终止。在控制流图的分析中,除非特别说明,否则都视函数调用与其他顺序语句一样,其执行不会引起程序的中止。

【责任编辑:云霞 TEL:(010)68476606】

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

读 书 +更多

敏捷Acegi、CAS:构建安全的Java系统

本书是关于Acegi、CAS的权威教程,是Java/Java EE安全性开发者的必备参考书。无论是Java EE安全性编程模型的背景和基础知识,还是Acegi、CA...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊