news 2026/3/24 14:58:04

软件的静态测试技术

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
软件的静态测试技术

本章节主要讲解“软件的静态测试技术”的内容,静态测试是通过分析代码来发现错误,所依据的只能是数据和代码的自然属性,对业务属性则一无所知。静态测试并不需要执行软件,通过审查软件的设计、体系结构和代码,从而找出软件缺陷的过程,有时也称为结构化分析。

这就是这类方法的极限,即静态测试方法做到极致,也只能发现一小部分错误。另外,静态分析只能基于现有代码,不能发现代码缺失造成的错误。

静态测试常用的方法有:代码走查、数据流分析、控制流分析和信息流分析。

一、代码走查

代码走查(code walkthrough)是开发人员与架构师集中讨论代码的过程,检查代码的逻辑和语法是否正确。

代码走查的作用主要包括以下几个方面:

  1. 检查是否符合编辑规范;

  2. 检查代码逻辑是否存在问题;

  3. 对源代码进行重构;

  4. 分享开发经验。

代码走查过程中需要注意的是,不应该匆匆忙忙地完成一次代码走查,需要充分地、认真地对待,同时在代码走查过程中可以学习其他工程师的经验。在走查过程中不能用自己的编程思维看待代码,代码走查的目的是确定代码是否正确。

二、控制流分析

控制流分析方法主要是将程序流程图转换为控制流程图,通过控制流程图来分析程序中可能存在的问题。

通过分析控制流程图主要发现以下几类问题:

  • (1)转向并不存在的标号。

  • (2)没有用的语句标号。

  • (3)从程序入口进入后无法达到的语句。

  • (4)不能达到停机语句的语句。

在控制流程图中只有以下两种图形符号:

  • (1)结点:以标为编号的圆圈表示,它代表了程序流程图中矩形框所表示的处理、菱形所表示的两个或多个出口判断以及两至多条流线相交的汇合点。

  • (2)控制流线或弧:以箭头表示,它与程序流程图中的流线是一致的,表明了控制的顺序。

为方便记录,一般会在控制流线上标有名字,如a、b、c 等。

控制流分析步骤如下:

  • (1)确定所有程序元素。

  • (2)根据程序元素之间的相互关系得到控制流程图。

  • (3)将控制流程图转换成控制流矩阵。

  • (4)通过数据结构的形式把控制流矩阵表示出来。

  • (5)借助算法对控制流进行分析,找出存在的问题。

【实例】根据代码画出的控制流程图如图10-5 所示。

图10-5 控制流程图

根据控制流程图画出的控制流矩阵见表10-2。

表10-2 控制流矩阵

通过分析控制流矩阵判断程序是否存在控制流分析方法所关注的几类问题,该实例是正确的,不存在那四类问题。

三、数据流分析

数据流分析最初是随着编译系统要生成有效的目标码而出现的,这类方法主要用于代码优化。

近年来数据流分析方法在确认系统中也得到成功的运用。通过数据流分析可以查找代码中引用但未定义的变量等错误,查找以前未使用的变量再次赋值等数据流异常的情况。数据流分析法的关键是数据的定义和引用。

  1. 数据的定义:如果程序中某一语句执行时能改变某程序变量M 的值,则称M 是被该语句定义的。

  2. 数据的引用:如果语句的执行引用了内存中变量N 的值,则称该语句引用变量N。

数据流分析方法主要是发现以下两种错误:

  • (1)变量未定义但被引用。

  • (2)变量定义但未被引用。

数据流分析方法使用步骤如下:

  • (1)根据代码画出控制流程图。

  • (2)根据控制流程图画出数据流表。

  • (3)分析数据流表。

  • (4)根据分析结果对代码进行修正和优化。

【实例】根据代码画出的控制流程图如图10-6 所示。

图10-6 控制流程图

根据控制流程图画出的数据流表见表10-3。

表10-3 数据流表

对数据流分析表进行分析,可以发现以下问题:

  • (1)语句2 中使用的变量M 在之前的语句中并未定义。

  • (2)语句5 中定义的变量N,在后面一直未使用。

  • (3)语句7 中定义的变量Z,在语句8 中被重新定义了,这样会出现异常警告。

四、信息流分析

信息流分析主要是验证程序变量间信息的传输。程序的信息关系可以通过输入变量与语句关系、语句与输出变量关系和输入变量与输出变量关系三个表来导出。

  1. 输入变量与语句关系:输入变量直接或间接影响语句的执行。

  2. 语句与输出变量关系:语句执行直接或间接影响变量的输出。

  3. 输入变量与输出变量关系:输入变量直接或间接影响输出变量。

信息流分析的步骤如下:

(1)根据代码得到三个关系表:输入变量与语句关系表、语句与输出变量关系表、输入与输出变量关系表。

(2)分析输入变量与语句关系表,查看对未定义的变量所有可能的引用,根据语句的执行情况来判断是哪个输入变量未定义。

(3)分析语句与输出变量关系表,查看所有可能会影响输出变量取值的语句,根据语句的执行情况来判断是哪条语句导致输出变量错误。

(4)分析输入变量与输出变量关系表,查看所有可能影响输出变量取值的输入变量,判断输出变量会不会由一些非法的变量导出。

信息流主要分析以下内容:

  • (1)能够列出对输入变量的所有可能的引用。

  • (2)在程序的任何指定点检查其执行可能影响某一输出变量值的语句。

  • (3)输入输出关系提供一种检查,看每个输出值是否由相关的输入值而不是其他值导出。

【实例】如以下代码段(此代码为伪代码):

Q = 0; 2 R = M; 3 while(R>=N) { 4 Q=Q+1; 5 R=R-N; }

根据代码分析出输入变量与语句关系表、语句与输出变量关系表和输入变量与输出变量关系表,如图10-7 所示。

图10-7 输入变量、语句、输出变量关系表

输入变量与语句关系表中,由于输入变量M、N 的大小直接影响while语句的循环次数,所以输入变量与语句3、4、5是有关系的。

语句与输出变量关系表中,语句1、2、3 和4与输出变量的关系比较容易理解,较难理解的是语句5与输出变量Q和R都有关系,因为语句影响输出变量R的值,而R的值又影响while语句的循环次数,所以间接影响输出变量Q的值。

输入变量与输出变量的关系表比较容易理解,输入变量M、N决定输出变量Q和R的大小。

本章节关于“软件的静态测试技术”的内容就学习到这里,大家觉得文章有用的话一定要关注我们,每天来这里和小编一起学习涨薪技能哦。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 21:21:28

@Validated 和 @Valid的坑:踩过这些坑才敢说会用参数校验

先简单回顾:Validated和Valid的基础区别坑1:以为Validated能直接实现嵌套校验,结果校验失效错误示例:正确做法:坑2:分组校验用Valid,结果分组完全没效果先定义分组接口:错误示例&…

作者头像 李华
网站建设 2026/3/21 20:21:13

Java并发编程学习笔记-第一章

一、竞态条件 先来看一段代码。 /*** UnsafeSequence * */public class UnsafeSequence {private int value;// Returns a unique value.public int getNext() {return value++;// value++导致竞态条件}// 下面测试程序是自己写的public static void main(String[] args) {Un…

作者头像 李华
网站建设 2026/3/23 10:20:46

项目定稿阶段AD导出Gerber文件的规范流程(操作指南)

项目定稿阶段AD导出Gerber文件的规范流程:从设计到制造的“最后一公里”实战指南在PCB设计的世界里,原理图画得再漂亮、布局布线优化得再极致,如果最后一步——输出Gerber文件出了问题,整块板子就可能变成一块“废铜烂铁”。很多工…

作者头像 李华
网站建设 2026/3/23 8:36:26

Ollydbg下载及安装通俗解释:无需编程也能懂

从零开始用 OllyDbg:下载、配置到第一次调试,小白也能上手 你有没有想过,一个软件到底是怎么运行的?它为什么会弹出“注册失败”?输入错误密码时,程序是在哪里比对的?这些看似神秘的操作&#…

作者头像 李华
网站建设 2026/3/20 8:52:01

AI元人文构想:内观照叙事模型

AI元人文构想:内观照叙事模型摘要: 内观照叙事模型是AI元人文构想的核心认知框架,它重新定义了智能体(包括人类和人工智能)的意义生成机制。该模型将认知过程阐释为在“觉知场域”中“意义焦点”的持续凝聚、叙事化与重…

作者头像 李华
网站建设 2026/3/15 8:57:42

2025vue前端面试题,零基础入门到精通,收藏这篇就够了

1.v-for 和 v-if 可以混合使用吗?为什么? 可以,但是尽量不要同时使用 Vue2 中 v-for 计算优先级比 v-if 高,首先会把虚拟节点渲染出来,然后再进行 v-if 判断。降低渲染性能。 Vue3 中 v-if 的优先级高于 v-for &…

作者头像 李华