如何使用工具满足ISO26262软件验证要求(一)

高可信测试工具 2023-12-06 10:29:00
加精

根据市场监管总局关于2021年全国汽车和消费品召回情况的通告内容,我们可以得知:2021年,我国共实施汽车召回232次,涉及车辆873.6万辆,分别比上年增长16.6%和28.8%。

 

 

 图1 全国汽车和消费品召回情况

软件缺陷引起汽车召回事件逐年增多,其中多个软件缺陷导致了撞车事故甚至人员伤亡,如通用汽车因动力转向问题召回超过100万辆皮卡和SUV和菲亚特克莱斯勒因巡航控制缺陷召回530万辆汽车等实例都是因为软件缺陷影响了汽车的安全。

软件在汽车中不断扮演更重要的角色,预计2030年每量汽车将运行约3亿行代码,超过90%的汽车创新将来源于软件。因此,软件的质量尤为重要。

图2 软件体量逐年递增

软件测试手段有代码审查、静态分析、单元测试、集成测试、验收测试等,从图3我们不难看出随着缺陷发现阶段的后移,修复缺陷的代价是指数级增长的,因此静态分析测试阶段尤为重要。

 

图3 缺陷发现阶段与修复代价关系图

 图4 软件研制各阶段缺陷产生和修复情况

 

如图4所示,软件研制过程中,绝大多数的缺陷由软件编码阶段产生,并且超过一半的缺陷会被遗漏到测试阶段。

 

第 2 章 ISO 26262对软件研发的要求

 图5 ISO 26262中对软件产品研制的标准要求

ISO 26262标准在Part 6:Product development at the software level中对软件研制的需求、设计、开发各个环节进行了测试、验证的约束。

图6 软件研发各环节的测试验证约束示意图

2.1 6-5 软件产品研制一般主题

  • 6-5.3 Inputs to this clause

  • 6-5.4 Requirements and recommendations

 6-5 Table 1 - Topics to be covered by modelling and coding guidelines

建模和编码规范应该包含:

1a. 降低复杂度

1b. 使用语言子集

具体包含:

  • 排除定义不明确的用法

如:C++标准明确规定的废弃的用法

  • 排除使用经验上容易出现错误的用法

如:局部变量与全局变量同名

  • 排除可能导致运行时错误的用法

如:静态全局变量的构造函数可以抛出异常

1c. 使用强类型

C/C++语言提供的类型系统为编程提供了很多便利,但其类型系统(如:类型提升、类型转换等机制)以及不同平台字长不同的特性可能导致隐藏的程序问题。

例如:

在lp64类型的机器上,a会隐式转换为unsinged int类型,导致函数返回true,与-1<1的直观理解不符:

bool fun() {

   long a = -1;

   unsigned b = 1;

   return a > b;

}

1d. 使用防御性的实现

添加具有防御性代码,预防问题发生,如:

  • 在除法运算前验证除数是否为0
  • 在函数调用前检查参数与预期相符
  • 在switch语句中添加default来检测错误

1e. 使用 well-trusted 设计原则

1f. 使用明确的图形表示(建模)

1g. 使用编码样式指南

1h. 使用命名规范

1i. 并发

2.2 6-7 软件架构设计

  • 6-7 Table 3 - Principles for software architectural design

软件架构设计的原则:

1a. 恰当的组件层次层次结构

1b. 限制软件组件的大小和复杂度

1c. 限制接口的数量

1d. 组件内部高内聚

1e. 组件间松耦合

1f. 合适的调度属性

1g. 限制中断的使用

1h. 软件组件间合理的空间隔离

1i. 共享资源的恰当管理

2.3 6-8 软件单元的设计和实现

  • 6-8 Table 6 - Design principles for software unit design and implementation

软件单元的设计和实现准则:

1a. 子程序和函数只有单一的入口和退出点

1b. 不应使用未在创建时在线检测合法性的动态对象

1c. 初始化全部变量

1d. 避免使用全局变量,除非可以证明使用的合理性

全局变量会带来以下问题:

全局变量的使用会破坏信息隐藏原则,违背ISO2626-6 Table6 1h中要求的“没有隐藏的数据流和控制流”。

全局变量会导致模块之间的强耦合。违背ISO2626-6 Table3 1e要求的“组件之间要降低耦合”。

C++中全局变量的初始化等操作可能导致程序出现未处理的异常。

但是,C/C++完全禁止使用全局变量几乎是不可能的,因此在使用全局变量时就要着重考虑:能否已经尽可能避免使用全局变量、能否已经尽可能限制全局变量可见性、全局变量构造函数是否安全。

例如:

AUTOSAR CPP114编程指导中有一条规则“Rule A3-3-2 Static and thread-local objects shall be constant-initialized”,就要求全局变量、静态成员变量等必须是常量初始化的,以避免全局变量提升组件之间的耦合度。

1f. 限制使用指针

1g. 禁止使用隐式类型转换

1h. 不应出现隐藏的数据流和控制流

1i. 禁止使用无条件跳转

1j. 禁止使用递归

MISRA(The Motor Industry Software Reliability Association 汽车工业软件可靠性联会)是位于英国的一个跨国汽车工业协会,其出版的MISRA C:2012编程规范正广泛应用于以C语言编写的汽车软件的功能安全认证。

2.4 6-9 软件单元验证

  • 6-9 Table 7 - Methods for software unit verification

2.5 6-10 软件集成和验证

  • 6-10 Table 10 – Methods for verification of software integration

2.6 8-11 对试用软件工具的信心

  • 8-11.4 Requirements and recommendations

对于ASIL D级的软件强烈建议按照11.4.9章节要求的使用验证工具,具体要求为:

  1. 应提供证据证明使用的软件工具符合用途要求,如:
    • 提供工具满足要求的证据
    • 使用测试验证套件
  2. 应分析验证期间出现的软件工具故障和相应的错误输出
  3. 应检查软件工具对于异常操作的处理

欢迎访问产品网站:北京轩宇信息技术有限公司--高可信工具软件

...全文
315 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

25

社区成员

发帖
与我相关
我的任务
社区描述
静态缺陷检测、单元/集成测试、虚拟仿真测试、软件安全、.......好用的工具让测试也可以如此简单~~
集成测试 企业社区
社区管理员
  • 轩宇老哥
  • 高可信测试工具
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧