白盒测试 词法分析与桌面走查

来源:互联网 发布:吴亦凡在美国人气知乎 编辑:程序博客网 时间:2024/06/06 17:33

6.1.1  词法分析与语法分析

通过词法分析与语法分析可以获取软件组成的重要基本因数,例如:变量标识符、过程标识符、常量等,组合这些基本因数可以得到软件的基本信息。如:

 标号交叉引用表。列出在各模块中出现的全部标号,在表中标出标号的属性,包括己说明、未说明、己使用、未使用。表中还包括在模块以外的全局标号、计算标号等。

 变量交叉引用表,即变量定义与引用表。在表中应标明各变量的属性,包括已说明、未说明、隐式说明以及类型及使用情况,进一步还可区分是否出现在赋值语句的右边,是否属于COMMON变量、全局变量或特权变量等。

 子程序、宏和函数表。在表中列出各个子程序、宏和函数的属性,包括己定义、未定义、定义类型;以及参数表、输入参数的个数、顺序、类型,输出参数的个数、顺序、类型;已引用、未引用、引用次数等。

 等价表。表中列出在等价语句或等值语句中出现的全部变量和标号。

 常数表。表中列出全部数字常数和字符常数,并指出它们在哪些语句中首先被定义。

 

按功能分类,引用表的作用有以下3种。

 直接从表中查出说明/使用错误。如循环层次表、变量交叉引用表、标号交叉引用表。

 为用户提供辅助信息。如子程序(宏、函数)引用表、等价表、常数表。

 用来做错误预测和程序复杂度计算。如操作符和操作数的统计表等。

6.1.2静态错误分析

静态错误分析用于确定在源程序中是否有某类错误或“危险”结构。它有以下几种。

1.类型和单位分析

为了强化对源程序中数据类型的检查,在程序设计语言中扩充一些新的数据类型,例如,仅能在数组中使用的“下标”类型及在循环语句中当作控制变量使用的“计数器”类型。这样就可以静态预处理程序,分析程序中的类型错误。

2.引用分析

在静态错误分析中,最广泛使用的技术就是发现引用异常。如果沿着程序的控制路径,变量在赋值以前被引用,或变量在赋值以后未被引用,这时就发生了引用异常。

为了检测引用异常,需要检查通过程序的每一条路径。通常采用类似深度优先的方法遍历程序流图的每一条路径,也可以建立引用异常的探测工具,这种工具包括两个表:定义表和未引用表。每张表中都包含一组变量表。未引用表中包括已被赋值但还未被引用的一些变量。

当扫描抵达一个出度大于1的节点V时,深度优先探测算法要求先检查最左分支的那一部分程序流图,然后再检查其他分支。在最左分支检查完之前,应把定义表与未引用表的当前内容用一个栈暂时存储起来,当最左分支检查完之后,算法控制返回到节点V,从栈中恢复该节点的定义表和未引用表的老的副表,然后再去遍历该节点的下一个分支,这个过程要继续到全部分支检查完为止。

3.表达式分析

对表达式进行分析,以发现和纠正在表达式中出现的错误。包括:

 在表达式中不正确地使用了括号造成错误;

 数组下标越界造成错误;

 除数为零造成错误;

 对负数开平方,或对π求正切造成错误。

最复杂的一类表达式分析是对浮点数计算的误差进行检查。由于使用二进制数不精确地表示十进制浮点数,常常使计算结果出乎意料。

4.接口分析

接口一致性是程序的静态错误分析和设计分析共同研究的题目。接口一致性的设计可以分析检查模块之间接口的一致性和模块与外部数据库之间接口的一致性。

程序关于接口的静态错误分析检查过程与实参在类型、函数过程之间接口的一致性,因此要检查形参与实参在类型、数量、维数、顺序、使用上的一致性;检查全局变量和公共数据区在使用上的一致性。

原创粉丝点击