静态分析和代码证明
<p>Fortify
synopsys coverity
Helix QAC是perforce的静态代码分析器,可以检测代码是否符合 MISRA C® and C++代码规范,和AUTOSAR编码规范(用于C++14),CERT C,C++编码规范(找出代码中安全脆弱的地方),分析代码 是否违反了CWE list of security weaknesses,是否符合 High Integrity C++ (HIC++)编码规范(保证了C++11,C++14的高质量代码), Joint Strike Fighter Air Vehicle (JSF AV) C++编码规范(用于航空航天和国防领域,也可用于其他工业嵌入式领域,用于关键安全的开发)</p>
<p>High Integrity C++ (HIC++)编码规范详细内容参考https://www.perforce.com/resources/qac/high-integrity-cpp-coding-standard
使用C++14进行编码需要使用autosar编码规范</p>
<h3>parasoft</h3>
<p><a href="https://www.parasoftchina.com/">https://www.parasoftchina.com/</a>
<a href="https://www.perforce.com/products/klocwork">https://www.perforce.com/products/klocwork</a></p>
<h2>形式化验证和Ployspace</h2>
<p>Polyspace® 静态代码分析产品采用形式化方法证明在所有可能的控制流和数据流下都没有关键运行错误。包括编码规范、安全漏洞、代码指标和数百条其他软件缺陷的检查。</p>
<p>系统工况、算法复杂为软件编程带来了挑战,测试验证的有限性无法验证各种情况保障软件安全可靠。</p>
<h2>解决方法</h2>
<p>制定编码规范解决C、C++语言复杂性带来的问题,通过开发流程解决经验依赖,动态和静态分析相结合解决测试局限,人工走查与调试和静态分析解决定位和解决问题困难,基于数学方法形式化验证(polyspace,抽象解释)满足安全高完整性要求</p>
<p>静态分析工具需要解决问题或指标</p>
<ul>
<li>不需要编译运行</li>
<li>不需要打桩不依赖物理设备</li>
<li>可对最小单元进行分析</li>
<li>轻松应对问题溯源</li>
<li>分析结果管理</li>
<li>适应软件版本更替</li>
</ul>
<p>分析分类
false negative漏报, false positive误报, scalability, selectivity(与代码质量有关),usability</p>
<h3>查找软件缺陷度量软件质量</h3>
<p>编码阶段-》单元测试-》集成测试->系统测试.</p>
<h4>功能安全和网络安全</h4>
<p>我们通常将安全可以分成3类,即功能安全、物理安全和信息安全。</p>
<ul>
<li>
<p>功能安全
功能安全是为了达到设备和工厂安全功能,受保护的、和控制设备的安全相关部分必须正确执行其功能,而且当失效或故障发生时,设备或系统必须仍能保持安全条件或进入到安全状态。</p>
</li>
<li>
<p>物理安全
物理安全是减少由于电击、着火、辐射、机械危险、化学危险等因素造成的危害。</p>
</li>
<li>信息安全
在IEC62443中针对工业控制系统对信息安全的定义是:“保护系统所采取的措施;由建立和维护保护系统的措施所得到的系统状态;能够免于对系统资源的非授权访问和非授权或意外的变更、破坏或者损失;基于计算机系统的能力,能够保证非授权人员和系统既无法修改软件及其数据也无法访问系统功能,却保证授权人员和系统不被阻止;防止对工业控制系统的非法或有害入侵,或者干扰其正确和计划的操作。”可见三种安全在定义和内涵上有很大的差别。</li>
</ul>
<p>CWE常见缺陷列表-面向网络安全(MIT维护),<a href="https://cwe.mitre.org/index.html">https://cwe.mitre.org/index.html</a>
MISRA C/C++ -面向功能安全,<a href="https://www.perforce.com/resources/qac/misra-c-cpp">https://www.perforce.com/resources/qac/misra-c-cpp</a>, <a href="https://ldra.com/misra/">https://ldra.com/misra/</a>
CERT C/C++ -面向网络安全,<a href="https://ww2.mathworks.cn/discovery/cert-c.html">https://ww2.mathworks.cn/discovery/cert-c.html</a>
<a href="https://www.sei.cmu.edu/education-outreach/courses/course.cfm?courseCode=V35">https://www.sei.cmu.edu/education-outreach/courses/course.cfm?courseCode=V35</a></p>
<p><a href="https://www.sei.cmu.edu/education-outreach/courses/course.cfm?courseCode=V35">https://www.sei.cmu.edu/education-outreach/courses/course.cfm?courseCode=V35</a></p>
<p>JSF AV++ -功能安全 <a href="https://www.perforce.com/blog/qac/jsf-coding-standard-cpp#:~:text=Joint%20Strike%20Fighter%20Air%20Vehicle%20C%2B%2B%20%28JSF%20AV,coding%20standard%20covers%20safety-critical%20coding%20rules%20for%20C%2B%2B">https://www.perforce.com/blog/qac/jsf-coding-standard-cpp#:~:text=Joint%20Strike%20Fighter%20Air%20Vehicle%20C%2B%2B%20%28JSF%20AV,coding%20standard%20covers%20safety-critical%20coding%20rules%20for%20C%2B%2B</a>.</p>
<p>iSO、ice TS17961, ISO - ISO/IEC TS 17961:2013</p>
<p>Specify Standard and Predefined Checker Subsets
Specify the coding rules through Polyspace analysis options. When you run Bug Finder or Code Prover, the analysis looks for coding rule violations in addition to other checks. You can disable the other checks and look for coding rule violations only.</p>
<p>In the Polyspace user interface (desktop products), the options are on the Configuration pane under the Coding Standards & Code Metrics node.</p>
<p>For C code, use one of these options:</p>
<p>Check MISRA C:2004 (-misra2)</p>
<p>For generated code, enable the option specific to generated code.</p>
<p>Check MISRA C:2012 (-misra3)</p>
<p>For generated code, enable the option specific to generated code.</p>
<p>Check SEI CERT-C (-cert-c)</p>
<p>Check ISO/IEC TS 17961 (-iso-17961)</p>
<p>For C++ code, use one of these options:</p>
<p>Check MISRA C++ rules (-misra-cpp)</p>
<p>Check JSF++ rules (-jsf-coding-rules)</p>
<p>Check AUTOSAR C++ 14 (-autosar-cpp14)</p>
<p>Check SEI CERT-C++ (-cert-cpp)</p>
<p><strong>功能安全标准</strong>
符合编码规范和认证要求
执行 MISRA C、MISRA C++、AUTOSAR C++14、JSF++ 和自定义规则。符合 ISO 26262、DO-178、IEC 61508、EN 50128、IEC 62304 和其他标准。
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/e18466f84afc93e235074f91629102cc?showdoc=.jpg" alt="" />
KOSTAL(科世达)亚洲研发中心获得 ISO 26262 ASIL D 级认证https://ww2.mathworks.cn/company/user_stories/kostal-asia-r-d-center-receives-iso-26262-asil-d-certification-for-automotive-software-developed-with-model-based-design.html
Alenia Aermacchi 开发符合 DO-178B A 级认证的自动驾驶仪软件</p>
<h3>软件质量度量指标</h3>
<p>项目:文件数量,递归调用次数,共享变量,栈开销</p>
<p>HIS代码质量指标</p>
<p>SQO:改善软件开发过程,降低成本,减少时间及提升质量</p>
<p>Polyspace使用模式:eclipse插件,server,webui
开发人员checkin-》jenkins-》polyspace server-》result server 《- web browser</p>
<h2>消除缺陷证明无运行时错误</h2>
<p>破解嵌入式软件质量难题
mathworks polyspace bug finder和code prover
<strong>抽象解释法</strong></p>
<h3>bug finder</h3>
<p>Polyspace Bug Finder™ 可以识别嵌入式软件 C 和 C++ 代码中的运行时错误、并发问题、安全漏洞和其他缺陷。使用静态分析(包括语义分析),Polyspace Bug Finder 可分析软件控制流、数据流和进程间行为。通过在检测到缺陷之后立即高亮显示缺陷,可让您在开发过程的早期阶段鉴别和修复错误。</p>
<p>Polyspace Bug Finder 可检查是否符合编码规范,如 MISRA C®、MISRA C++、JSF++、CERT® C、CERT® C++ 和自定义命名规范。它可以生成报告,其中包括发现的错误、代码违规和代码质量指标,如圈复杂度。Polyspace Bug Finder 可与 Eclipse™ IDE 配合使用,在您的桌面上分析代码。</p>
<p>对于自动生成的代码,可以将 Polyspace 结果追溯到 Simulink® 模型和 dSPACE® TargetLink® 模块。</p>
<p>通过 IEC Certification Kit(符合 ISO 26262 和 IEC 61508)和 DO Qualification Kit(符合 DO-178),可提供对行业标准的支持。</p>
<p>ISO 26262
ISO 26262是乘用车的国际功能安全标准[1]。它明确了与安全相关的电子/电气(E/E)系统在出现故障时可能导致的危险。ISO 26262按照风险类别将汽车安全完整级别(ASIL)分为四级:从A至D,ASIL D为最高完整级。该标准有九个标准章节,而第十章为指南。每个章节均以独立文件呈现。ISO 26262在本质上是目标导向而非规范,但ISO 26262中包含有数百页指南内容。第4、6和8章节分别介绍系统[ISO 26262-4]、软件[ISO 26262-6]和工认证具[ISO 26262-8]。</p>
<p>ISO 26262第一版于2011年发布。第二版预计于2018年发布(ISO 26262:2018)。第二版将涉及其他类型车辆标准,例如摩托车、卡车和公交车。此外,第二版还包含有关于半导体(器件)的全新指南。</p>
<h3>软件缺陷度量</h3>
<p><a href="https://www.cnblogs.com/yingyingja/p/9803542.html">https://www.cnblogs.com/yingyingja/p/9803542.html</a></p>
<h3>功能安全工程师</h3>
<p><a href="https://www.zhihu.com/question/364448575">https://www.zhihu.com/question/364448575</a></p>
<h3>ASIL汽车安全完整性等级</h3>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/4cd33f23af625c166c869c5f71179e29?showdoc=.jpg" alt="" />
对电子控制器ECU来说,引起失效主要是两个方面:软件和硬件。</p>
<p>(1)软件失效:比如没有考虑分母可能为0、变量公式定义错误、导致精度丢失。</p>
<p>(2)硬件失效:如下图所示可以分为传感器失效、ECU硬件失效(比如CPU或者RAM/ROM失效)、执行器失效。</p>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/fb1570bf459238553225091f401dfe13?showdoc=.jpg" alt="" />
依据ISO26262标准进行功能安全设计时,首先识别系统的功能,并分析其所有可能的功能故障(Malfunction)或失效,可采用的分析方法有HAZOP、FMEA、头脑风暴等。</p>
<p>功能故障在特定的驾驶场景下才会造成伤亡事件,比如近光灯系统,其中一个功能故障就是灯非预期熄灭,如果在漆黑的夜晚行驶在山路上,驾驶员看不清道路状况,可能会掉入悬崖,造成车毁人亡;如果此功能故障发生在白天就不会产生任何的影响。</p>
<p>所以进行功能故障分析后,要进行情景分析,识别与此故障相关的驾驶情景,比如:高速公路超车、车库停车等。分析驾驶情景建议从公路类型(国道,高速),路面情况,(湿滑、冰雪);车辆状态(转向、</p>
<p>超车、制动、加速等),环境条件(风雪雨尘、夜晚、隧道灯),人员情况(乘客、路人)等几个方面去考虑。功能故障和驾驶场景的组合叫做危害事件(hazard event)。</p>
<p>危害事件确定后,根据三个因子——严重度(Severity)、暴露率(Exposure)和可控性(Controllability)评估危害事件的风险级别,也就是ASIL等级。</p>
<h4>ASIL等级</h4>
<p>ASIL等级的定义是为了对失效后带来的风险进行评估和量化以达到安全目标,其全称是Automotive Safety Integration Level--汽车安全完整性等级。这个概念来源于IEC61508,其通过失效概率的方式定义了安全完整性等级(SIL)。但是在汽车界只有硬件随机失效可以通过统计数字评估失效概率,软件失效却难以量化,因此26262根据汽车的特点定义了ASIL。</p>
<p>如上节所述ASIL的评定,一般是在产品概念设计阶段对系统进行危害分析和风险评估,识别出系统的危害,如果系统的安全风险越大,对应的安全要求级别就越高,其具有的ASIL的等级也越高。ASIL分为QM,A、B、C、D五个等级,ASIL D是最高的汽车安全完整性等级,对功能安全的要求最高。</p>
<h4>危险分析和风险评定</h4>
<p>对于汽车系统,特定危险的风险决定于以下三个因素:</p>
<p>(1)危险事件所导致伤害或损失的潜在严重性 (Severity of failure, S)</p>
<p>(2)指人员暴露在系统失效能够造成危害的场景中的概率OR理解为危险事件可能发生的驾驶工况的可能性 (probability of exposure, 简称E)</p>
<p>(3)危险所涉及的驾驶员和其它交通人员通过及时的反应避免特定伤害或损失的能力 (controllability, 简称C)
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/39439da21d808237e5b890df5ae0ed9e?showdoc=.jpg" alt="" />
然后分别将严重性S、可能性E和可控性C分成4个等级,如下表所示,其中QM代表与安全无关:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/45397271ddf9094e7f5eef9895d59438?showdoc=.jpg" alt="" /></p>
<p>按照以上的划分并进行组合相加得到5个ASIL等级(QM,A,B,C,D),原则是:</p>
<p>A. 基本可控C0的组合不考虑;</p>
<p>B. 无伤害S0的组合不考虑;</p>
<p>C. 其余组合相加等于7分为ASIL A,等于8分为ASIL B,等于9分为ASIL C,等于10分为最高等级ASIL D;ASIL A、B、C、D都是与功能安全相关的</p>
<p>D. 其余的得分安全评定为QM,代表与安全无关的功能
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/c0d202c43576edad45e238fada6cbe16?showdoc=.jpg" alt="" /></p>
<h4>功能安全目标的分解</h4>
<p>通过上危害分析和风险评估,我们得出系统或功能的安全目标和相应的ASIL等级,当ASIL等级确定之后,就需要对每个评定的风险确定安全目标,安全目标是最高级别的安全需求。安全目标确定以后就需要在系统设计,硬件,软件等方面进行设计和实施,验证。</p>
<p>从安全目标可以推导出开发阶段的安全需求,安全需求继承安全目标的ASIL等级。如果一个安全需求分解为两个冗余的安全需求,那么原来的安全需求的ASIL等级可以分解到两个冗余的安全需求上。因为只有当两个安全需求同时不满足时,才导致系统的失效,所以冗余安全需求的ASIL等级可以比原始的安全需求的ASIL等级低。ISO 26262标准的第9章给出了ASIL分解的原则。ISO 26262中提出了在满足安全目标的前提下降低ASIL等级的方法——ASIL分解,这样可以解决上述开发中的难点。</p>
<p>ASIL分解的一个最重要的要求就是独立性,如果不能满足独立性要求的话,冗余单元要按照原来的ASIL等级开发。所谓的独立性就是冗余单元之间不应发生从属失效(Dependent
Failure),从属失效分为共因失效(Common Cause Failure)和级联失效(Cascading Failure) 两种。共因失效是指两个单元因为共同的原因失效,比如软件复制冗余,冗余单元会因为同一个软件bug导致两者都失效。级联失效是指一个单元失效导致另一个单元的失效,比如一个软件组件的功能出现故障,写入另一个软件组件RAM中,导致另一个软件组件的功能失效。</p>
<p>具体降解的方法如下所示,对一个 ASIL D 的要求进行分解:</p>
<p>1) 一个ASIL C(D)的要求和一个ASIL A(D)的要求;或</p>
<p>2) 一个ASIL B(D)的要求和一个ASIL B(D)的要求;或</p>
<p>3) 一个ASIL D(D)的要求和一个QM(D)的要求</p>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/df57ecf2bec60cc63a390933f7a6191f?showdoc=.jpg" alt="" />
其它ASIL等级分解可如下图所示:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/61324ff8f33d830f783e991f17cbe0b9?showdoc=.jpg" alt="" />
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/119f344b896f76f666e4e5991ef111eb?showdoc=.jpg" alt="" />
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/b57764cff4eaf2e0d00bec1126f3761f?showdoc=.jpg" alt="" /></p>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/fea033aef39f364362dffbfaa6cbad1b?showdoc=.jpg" alt="" /></p>
<h3>汽车行业功能安全标准化的软件架构</h3>
<p><a href="https://baike.baidu.com/item/%E6%B1%BD%E8%BD%A6%E5%BC%80%E6%94%BE%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/17038680?fromtitle=AUTOSAR&fromid=8457754">https://baike.baidu.com/item/%E6%B1%BD%E8%BD%A6%E5%BC%80%E6%94%BE%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/17038680?fromtitle=AUTOSAR&fromid=8457754</a>
<a href="https://www.jianshu.com/p/cfffc1692ea2">https://www.jianshu.com/p/cfffc1692ea2</a>
汽车开放系统架构(AUTomotive Open System Architecture)是一家致力于制定汽车电子软件标准的联盟,AUTOSAR是由全球汽车制造商、部件供应商及其他电子、半导体和软件系统公司联合建立,各成员保持开发合作伙伴关系。自2003年起,各伙伴公司携手合作,致力于为汽车工业开发一个开放的、标准化的软件架构。AUTOSAR这个架构有利于车辆电子系统软件的交换与更新,并为高效管理愈来愈复杂的车辆电子、软件系统提供了一个基础。此外,AUTOSAR在确保产品及服务质量的同时,提高了成本效率。在autosar的架构下再通过iso26262规定的标准去做ecu的开发是近几年日本这边一直在做的事情。
<a href="https://blog.csdn.net/qq_26915769/article/details/88247678">https://blog.csdn.net/qq_26915769/article/details/88247678</a>
<a href="https://zhuanlan.zhihu.com/p/161300046">https://zhuanlan.zhihu.com/p/161300046</a>
<a href="http://news.eeworld.com.cn/qrs/2014/1120/article_19485_2.html">http://news.eeworld.com.cn/qrs/2014/1120/article_19485_2.html</a>
<a href="https://blog.csdn.net/u012692537/article/details/86186062">https://blog.csdn.net/u012692537/article/details/86186062</a>
<a href="https://i.youku.com/i/UMjg1MDgzMjk3Ng==?spm=a2hzp.8244740.0.0">https://i.youku.com/i/UMjg1MDgzMjk3Ng==?spm=a2hzp.8244740.0.0</a>
<a href="https://blog.csdn.net/lnyaigsm0110/article/details/80814431">https://blog.csdn.net/lnyaigsm0110/article/details/80814431</a></p>
<h3>开源静态代码分析工具</h3>
<p><a href="https://github.com/danmar/cppcheck.git">https://github.com/danmar/cppcheck.git</a>
<a href="https://github.com/Tencent/TscanCode.git">https://github.com/Tencent/TscanCode.git</a></p>