版权声明:本文为博主原创文章,未经博主允许不得转载。[https://editor.csdn.net/md?articleId=103352448](https://editor.csdn.net/md?articleId=103352448)
另外,部分摘抄自:博主:huior,链接地址:http://www.51testing.com/html/51/10851-73049.html;部分摘抄自:嵌入式软件动态运行时错误的检测,链接地址:https://wenku.baidu.com/view/2e151ef10242a8956bece444.html
0前言
PolySpace测试技术始于1996年,当时欧洲亚丽安娜501火箭由于飞行计算机软件运行错误而导致主/辅计算机全部停机并在飞行升空后爆炸,为此,法国国家计算机与控制研究所、欧洲航天局组织专门的力量研制以抽象解释技术(Abstract Interpretation techniques)为理论基础的新一代软件验证/测试工具—PolySpace,并在亚丽安娜502上得到成功的应用。1999年由法国国家计算机与控制研究所、欧洲航天局共同成立PolySpace Technology公司,将PolySpace产品正式商业化,并且在国内外军用项目上得到广泛应用。PolySpace是世界上首家自动检测嵌入式软件运行错误的工业化工具,是新一代的软件测试工具。
2007年4月25日,PolySpace正式宣布被Mathworks收购,成为MathWorks产品家族的一员, 其作用原理:简单来说,Polyspace是基于抽象解释原理的代码级静态分析和验证工具。Polyspace由Bug Finder和Code Prover组成。Bug Finder使用语义分析的方法查找代码中的运行时错误、并发问题、安全漏洞和其他缺陷。Polyspace Code Prover使用抽象解释法证明源代码中不存在溢出、被零除、数组访问越界等运行时错误。
图1
1解决的问题
PolySpace解决的是Run-time Errors(运行时错误),其实就是帮忙发现代码自身存在的错误。具体到C语言来说,检测的错误主要是:
图2
从技术上来讲,只要是C代码和C++代码,PolySpace都可以拿来用。但根据经验和PolySpace的特点,用在以下类型的代码上效果发挥最佳:嵌入式C代码、算法类型的,即运算多,典型的如TI DSP平台上的程序、Vxworks平台的控制类程序等;在通讯类、界面类的代码上效果则一般。
2入门操作
首先,申明一下,本文只是讲Polyspace Bug Finder的入门操作,Code Prover类似。并且,通过SIMULLINK建模自动生成代码,然后静态分析C代码。
2.1 建模
图3
2.2 生成代码参数配置
图4
图5
生成代码文件夹:
图6
(备注: 基于模型设计—自定义目标系统配置指南链接:https://pan.baidu.com/s/1ym_OkoRet_bMrQIO6uokYA 提取码:f4y6)
2.3 建立Polyspace工程代入C语言
File——>New Project(Ctrol+N)——>
图7
2.4 导入.h和.c文件,C语言规范以及配置分析参数
图8
2.5 根据错误提示查找Help,修改模型重新Polyspace静态分析
经Polyspace分析后的代码结果以不同颜色表:
绿色: 代表为安全代码,无需花过多精力审查;
红色: 代码问题代码,需要立刻解决;
灰色: 代表不可达代码,需要审查是设计错误还是有意为之;
橙色: 代表有风险代码,需要重点审查。
另外还可以设定编码规范(如MISRA)和自定义代码风格,违反之处以紫色显示;同时可以看到代码变量随控制流的数据范围变化情况,快速查找和定位问题原因。
3 Polyspace静态分析的局限性
PolySpace最大的局限性在于:分析速度慢。通常情况下,在配置比较高(CPU:3G Memory: >1G)的PC上,完整的分析1000行代码,平均需要15分钟。根据多年来和客户打交道的经验,客户普遍抱怨分析速度太慢。
4 Polyspace静态分析的建议
(1) 每个工具都有自身的优缺点。我们使用工具,和交朋友一样,要看的是其有什么优点,以及如何避开其不足,而不是紧盯其一个小缺点。
(2) PolySpace本身面向的就是高可靠性的市场,所以PolySpace对代码要求比较严格。在使用之前,如果代码不太规范,可能要对代码做一点修改,但都是通过配置的方式,不是直接去代码文件中修改。
(3) 建议程序员去使用PolySpace,因为它不仅可以帮助你发现错误,更重要的是,长期使用,会提高你的编程能力,让你明白什么样的写法是安全可靠的,什么样的写法是危险的,受益匪浅啊。
5 Polyspace在汽车行业应用
以汽车行业为例,已发生的多次召回事件经分析是因为软件缺陷尤其是运行时错误(run-time error)造成的。所谓的运行时错误,是指在通常的调试过程中需要程序运行起来之后才可能显现的错误,如指针越界、数据溢出等。换句话说,如果测试用例没有覆盖到特定的输入条件时,这些问题可能就没有机会被发现。
5.2 Windows平台下调试运行时错误发生的案例
除汽车行业以外,航空航天、铁路、医疗等所谓高完整性系统行业,嵌入式软件往往承载着系统大部分重要功能的实现,一旦发生问题会带来异常严重的后果。软件的静态分析作为动态功能测试的重要补充,在这些行业应用非常广泛。
Polyspace所采用的静态分析方法是抽象解释,是软件形式化验证方法(Formal Verification)的一种,它在处理复杂的计算问题或模型的过程中通过对问题进行近似抽象,取出其中的关键部分进行分析,从而减少问题的复杂程度。