0

Dead codeDeactivated codeas per和有什么不一样DO178-b

请提供一些例子来突出差异。

4

2 回答 2

4

死代码 - 由于设计错误而无法在目标计算机环境的操作配置中执行(代码)或使用(数据)并且无法追溯到系统或软件要求的可执行目标代码(或数据) . 一个例外是嵌入式标识符。资源

这意味着死代码是:

  • 可执行代码
  • 在运行时永远不会执行的软件

注意:未调用的未引用变量/函数不是死代码,因为它们会通过编译器/链接器自动删除。

例子:

if (true) {
    // always chosen
} else {
    // never chosen -> Dead code
}

停用的代码 - 设计为 (a) 不打算执行(代码)或使用(数据)的可执行目标代码(或数据),例如,先前开发的软件组件的一部分;(b) 仅在目标计算机环境的某些配置中执行(代码)或使用(数据),例如,通过硬件引脚选择或软件编程选项启用的代码。资源

这意味着停用的代码是:

  • 可执行代码
  • 在特定软件版本的运行时操作期间/在特定航空电子设备盒内不会执行的软件
  • 可能在更高版本或特殊操作期间或仅在某些情况下执行的软件

例子:

if (!option9) { // Anything but option 9 will lead to this path being chosen
    // Code
} else {
    // Code to be executed in the event that option 9 is selected
}

注意:停用的代码可以有各种形状,这不是它必须看起来的样子。它基本上只是不总是执行的简单代码,只有在满足某些条件时才执行。


我建议查看这篇关于死代码/停用代码(也恰好是引用文本的来源)的文章,以及这个外部问答

于 2016-11-25T14:16:51.953 回答
0

第一个答案中引用的段落逐字逐句地来自 DO-178B 指南,因此这是一个很好的开始。

但是,关于死代码的注释并不完全准确。它是编译器取决于这些类型的东西是否被删除。有些是自动完成的。有些人可以选择做或不做,而有些人甚至没有选择。

我们在设计中使用了相当多的停用代码,因为我们有通用算法,这些算法使用可配置参数来激活一个客户与另一个客户的某些方面。

两者之间的最大区别在于是否有预期的配置将执行所编写的代码。如果有,并且它不属于您的特定项目,那么它将被停用。如果没有可以执行代码的配置,则认为它已死。

如果您尝试开发可重用的软件(如设备驱动程序),而设备的某些功能不打算在初始项目中使用,这会有点棘手。如果您对未使用的代码有需求并开发测试,并且这些代码被执行和测试,那么可以说代码被停用,直到创建将使用它的未来项目的配置。如果代码在原始配置中无意执行,有需求和测试应该可以减轻对代码的担忧。

于 2018-02-02T16:42:10.737 回答