静态分析技术在装备软件验收中的应用

2021-11-05 08:03陈丽于霞余俊李晓利
电子技术与软件工程 2021年17期
关键词:静态编码装备

陈丽 于霞 余俊 李晓利

(1.电子信息系统复杂电磁环境效应国家重点实验室 河南省洛阳市 471003)

(2.中国兵器工业导航与控制技术研究所 北京市 100000)

“软件定义装备”,软件是信息化装备的灵魂。随着软件密集型装备比重日趋提高、更新换代周期不断缩短,确保软件质量、提升装备战备完好率成为当前首要任务。经过充分测试的装备软件能够消除软件潜在风险,降低装备故障率,提升用户使用信心。

静态分析技术是静态测试的一个分支,它不需要实际运行软件程序和编写测试用例,通过分析代码来发现程序中潜在的错误。本文在分析静态分析技术内涵及优势的基础上,从装备软件测试角度设计了静态分析规则集,并依托测试工具LDRA Testbed,以某雷达软件为例,阐述静态分析技术在装备软件验收中的应用。

1 静态分析技术

静态分析是一种对程序代码进行机械性、程式化的特性分析方法,一般包括控制流分析、数据流分析、接口分析、表达式分析、编码规范审核。虽然在编译代码时能发现一些程序错误,但其数量是非常有限的,不能完全替代静态分析。因此程序编译通过后,还应当对其进行静态分析测试。

经过编译和测试,每千行代码中平均有10-20 个缺陷[1]。按经验估算,静态分析一般能够发现30%~70%的逻辑设计和编码错误[2]。在实际使用中,静态分析测试比动态测试效率更高,能快速找到并定位缺陷。

1.1 控制流分析

控制流分析是使用控制流程图系统地检查被测程序的控制结构的工作[3]。控制流分析能够查找程序中是否调用不存在的子程序、是否存在不可达语句、是否存在死循环、是否存在转向并不存在的语句标号等问题。

1.2 数据流分析

数据流分析通过建立数据流程图来对程序中的数据进行分析。数据流分析能够查找程序中存在的异常情况,如引用了未定义的变量、使用了未初始化的变量等。这些异常情况常规的动态测试很难发现。

1.3 接口分析

接口分析是对程序的接口进行分析,发现接口设计方面错误的一种静态分析技术[4]。接口分析能够发现子程序之间、函数之间接口一致性问题,包括形式参数与实际参数的类型、数量、维数、顺序、使用一致性,以及是否遵循了预先定义的规则或原则。

1.4 表达式分析

表达式分析是通过检查程序代码中的表达式,发现其中潜在的错误,如:数组引用错误、除数变量可能为零的情况、浮点数变量比较时产生错误、括号使用不正确等。

1.5 编码规范审核

编码规范审核是指依据相关标准对编程语言的规范性进行审核。遵循统一的编程规范,从形式上对编程进行约束,可保证不同开发人员开发的程序能较好地集成在一起,便于二次开发人员快速理解程序,也方便测试人员对程序的理解和测试。

2 装备软件静态分析规则集

规则集是针对编程语言预先设计好的一组编码规则,包括编码规范和度量指标要求。装备软件作为特殊用途的软件,除了实现必须的功能性能要求外,对安全性、可靠性和可维护性尤其关注[5]。

目前主流的测试工具都支持用户定制静态分析规则集,如C++Test、Klocwork和LDRA Testbed等,每种测试工具都有其强项[6]。本文以C++编程语言为例,依托LDRA Testbed 测试工具,针对装备软件特性要求,制定装备软件静态分析规则集,如表1所示。

表1:装备软件静态分析规则集

该规则集主要从提高软件安全性、可靠性和可维护性方面考虑。在装备软件验收测试时,看似功能实现都没问题,但有些潜在风险通过短时间测试无法发现,需要利用一些规则集从源代码层面上进行深入分析。如:程序中存在不可达语句,若该语句是某项功能的实现,则在验收测试中能容易发现;但如果该语句只在某种特殊情况下才会执行,常规验收测试就很难发现。此外,一些可维护性方面的要求,如注释率、圈复杂度、表达式要求等编程风格方面的规范,在验收测试时也很少考虑。

使用工具进行静态分析设置的规则越多,发现的问题就越多,误报和漏报的机率就越大,人工复核的工作量就越大。所以在实际测试中,需和被测方充分沟通,根据被测件特性确定所需规则集。

3 实例应用

以某雷达软件为例,借助LDRA Testbed 8.5.0 对软件进行静态分析。

3.1 选择分析文件

Testbed 可以进行单文件分析和多文件分析(set),为了从整体上给被测件一个质量评估,选择set 方式。

set 属性设置时有两种模式:Group(default)和System。前者把set 中多个文件孤立的分析,后者把多个文件作为一个工程来分析。本文采用System 模式,能够分析文件间的代码关联关系。

3.2 分析前配置

分析前配置主要包括被测件头文件的设置和编码规则集的设置。设置头文件时,建议选择“Analysis the first instance of each found include”,表示当头文件被包含多次时,只分析第一个被包含的实例。进行编码规则集设置时,可使用默认选项,或者用户自定义规则,如图1所示,在“Customer Sample”列表下选择被测件关注的规则。

图1:编码规则集设置

3.3 分项选择与分析过程

点击菜单Analysis →Select Analysis,选择要执行的分析项开始分析。通常选择对话框中的前六项,可根据实际需求修改。

3.4 分析结果查看

点击Testbed 的菜单System Results,在下拉项Text results,Graphical results 分别以文本形式和图形化形式显示分析结果。Testbed 生成的报告是英文版,如果要生成中文报告,需使用TBAudit2009 插件。

利用Testbed 进行静态分析,除了给出源代码遵守编码规则情况外,还根据软件度量模型对代码质量进行评价。

3.5 人工复核

人工复核是根据测试报告指出的问题逐一进行核查。根据中文报告进行核查时,可能遇到找不到这个问题的情况,这时需参考英文报告来定位问题。当中文报告与英文报告个别问题存在出入时,以英文报告为主。

4 结束语

静态测试理论上可在代码编写完成后的任意时段开展,但测试需要成本,尤其对静态测试结果进行人工复核时所需人力较多。为了充分发挥静态分析的作用,建议在编码完成后,做单元测试时优先考虑开展静态测试,这样可以把很多问题消除在编码阶段。

对装备软件进行静态分析,应根据装备软件特性制定合适的静态分析规则集,使用工具能够提高静态测试的效率,但测试结果不能直接采纳,需要人工进行复核,确保测试结果准确、可靠。在软件验收阶段开展静态测试使装备软件验收工作更加有的放矢。

猜你喜欢
静态编码装备
好装备这样造
港警新装备
最新进展!中老铁路开始静态验收
基于SAR-SIFT和快速稀疏编码的合成孔径雷达图像配准
《全元诗》未编码疑难字考辨十五则
防晒装备折起来
子带编码在图像压缩编码中的应用
猜猜他是谁
Genome and healthcare
具7μA静态电流的2A、70V SEPIC/升压型DC/DC转换器