6.8.3 程序插桩

更新于 2026年10月10日 版权声明
6.8.3 程序插桩

在软件动态测试中,程序插桩是一种基本的测试手段,有着广泛的应用。

简单来说,程序插桩技术是借助往被测程序中插入操作来实现测试目的的方法,即向源程序中添加一些语句,实现对程序语句的执行、变量的变化等情况进行检查。例如,想要了解一个程序在某次运行中所有可执行语句被覆盖的情况,或是每个语句的实际执行次数,就可以利用程序插桩技术。

如果我们想要了解一个程序在某次运行中所有可执行语句被覆盖的情况,或是每个语句的实际执行次数,最好的办法是利用插装技术。这里仅以计算整数X和整数Y的最大公约数程序为例说明插装方法的要点。图6.18给出了这一程序的流程图。图中的虚线框并不是原来程序的内容,而是为了记录语句执行次数而插入的。这些虚线框要完成的操作都是计数,其形式如下。

图示

如图6.18所示,从入口开始执行,到出口结束。凡经历的计数语句都能记录下该程序点的执行次数如果我们在程序的入口处还插入了对计数器C(i)初始化的语句,在出口处插入了打印这些计数器的语句,就构成了完整的插装程序。它便能记录并输出在各程序点上语句的实际执行次数。

图示

图6.18 插桩后的求最大公约数程序流程图

通过插入的语句获取程序执行中的动态信息,这一做法正如在刚研制成的机器特定部位安装记录仪表是一样的。安装好以后开动机器试运行,我们除了可以从机器加工的成品检验得知机器的运行特性外,还可通过记录仪表了解其动态特性。这就相当于在运行程序以后,一方面可检验测试的结果数据,另一方面还可借助插入语句给出的信息了解程序的执行特性。正是这个原因,有时把插入的语句称为探测器,借以实现探查或监控的功能。

在程序的特定部位插入记录动态特性的语句,最终是为了把程序执行过程中发生的一些重要历史事件记录下来。例如,记录在程序执行过程中某些变量值的变化情况、变化的范围等。

设计程序插装程序时需要考虑的问题包括如下三个:

(1)探测哪些信息;

(2)在程序的什么部位设置探测点;(https://www.daowen.com)

(3)需要设置多少个探测点。

其中,前两个问题需要结合具体题目解决,并不能给出笼统的回答。第三个问题,需要考虑如何设置最少探测点的方案。在一般的情况下,我们可以认为,在没有分支的程序段中只需一个计数语句。但程序中由于出现多种控制结构,使得整个结构十分复杂。为了在程序中设置最少的计数语句,需要针对程序的控制结构进行具体的分析。这里,我们以Fotran程序为例,应在如下部位设置插桩语句:

(1)程序块的第一个可执行语句之前;

(2)ENTRY语句的前后;

(3)有标号的可执行语句处;

(4)DO、DOWHILE、DOUNTIL及DO终端语句之后;

(5)BLOCK-IF、ELSEIF、ELSE及ENDIF语句之后;

(6)LOGICALIF语句处;

(7)输入/输出语句之后;

(8)CALL语句之后;

(9)计算GOTO语句之后。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)