Анализ программ
Ана́лиз програ́мм, систематическая процедура извлечения из программы для ЭВМ информации, характеризующей как программу в целом, так и составляющие её элементы. Потребность в анализе программ постоянно возникает в ходе всего жизненного цикла программы, в частности при разработке программы для оптимизации программы и поиска в ней ошибок, при тестировании программы, при понимании программы для её поддержки и рефакторинга. В качестве примеров свойств программ, устанавливаемых средствами анализа программ, можно указать следующие задачи: по каким законам изменяются переменные программы в цикле, будет ли выгодным встраивание одной программной процедуры в другую, есть ли в программе ошибка некорректного использования указателя, какие процедуры программы не используются в её исходном коде и др.
Распространёнными способами анализа программ являются анализ потока управления и анализ потока данных программы. Анализ потока управления программы заключается в построении графа потока управления для каждой процедуры программы и графа вызовов программы, а далее в выяснении различных свойств структуры программы и различных вариантов её выполнения по этим графам. В графе потока управления вершинами являются т. н. базовые блоки – участки команд программы без переходов управления (с одним входом и одним выходом), а дуги означают переходы управления между вершинами. В графе вызовов программы вершинами являются процедуры программы, а дугами – возможные вызовы процедур. Анализ потока данных программы заключается в выяснении различных свойств переменных, выражений или их значений в каждой точке программы, которые справедливы для всех вариантов выполнений программы или для некоторого множества вариантов (в том числе для конкретного пути выполнения). Разработаны семейства алгоритмов анализа потока данных, в которых определяются способы моделирования требуемых свойств, а затем итеративно обходится граф потока управления программы или его подграфы в определённом порядке и вычисляются необходимые модельные свойства.