Алгоритмы проверки заданий по программированию

Алгоритм работы статических анализаторов кода

В связи с разными задачами, которые решаются различными инструментами статического анализа кода, алгоритм работы этих инструментов может варьироваться, однако большинству из них присущи общие принципы работы.

Как правило, статический анализ кода предполагает анализ исходного текста программы для построения определенной модели на его основе. Рассмотрим наиболее известные модели [30]:

· Абстрактное синтаксическое дерево представляет программный код с помощью древовидной структуры, где вершины дерева являются элементами конструкций языка программирования. Пример дерева представлен на рис. 1.

Визуализация абстрактного синтаксического дерева на примере программного кода

Рисунок 1. Визуализация абстрактного синтаксического дерева на примере программного кода

  • · Дерево разбора - модель, похожая на абстрактное синтаксическое дерево, за исключением того, что дерево разбора сохраняет всю информацию, поданную на входе, когда абстрактное синтаксическое дерево сохраняет только функциональную значимость анализируемого программного кода. По этой причине дерево разбора позволяет воссоздать исходный программный код, когда абстрактное синтаксическое дерево позволяет воссоздать лишь функциональный эквивалент.
  • · Диаграмма классов - в объектно-ориентированных языках программирования, модель, отражающая отношения между классами, их атрибутами и методами.
  • · Граф потока управления - модель, представленная в виде графа, отражающая все возможные пути исполнения программы.

После извлечения модели, алгоритм начинает ее анализ на предмет выявления характеристик, не подходящих под ряд правил. В качестве примера можно рассмотреть анализ дерева разбора, чтобы проверить соответствие программного кода на соответствии стандартам стиля программирования.

 
< Пред   СОДЕРЖАНИЕ   Загрузить   След >