OPAL-Относительно реализации граф вызовов конструкции в OPAL

В статье [Линия программного продукта для статического анализа (2014)] приведена графическая схема построения вызовов, связанная с иллюстрацией (листинг 7).

В этом примере Line14 относится к построению графа вызовов. в то время как я проверяю код src и API, я могу найти DefaultCHACallGraphDomain.scala, у которого нет реализации графа вызовов конструкции.

Моя цель - использовать OPAL для построения графа вызовов. Существуют ли какие-либо демонстрационные материалы или документы, помогающие мне понять существующий CallGraphDomain в OPAL? В настоящее время я могу найти только объявление класса.

Я буду очень признателен, если кто-нибудь может дать мне несколько советов, связанных с этой темой.

Заранее спасибо.

Jiang

1 ответ

Решение

Интерфейс, который был показан в статье, больше не существует, так что вы можете полностью забыть об этом.

Интерфейс по умолчанию, чтобы получить CallGraph класс обеспечивается Project объект, который вы извлекаете при загрузке байт-кода проекта Java.

Общий код Пример:

val project = ... // a java project
val computedCallGraph = project.get(/* Some call graph key */)
val callGraph = computedCallGraph.callGraph // the final call graph interface.

Вычисляемый граф вызовов содержит несколько вещей. Он содержит точки входа, неразрешенные вызовы методов, исключения, когда что-то пошло не так во время построения и фактический график вызовов.

OPAL предоставляет вам несколько алгоритмов графа вызовов, каждый из которых можно получить, передав соответствующий ключ графа вызовов в Project"s get метод.

В настоящее время доступны следующие два ключа, которые можно передать Project.get (дополнительная информация доступна в документации этих классов):

  • CHACallGraphKey
  • VTACallGraphKey

Режим анализа - библиотека против приложения

Чтобы построить правильный график вызовов для программного проекта, это зависит от вида проекта, какой режим анализа выбрать. В то время как приложения предоставляют полную информацию (кроме незавершенных проектов, загрузки классов и т. Д.), Библиотеки программного обеспечения предназначены для использования другими проектами. Тем не менее, эти два разных сценария должны быть приняты во внимание при построении графов вызовов. Более подробную информацию можно найти здесь: org.opalj.AnalysisModes

OPAL предлагает следующие режимы анализа:

  • DesktopApplication (безопасно для графиков вызовов приложений)
  • LibraryWithClosePackagesAssump (безопасно для графов вызовов, которые используются для анализа без учета безопасности)
  • LibraryWithOpenPackagesAssump (очень консервативный / безопасный для анализа безопасности)

Режим анализа можно настроить в конфигурационном файле OPAL или установить в качестве параметра проекта во время выполнения. Вы можете найти файл конфигурации в Common проект под /src/main/resources/reference.conf,

Все эти режимы анализа поддерживаются CHACallGraphKey в то время как VTACallGraphKey пока поддерживает только приложения.

ПРИМЕЧАНИЕ. Интерфейс может снова измениться в следующих версиях.

Другие вопросы по тегам