✨Новости
- Релиз v0.5.4:
- Tai-e поставляется с новым фронтендом, обеспечивающим более быструю и надежную конвертацию Java-программ в IR Tai-e.
- Анализ Android-приложений поддерживается через плагин на базе PacDroid, интегрированный с анализом указателей.
- Анализ Spring DI и WEC поддерживается через плагин анализа Spring.
- Наша статья "Two Approaches to Fast Bytecode Frontend for Static Analysis" принята на OOPSLA'25. В этой статье представлен новый байткодный фронтенд Tai-e, который значительно быстрее и надежнее существующих фронтендов.
- Наша статья "Pointer Analysis for Database-Backed Applications" принята на PLDI'25. В этой статье описан сквозной анализ указателей для Java-приложений, работающих с базами данных, разработанный на основе Tai-e.
- Наша статья "PacDroid: A Pointer-Analysis-Centric Framework for Security Vulnerabilities in Android Apps" принята на ICSE'25. Эта работа демонстрирует новые возможности Tai-e в анализе Android, предлагая простой, но эффективный подход к анализу безопасности приложений. Эта работа получила Best Artifact Award🏅.
- Наша статья "Bridge the Islands: Pointer Analysis for Microservice Systems" принята на ISSTA'25. В этой статье описан первый анализ указателей для Java-микросервисных систем, разработанный на основе Tai-e.
- Наша статья "Interactive Cross-Language Pointer Analysis for Resolving Native Code in Java Programs" принята на ICSE'25. Это первый межъязыковой анализ указателей между Java и C. Эта работа получила Distinguished Paper Award🏅.
- Наша статья "Context Sensitivity without Context: A Cut-Shortcut Approach to Fast and Precise Pointer Analysis" принята на PLDI'23. Это первая опубликованная исследовательская работа, разработанная на основе Tai-e.
- Наша статья "Tai-e: A Developer-Friendly Static Analysis Framework for Java by Harnessing the Good Designs of Classics" принята на ISSTA'23. В этой статье описываются проекты основных компонентов Tai-e.
Содержание
Что такое Tai-e?
Tai-e (кит.: 太阿; произношение: [ˈtaɪə:]) — это новый фреймворк статического анализа для Java (подробнее см. нашу статью ISSTA 2023), который включает в себя, пожалуй, «лучшие» решения как из предложенных нами новых, так и из классических фреймворков, таких как Soot, WALA, Doop и SpotBugs.
Tai-e прост в изучении, удобен в использовании, эффективен и легко расширяем, что позволяет легко разрабатывать на его основе новые анализы.
В настоящее время Tai-e предоставляет следующие основные компоненты анализа (и другие анализы находятся в разработке):
- Мощный фреймворк анализа указателей
- Построение графа вызовов «на лету»
- Различные классические и продвинутые техники абстракции кучи и контекстной чувствительности для анализа указателей
- Расширяемая система плагинов анализа (позволяет удобно разрабатывать и добавлять новые анализы, взаимодействующие с анализом указателей)
- Настраиваемый анализ безопасности
- Анализ распространения меток (taint), позволяющий настраивать источники, стоки, переносы меток и санитайзеры
- Обнаружение различных утечек информации и уязвимостей инъекций
- Различные компромиссы между точностью и эффективностью (выигрыш от фреймворка анализа указателей)
- Различные фундаментальные/вспомогательные анализы
- Фундаментальные анализы, например, анализ рефлексии и анализ исключений
- Анализы современных языковых возможностей, например, анализ лямбда-выражений и ссылок на методы, а также анализ invokedynamic
- Вспомогательные инструменты, такие как таймер анализа, проверка ограничений (для отладки) и различные дамперы графов
- Фреймворк анализа потоков управления/данных
- Построение графа потоков управления
- Классические анализы потоков данных, например, анализ живых переменных, распространение констант
- Ваши собственные анализы потоков данных
- Система обнаружения ошибок, подобная SpotBugs
- Детекторы ошибок, например, детектор нулевых указателей, детектор некорректного
clone()
- Ваши собственные детекторы ошибок
Tai-e разработан на Java и может работать во всех основных операционных системах, включая Windows, Linux и macOS.
Из уважения к разработчикам, мы просим вас пожалуйста, цитируйте статью с ISSTA 2023, описывающую фреймворк Tai-e, в ваших исследовательских работах:
Tian Tan and Yue Li. 2023.
Tai-e: A Developer-Friendly Static Analysis Framework for Java by Harnessing the Good Designs of Classics.
In Proceedings of the 32nd ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA '23), July 17–21, 2023, Seattle, WA, USA (pdf, bibtex).
Как получить работающий Tai-e?
Рекомендуемый способ — загрузить дистрибутивный ZIP-архив из GitHub Releases.
ZIP-архив содержит Tai-e, все зависимости времени выполнения, офлайн-документацию и скрипты запуска для Windows, Linux и macOS.
В качестве альтернативы вы можете собрать последнюю версию Tai-e из исходного кода. Это легко сделать с помощью Gradle (убедитесь, что на вашей системе установлена Java 17 или выше):
./gradlew distZip
Дистрибутивный ZIP-архив будет создан в tai-e/build/distributions/.
После распаковки запустите Tai-e с помощью скрипта запуска:
# on Linux/macOS
./tai-e-<version>/bin/tai-e -h
# on Windows
.\tai-e-<version>\bin\tai-e.bat -h
Для совместимости со старыми релизами и скриптами Tai-e также предоставляет устаревший all-in-one JAR:
./gradlew fatJar
java -jar build/tai-e-all-<version>.jar -h
Как включить Tai-e в свой проект?
Tai-e разработан как автономный инструмент, но у вас также есть возможность включить его в свой проект в качестве зависимости.
Он доступен в репозиториях Maven, что позволяет легко интегрировать его в ваши Java-проекты с помощью таких инструментов сборки, как Gradle и Maven.
Мы поддерживаем как стабильные, так и последние версии Tai-e, и ниже приведены соответствующие координаты в формате скриптов Gradle и Maven:
Стабильная версия
Для Gradle:
dependencies {
implementation("net.pascal-lab:tai-e:0.5.4")
}
Для Maven:
<dependencies>
<dependency>
<groupId>net.pascal-lab</groupId>
<artifactId>tai-e</artifactId>
<version>0.5.4</version>
</dependency>
</dependencies>
Последняя версия
Для Gradle: