汽车软件的功能安全(一)

来源:公众号“Elektroauto”
2021-11-23
2654

软件开发一般始于软件计划。除了根据ISO 26262 Part2部分的对所有的软件活动进行计划,包含分配资源和计划开发时间,还需要根据Part6部分确定使用的方法和工具。另外,此阶段也要确定使用的建模和编程语言。需要计划的软件活动如下面的V模型所示。

4.png

ISO 26262不仅支持传统基于瀑布流的手动编写代码,同时也支持自动编码,并且可以将工作方式调整为更敏捷的方法。为了支持开发和避免常见的错误,它有一些建模和编码的指南。这些内容可以解决以下问题:

* Enforcement of low complexity-强制低复杂度:ISO 26262 没有定义什么是低复杂度,并且是由用户自己来设置足够低的适当级别。在SIO 26262的这一部分中,可能需要与其他的方法进行适当折中。通常我们可以使用测量圈复杂度(cyclomatic complexity)的方法。

注:圈复杂度是用来衡量模块复杂程度的概念。比如一个模块的控制流图有a条边,b个节点,那么它的圈复杂度就等于 v(G)=a-b+2

* Use of language subsets- 语言子集的使用:敲代码时,根据编程语言,有些语言结构可能会被模糊地理解或者说很容易导致错误。这种语言结构在敲代码时要尽量避免。比如:敲代码时要遵守 MISRA-C 中的规范。

* Enforcement of strong typing-强制强类型: 要么强制强类型是所使用的编程语言所固有的,要么就需要在编码指南中添加一些原则来支持这一点。强类型的优势是在设计和审查期间,软件的行为更容易理解,因为行为是必须明确的。当强类型在编程语言中是固有的,一个值有一个类型,可以用这个值做什么取决于这个值的类型。例如:不可能在文本字符串中添加数字。

* Use a defensive implementation techniques-防御性实现技术的使用:防御实现的目的是为了使代码更具有鲁棒性,即使在出现错误或者是不可预见的情况下也可以继续运行,比如通过捕获或者防止异常。

* Use of well-trusted design principles-使用值得信赖的设计原则:目的是重新使用已知的设计良好的原则。

* Use of unambiguous graphical representation-使用明确的图形表示:当使用图形表示时,例如数据流程图,不应该公开解释说明。

* Use of style guides-风格指南的使用:良好的编码风格可以使代码具有可维护性、组织性、易理解性和可读性。因此,当使用良好的风格指南时,错误的可能性会降低。比如:C代码风格指南: MISRA-C。

* Use of naming conventions-用命名约定:通过使用相同的命名约定,代码变得更容易阅读。比如:对函数的名称使用标题大小写。

* Concurrentcy- 并发性:目的是涵盖软件无序或者偏序执行时的各个方面。比如:在多核和多处理器上,以保证正确的结果。


当我们为软件分配了技术安全要求和并计划了软件开发,就到了该指定软件安全要求的时候了。这些源自技术安全概念和系统设计规范,还需要考虑软硬件接口。

在安全方面的内容上,软件安全要求规定了几种软件服务,包括:

* 正确和安全的执行预期功能;

* 监控系统保持安全状态;

* 将系统转换到系统功能减少或者没有功能的降级状态,并使系统保持在该状态;

* 硬件故障的故障检测和处理,包括设置诊断故障代码;

* 在故障被激活之前,进行自检以发现故障;

* 与生产、服务和退役相关的功能。比如:在退役期间标定和展开安全气囊。

收藏
点赞
2000