news 2026/1/10 5:51:39

软件的静态测试技术

作者头像

张小明

前端开发工程师

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进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/24 18:19:59

科研人员必备AI工具:anything-llm助力论文资料整理

科研人员必备AI工具:Anything-LLM助力论文资料整理 在当今科研领域,一个熟悉的场景是:博士生面对着上百篇PDF格式的文献,反复翻找某篇论文中的某个方法描述;研究员在撰写综述时,不得不手动比对十几篇工作的…

作者头像 李华
网站建设 2026/1/9 3:20:12

好写作AI:理工科论文提速,方法、结果与公式的AI妙用

在实验室耗费数月获得的宝贵数据与发现,却在撰写论文时卡在“如何专业表述”上?公式推导的逻辑链条,如何在论文中清晰呈现?好写作AI深度适配理工科研发者的思维与工作流,专注于攻克方法描述、结果陈述与公式推导这三大…

作者头像 李华
网站建设 2025/12/25 4:38:19

MT4编程中文手册怎么选?MQL4函数详解与避坑指南

对于希望深入理解MT4平台交易逻辑、编写自定义指标或智能交易系统的交易者来说,一份高质量的MT4平台MQL4语言编程参考手册中文版,其价值不言而喻。它不仅是将官方英文文档进行翻译,更应是结合中国交易者实际需求,对核心概念、函数…

作者头像 李华
网站建设 2025/12/28 1:07:41

Anything-LLM私有化部署全攻略,安全又高效

Anything-LLM私有化部署全攻略,安全又高效 在企业数据日益敏感、合规要求愈发严格的今天,将大语言模型(LLM)直接部署于公共云上已不再是一个“万能解”。尤其在金融、医疗、法律等行业,一次不经意的数据外泄可能带来不…

作者头像 李华
网站建设 2025/12/24 17:34:43

PetaLinux设备树定制入门必看:零基础快速理解

PetaLinux设备树定制实战指南:从零开始搞懂硬件与内核的“桥梁”你有没有遇到过这种情况?明明外设已经焊好了,电源也正常,示波器上信号也有,但系统一启动——/dev/i2c-0没有、dmesg里找不到驱动、GPIO按了没反应……最…

作者头像 李华
网站建设 2026/1/9 12:00:08

springboot智能垃圾分类投放验收系统-vue

目录具体实现截图项目介绍论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持Python(flask,django)、…

作者头像 李华