В чем разница между мертвым кодом и деактивированным кодом?
В чем разница между Dead code
а также Deactivated code
согласно DO178-b
?
Пожалуйста, приведите несколько примеров, чтобы подчеркнуть разницу.
2 ответа
Мертвый код - Исполняемый объектный код (или данные), который в результате ошибки проектирования не может быть выполнен (код) или использован (данные) в рабочей конфигурации целевой компьютерной среды и не прослеживается в соответствии с требованиями системы или программного обеспечения, Исключение составляют встроенные идентификаторы. Источник
Это означает, что мертвый код:
- исполняемый код
- программное обеспечение, которое никогда не будет выполнено во время выполнения
Примечание. Переменные / функции, на которые нет ссылок, которые не вызываются, не являются мертвым кодом, так как они автоматически удаляются через компилятор / компоновщик.
Пример:
if (true) {
// always chosen
} else {
// never chosen -> Dead code
}
Деактивированный код - исполняемый объектный код (или данные), который по своему замыслу либо (а) не предназначен для выполнения (код), либо используется (данные), например, как часть ранее разработанного программного компонента; или (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
}
Примечание. Деактивированный код может иметь разные формы, и это не совсем так. По сути, это просто код, который не всегда выполняется, только если выполняются определенные условия.
Я бы порекомендовал ознакомиться с этой статьей, в которой рассматривается мертвый код / деактивированный код (который также является источником цитируемого текста), а также внешние вопросы и ответы.
Цитируемые отрывки в первом ответе дословно взяты из руководства DO-178B, так что это хорошее начало.
Однако примечание о мертвом коде не совсем точно. Это зависит от того, удаляются ли эти типы вещей. Некоторые делают это автоматически. У некоторых есть варианты сделать это или нет, в то время как у других даже нет возможности.
В наших разработках мы довольно часто используем деактивированный код, поскольку у нас есть общие алгоритмы, которые используют настраиваемые параметры, чтобы активировать определенные аспекты для одного клиента против другого.
Большое различие между ними заключается в том, существует ли предполагаемая конфигурация, которая будет выполнять код в том виде, как он написан. Если есть, и он просто не является частью вашего конкретного проекта, то он будет деактивирован. Если нет конфигурации, где код мог бы выполняться, то он считается мертвым.
Это становится немного сложнее, если вы пытаетесь разработать программное обеспечение для многократного использования, например, драйвер устройства, когда определенные функции устройства не предназначены для использования в начальном проекте. Если у вас есть требования и вы разрабатываете тесты для неиспользуемого кода, и они выполняются и тестируются, то можно утверждать, что код деактивирован до тех пор, пока не будет создана конфигурация будущего проекта, которая будет его использовать. Наличие требований и тестов должно облегчить беспокойство по поводу кода, если он будет выполняться непреднамеренно в исходной конфигурации.