屠杀批评

2021-03-14 05:04:26

跳转到导航跳转以搜索Misra C是由Misra(电机行业软件可靠性协会)开发的C编程语言的一套软件开发指南。其目标是促进嵌入式系统背景下的代码安全,安全性,可移植性和可靠性,特别是在ISO C / C90 / C99中编程的这些系统。 [1]

本文未涵盖的Misra C ++也有一系列指南。

对于误报(1998年和2004年)的前两版,所有指导方针都被视为规则。随着MISRA C:2012的出版,介绍了新的指南 - 该指令,其遵从性更加开放,以解释或与过程或程序事项有关。

虽然最初专门针对汽车行业,但Misra C已被发展为领先的开发商,包括汽车,航空航天,电信,医疗设备,国防,铁路等领先的开发商广泛接受的典范。(例如:

ISO 26262功能安全 - 道路车辆引用MISRA C作为C语言的合适子集:ISO 26262-6:2011第6部分:软件级别的产品开发[5] CITES MISRA-C:2004和MISRA AC AGC 。

Autosar General Software规范(SRS_BSW_00007)同样引用MISRA C:AutoSAR 4.2常规软件规范[7]要求如果BSW模块实现以C语言编写,则应符合MISRA C:2004标准。

Autosar 4.3常规软件规范[8]要求如果BSW模块实现以C语言编写,则应符合MISRA C:2012标准。

启动新软件项目时,应使用最新的Misra标准。以前的标准仍然可以使用需要引用它的遗留软件项目。 [9]

每个指导线都被分类[10]作为强制性(MISRA C:2012的新建),所需或咨询。此外,MISRA合规性文件允许咨询指南不容申请。

例如,避免可能的编译器差异,例如,C整数的大小可以变化,但INT16总是16位。 (C99标准化在INT16_T。)

例如,避免使用易于失败的功能和构造,Malloc可能会失败。

为了使一款要求符合MISRA C指南的软件,应达到所有强制性规则,并达到所有必要的规则和指令,既应达到或受正式偏差。如果没有正式偏差,可能会禁用咨询规则,但仍应记录项目文件中。

许多MISRA C规则可以被描述为指导原则,因为在某些情况下,软件工程师可能偏离规则,并且仍然认为符合标准。必须在代码或文件中记录偏差。此外;必须提供证明,软件工程师已经考虑了系统的安全性,并且偏离规则不会产生负面影响,偏差的要求也包括:

Misra C,&#34的第一版;在1998年出版的基于车辆的软件中使用C语言的指导方针,并被正式称为MISRA-C:1998。 [14]

MISRA-C:1998有127条规则,其中需要93个,34个是咨询;规则按1到127序列编号。

2004年,第二版"在关键系统中使用C语言的准则"或MISRA-C:2004,对指南有许多大量变化,包括完整的重新编制规则。

MISRA-C:2004包含142条规则,其中122个是"必需和#34; 20是"咨询&#34 ;;它们分为21个题单类别,来自"环境" "运行时失败"

2013年,第三版Misra C:2012年发布。 MISRA C:2012向C99版本的C语言(同时保持C90的指南)扩展了支持,除了包括可以降低合规性成本和复杂性的多种改进,同时允许一致,安全使用C.批判性系统。 [15]

MISRA-C:2012包含143条规则和16"指令" (即,其合规性更为开放解释的规则,或涉及过程或程序事项);每个每个都被归类为强制性,必需或咨询。它们分别被分类为单个翻译单元或系统。此外,规则归类为可判定或未可判定。

2016年4月,Misra出版(作为免费下载)Misra C:2012 - 修订1:额外的安全指南[16],其中增加了十四个新的安全准则。

2020年2月,Misra出版(作为免费下载)Misra C:2012 - 修订2:ISO / IEC 9899:2011/18的更新,它为C11中的未定义,未指定和实施的映射添加了映射/ C18。

MISRA C:2012 - 附录1:规则映射,[18]包含MISRA C:2004和新版本之间的双向规则映射。它旨在帮助用户迁移。

Misra C:2012 - 附录2:MISRA C:2012对ISO / IEC TS 17961:2013" C Secure" [19]

Misra Gitlab [21]存储库中提供了一个示例套件(用于MISRA-C:2004和MISRA C:2012)。这允许工具用户评估和比较各种屠宰工具提供的检查支持;此外,它为MISRA指南的意图提供了一些指导。

虽然存在许多软件工具,其声称&#34的代码检查代码; Misra一致性"没有Misra认证过程。 [22]

可以使用执行静态代码分析的工具检查大多数指南。其余的指南要求使用动态代码分析。

Rogue Wave软件的Klocwork(现在由Perforce软件[24]拥有)。 MISRA C:2012,C:2012修正案1,C ++:2008。 [25]

在与Misra C:1998对Misra C:2004的纸张比较的论文中,Les Hatton得出结论:[28]

鉴于MISRA C标准的明显扩大影响,本文试图评估原始标准中的重要缺陷是否已令人满意。不幸的是,他们没有,在Misra C 2004中没有比误判的重要效率更好,而不是在Misra C 1998年,这两者都是不可接受的。

在目前的形式中,唯一受益于MISRA C 2004更新的人似乎是工具供应商,并且希望通过拍摄来简化措辞和降低未来修订中的措辞和降低误报的步骤更多关于公布的实验数据的通知,并在根据他们似乎是个好主意的基础上不太诱惑发明规则。

由Tu Delft,由Cathal Boogerd和Leon Moonen进行的一项研究,经验评估Misra C:2004的价值。符合类似的结果:[29]

从获得的数据中,我们可以进行以下关键观察。首先,在72个规则中有9个,其中观察到违规,其比定位故障相关线路的随机预测器显着更好(α= 0.05)。这些规则的真正阳性率范围为24-100%。其次,我们观察到MISRA规则违规和观察故障之间的负相关性。此外,72项规则中有29个具有零真正的阳性率。与亚当斯&#39一起携带;观察到所有修改都具有引入故障的非零概率,这使得依赖于整体的Misra标准将使软件更可靠。

^ 1997年春季软件工程师奥斯汀Rover Group(Arg)向编程研究有限公司(PRL)发送了一个C编码标准,供审查。审查是由PRL'然后在David Blyth,David Blyth的高级顾问进行,他提出用明显更强的编码规则取代草案。这些规则,具有轻微变化,成立了第一版Misra C.