APP下载

软件测试中嵌入式软件静态测试方法研究

2019-08-13万泽超朱转平黎剑爱

科学导报·学术 2019年10期
关键词:嵌入式软件

万泽超 朱转平 黎剑爱

摘 要:如今嵌入式系统在越来越多的场合被使用,嵌入式软件的质量是影响系统研发进度及结果的关键因素。鉴于此,嵌入式软件测试工作逐渐受到软件研发部门及质检部门的重视,对应用在这些领域的嵌入式软件进行专业的测试很有必要。本文基于对嵌入式软件静态测试相关问题进行分析和研究。

关键词:嵌入式软件;静态测试;C++Test;PC-Lint

一、嵌入式软件的特点及本身缺陷

首先,嵌入式软件具有实时性。例如很多移动智能设备系统中的嵌入式软件要求软件能够实现实时运行,在特定时间内需完成接收、处理、发送信息等一系列任务,对处理时间、处理任务的时序性、软件运行速度以及避免运行时内存遗漏都有严格要求。嵌入式软件要求高可靠性。嵌入式软件一般有别与通用软件适用环境,其工作环境常常伴随着强辐射、强磁场、真空、远距离操控等复杂问题。嵌入式软件具有专用性。嵌入式软件的开发一般是针对特定用途、特定场景,具有很强的专用性。嵌入式软件与硬件关系密切。嵌入式系统由软件和硬件组成,其中软件部分正是为硬件部分设计的。嵌入式软件的编写还涉及到嵌入式系统的外围设备,例如通信接口、输入/输出设备、外设接口等。由于C/C++语言本身风格自由易出错,程序员在编写过程中要格外注意防止安全漏洞的产生。通过静态测试工具辅助程序员排除缓冲区溢出、数组越界、指针引用错误、内存泄漏等安全隐患,消除代码缺陷的同时保障程序的安全。

二、静态测试工具及方法

由于嵌入式系统自身是由软硬件结合的特点,其软件的代码编写过程中会涉及到对硬件的操作。由于C语言本身可以对硬件操作,又具有易学、灵活、可移植、高效率等特点,C语言日渐成为嵌入式软件的主要编程语言。C++是C语言的增强版,也在一定程度上继承了C语言的缺陷,C/C++语言其本身都属于弱类型语言,允许变量类型隐式转换,导致开发效率高的同时可靠性较弱。而且C/C++编译器不进行强制类型检查,也不做任何边界检查,很容易存在代码安全隐患。大多数静态测试工具都支持静态测试规则检查。对于嵌入式软件测试规则的制定,国内外已经有很多成熟的案例。嵌入式软件静态测试和通用软件静态测试的方法大致相同,区别之处在于针对其软件自身特点有针对性的去检测。常见的测试工具有很多,例如FortifySCA、Coverity、C++Test、PC-Lint、CppCheck等,以下將一一阐述:

2.1C++Test

C++Test是Parasoft公司的基于C/C++的测试工具,涵盖静态测试、单元测试、回归测试。C++Test静态测试部分包含了很多典型行业规范,有BugDetective、EffectiveC++、GJB5369、MISRAC2004、MISRAC++2008等。C++Test还提供RuleWizard用户自定义规则功能。C++Test的静态测试具有基于数据流和基于模式的两种分析技术。基于数据流的静态测试分析技术也被称为BugDetective。BugDetective模拟和识别代码中复杂路径,搜索并定义可疑点,进而暴露可能触发运行时缺陷的路径。特别是针对遗留代码库和嵌入式代码的运行时检测效果较差的情况,BugDetective可以无需测试用例和执行代码就发现除数为零、内存和资源泄露、空指针引用等运行时缺陷,而这些软件错误很多是基于模式的静态分析技术不易检测到的。C++test提供的可视化、易操作的静态测试完全可以胜任嵌入式软件的静态测试工作。

3.2FortifySCA(FortifySourceCodeAnalysis)

FortifySCA是Fortify360系列产品中的静态代码分析器,旨在检测源代码中存在的安全漏洞。FortifySCA有全面的安全编码规则,提供最新的安全编码规则包下载来应对新的安全漏洞,用户还可以自定义安全规则。具有数据流、语义、结构、控制流、配置流等分析引擎。支持C/C++、Java、JavaScript、.NET、PHP等20多种语言,支持Windows、Linux、Unix等操作平台和多种编译器,以及提供Eclipse、VisualStudio等IDE的插件。该工具分析源代码分为三个步骤:转换、扫描与分析、校验。转换:源代码关联一个BuildID,创建中间文件。扫描与分析:扫描中间文件,分析源代码,将检测结果写入FPR文件。校验:验证所有源文件依据正确的规则包被扫描。但是其本身是商业软件,价格昂贵。FortifySCA提供扫描方式:IDE插件扫描、命令行、AuditWorkbench(FortifySCA图形用户界面)扫描。例如想要扫描一个VisualStudio项目FreeBird,此时就可以用下列语句:sourceanalyzer-bFreeBirddevenvFreeBird.sln/REBUILDsourceanalyzer-bFreeBird-scan-fFreeBird.fprFreeBird是项目名,devenv表示visualstudio的可执行程序,/REBUILD是devenv命令参数。

2.3PC-Lint

PC-Lint是GIMPELSOFTWARE公司开发的C/C++软件代码静态分析工具,侧重于代码的逻辑分析。PC-Lint的历史可以追溯到1979年贝尔实验室开发的静态代码分析工具Lint。而Lint起初是UNIX系统工具,后来衍生了Linux系统发行版本Splint和Windows系统发行版本PC-Lint。PC-Lint支持大多数流行编译环境和编译器。PC-Lint采用命令行和开发环境插件集成两种方式。PC-Lint的基本命令行的形式为:c:\lint\lint-nt.exe-i"c:\lint"-ustd.lnt"d:\FreeBird\*.cpp"lint-nt.exe是PC-Lint在Windows下的可执行程序,-i"c:\lint"表示查找到配置文件*.lnt的路径,-ustd.lnt指明使用的那些配置文件,"d:\FreeBird\*.cpp"表示要测试的目标文件。每个编号对应信息可以通过PC-Lint安装包中msg.txt文档进行查阅。

2.4CppCheck

CppCheck是针对C/C++的检测非语法错误的开源静态检测工具。一般作为编译器或者其他静态检测工具的补充。支持命令行、插件版、独立版三种检测代码缺陷方式。其中独立版操作较其他工具简单。报告类别为:错误、警告、风格警告、可移植性警告、性能警告、信息消息。CppCheck的基本命令行的形式为:cppcheck--enable=all"d:\FreeBird\*.cpp"--enable=all表示全部启用以上6种报告类型,"d:\FreeBird\*.cpp"表示要测试的目标文件。

2.5Coverity

三、结束语

嵌入式系统是计算机技术、现代网络与通信技术、自动控制技术等高度融合的产物。嵌入式系统适应于对功能、可靠性、体积、功耗、成本等综合指标具有严格要求的專业计算机应用系统。目前,嵌入式系统已经在我们的生活和工作中得到广泛的应用。随着嵌入式处理器和硬件技术的快速度发展,开发实时嵌入式系统产品的复杂程度也在日益提高。在该类产品的开发过程中,一个重要环节是对嵌入式软件的严格测试;为此对嵌入式软件的测试方法进行研究具有十分重要的现实意义。

参考文献:

[1] 嵌入式计算机系统的发展与展望[J].于子萍.硅谷.2017(16)

[2] 嵌入式系统仿真研究[J].王晓华,顾逸东,陈蔚薇,张涛.微计算机信息.2018(16)

[3] 嵌入式软件可靠性仿真测试环境框架[J].王轶辰,刘斌,阮镰.计算机工程.2016(19)

(作者单位:珠海格力电器股份有限公司)

猜你喜欢

嵌入式软件
基于ARM7TDMI架构的嵌入式软件逆向工程分析方法
浅析嵌入式软件技术的现状与发展动向
基于微信的移动学习平台开发与设计
计算机软件设计中的嵌入式软件设计分析
嵌入式软件技术的现状与发展趋势研究
嵌入式软件全面测试过程模型
基于模型检查的嵌入式软件构件化分析与验证
嵌入式软件在计算机软件开发过程中的运用
试论计算机嵌入式软件构件提取与组装技术
计算机软件开发过程及嵌入式软件的应用