В контексте аппаратных и программных систем формальная проверка - это акт доказательства или опровержения правильности предполагаемых алгоритмов, лежащих в основе системы в отношении определенной формальной спецификации или свойства, с использованием формальных математических методов.
Как это может быть формальная проверка, если нет формального описания модели?
Статический анализатор генерирует поток управления / данных фрагмента кода, на основе которого формальные методы затем можно применить для проверки соответствия ожидаемой проектной модели системы / блока.
Обратите внимание, что моделирование / формальная спецификация НЕ ЯВЛЯЕТСЯ частью статического анализа.
Однако в совокупности оба этих инструмента полезны при формальной проверке.
Например, если система моделируется как конечный автомат (FSM) с
- заранее определенное количество состояний
определяется комбинацией определенных значений определенных данных элемента.
- предопределенный набор переходов между различными состояниями
определяется списком функций-членов.
Тогда результаты статического анализа помогут в формальной проверке того факта, что управление НИКОГДА не течет по пути, который НЕ присутствует в приведенной выше модели конечного автомата.
Кроме того, если модель может быть просто определена в терминах определения типа, потока данных, потока управления / графа вызовов, то есть метрик кода, которые может проверить статический анализатор, то самого статического анализа достаточно для формальной проверки. этот код соответствует такой модели. ![Статический анализ и формальная проверка](https://i.stack.imgur.com/Tqonc.png)
ПРИМЕЧАНИЕ 1. Желтая область выше - это статические анализаторы, используемые для обеспечения соблюдения таких вещей, как рекомендации по кодированию и соглашения об именах, то есть аспекты кода, которые не могут повлиять на поведение программы.
ПРИМЕЧАНИЕ 2. Красная область выше будет формальной проверкой, требующей дополнительных шагов, таких как 100% динамическое покрытие кода, удаление неиспользуемого и мертвого кода. Их нельзя обнаружить / применить с помощью статического анализатора.
Статический анализ очень эффективен при проверке того, что система / модуль реализована с использованием подмножества языковой спецификации для достижения целей, изложенных в проекте системы / модуля.
Например, если целью проекта является предотвращение превышения определенного предела памяти стека, то можно применить ограничение на глубину рекурсии (или вообще запретить вызовы рекурсивных функций). Статический анализ используется для выявления таких нарушений целей проектирования.
В отсутствие каких-либо предупреждений от статического анализатора, код системы / модуля формально проверяется на соответствие таким проектным целям соответствующей модели.
например. Стандарт MISRA-C для автомобильного программного обеспечения определяет подмножество C для использования в автомобильных системах.
MISRA-C: 2012 содержит
person
TheCodeArtist
schedule
21.02.2016