Вопрос или проблема
Обратный срез выделяет те утверждения, которые влияют на значение атрибута.
Например:
x = 1;
y = 2;
z = y-2;
r = x;
z = x+y; /* точка среза - конец программы */.
Здесь обратный срез будет:
x = 1;
y = 2;
z = x+y;
Я изучал WALA [1] и Soot [2] для поддержки среза. Однако они работают с трехадресным кодом, и нет прямого способа извлечь информацию о срезе, основываясь на фактическом исходном коде.
На самом деле, до сих пор я не наткнулся ни на один инструмент среза, который бы работал и поддерживался.
Может кто-то помочь мне с моим запросом?
[1] https://github.com/wala/WALA
[2] https://github.com/soot-oss/soot
Это не ответ, я застрял на том же самом. Вы когда-нибудь нашли что-то полезное?
Ответ или решение
Вопрос о наличии актуального и простого в использовании инструмента для обратного статического срезания на Java несомненно волнует многих разработчиков и исследователей в области анализа программного обеспечения. Метод обратного срезания позволяет идентифицировать те участки кода, которые влияют на значение определённого атрибута, что в свою очередь значительно упрощает процесс отладки и улучшает качество программного обеспечения.
К сожалению, на текущий момент не существует открытого инструмента для обратного срезания кода на Java, который был бы одновременно поддерживаемым, простым в использовании и подходящим для работы непосредственно с исходным кодом. Вы упомянули два популярных инструмента — WALA и Soot. Оба этих проекта действительно предоставляют возможности для анализа программ на Java, но они имеют свои ограничения:
-
WALA (https://github.com/wala/WALA) — этот инструмент основан на трёхадресном коде, что делает его использованием более сложным для извлечения информации о срезах непосредственно из исходного кода. WALA более ориентирован на анализ зависимостей и построение графов, но прямое выполнение задач обратного срезания требует дополнительных усилий и понимания внутренней структуры инструмента.
-
Soot (https://github.com/soot-oss/soot) — также работает на уровне трёхадресного кода и предоставляет набор полезных функций для статического анализа Java-программ. Однако его сложный API и необходимость в предварительной обработке могут стать препятствием для прямого использования для задач срезания.
Альтернативы и перспективы
Несмотря на указанные сложности, существуют и другие подходы, которые можно рассмотреть для выполнения задачи обратного срезания в Java:
-
Java Slicing Framework: Этот проект, хотя и менее известен, приблизительно соответствует вашим требованиям. Он предоставляет возможность для выполнения статического срезания на Java. Однако необходимо проверить его состояние поддержки и обновления.
-
CodeQL от GitHub: хотя это не специализированный инструмент для срезания, он предоставляет мощные возможности для анализа кода. Возможно, его можно адаптировать для получения обратных срезов путем написания запросов для извлечения зависимостей.
Рекомендации
Если ваш проект требует использования обратного срезания, я бы рекомендовал:
- Провести исследование существующих инструментов и фреймворков, возможно, обнаружив менее известные решения, которые в настоящее время находятся на стадии активной разработки.
- Обратиться к сообществу разработчиков — например, на платформах GitHub или Stack Overflow. Возможно, кто-то уже столкнулся с аналогичной проблемой и может предложить решение или workaround.
- Рассмотреть возможность написания собственного инструмента на основе существующих библиотек. Это может потребовать значительных усилий, но в итоге даст вам именно тот функционал, который необходим.
Заключение
На данный момент нет идеального решения для обратного статического срезания кода на Java, который был бы прост в использовании и активно поддерживался. Однако, анализируя существующие инструменты и исследуя возможности их адаптации, вы можете найти подходящее решение для вашей задачи. Постоянно следите за обновлениями в области анализа кода и использования новых технологий, те же инструменты могут в будущем предложить более удобные решения для разработчиков.