Background Image
Previous Page  14 / 22 Next Page
Information
Show Menu
Previous Page 14 / 22 Next Page
Page Background

события закрытия дескрипторов, исходное состояние которых неиз-

вестно).

При обработке события SummaryApply проверяющий модуль дол-

жен выполнить обновление состояния в соответствии с информацией,

хранящейся в выбранной ветви резюме. Так, если при выполнении

вызова функции дескриптор был закрыт, он должен быть помечен

как закрытый в состоянии вызывающей функции. Если в контексте

вызывающей функции уже известно, что дескриптор закрыт, то отло-

женная проверка должна выдать предупреждение. Кроме того, если

проверяющий модуль использует метаданные для хранения инфор-

мации о состоянии контролируемых объектов, он может потребовать

реализации функциональности актуализации метасимвола. Для этого

вводится функция обратного вызова evalSummarySVal. Реализующие

эту функцию модули должны определять, на какое символьное зна-

чение метаданных отображается актуализированный метасимвол, и

возвращать это символьное значение в качестве результата функции

обратного вызова.

Построение отчета о дефекте.

Построение отчета — важный эле-

мент работы статического анализатора. Недостаточно просто найти

дефект и указать место его возникновения. В случае анализа путей

выполнения программы между различными значимыми для дефекта

точками программы (например, открытие и закрытие файла) может

проходить длинный путь через большое количество операторов. При

этом путь выполнения может включать в себя условные операторы,

циклы и вызовы других функций. Однако субъективная сложность от-

слеживания пути выполнения быстро растет при увеличении длины

пути. Если дефект не локализован в пределах нескольких строк ко-

да или небольшой функции, то разработчику невозможно определить

путь выполнения, на котором проявляется дефект. Таким образом, при

анализе программы методом анализа ее путей выполнения необходимо

выполнять построение подробного отчета, однозначно указывающего

условия, при которых возникает дефект, и соответствующий им путь

выполнения.

При использовании межпроцедурного анализа методом встраива-

ния путь, проходимый внутри функции, отображается в графе вы-

полнения как часть общего пути выполнения, поэтому проблем при

построении пути при генерации отчета не возникает. Однако при при-

менении метода резюме существует проблема потери информации о

части пути, проходимом внутри вызываемой функции, поскольку яв-

ного построения поддеревьев графа выполнения программы более не

происходит. В результате замены встраивания функции на примене-

ние ее резюме граф выполнения программы изменяется следующим

образом. Вместо подграфа вложенного вызова в графе выполнения

88 ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2015. № 5