✨Notícias
- Lançamento v0.5.4:
- O Tai-e agora vem com um novo frontend, oferecendo conversão mais rápida e confiável de programas Java para a IR do Tai-e.
- A análise de aplicativos Android é suportada através de um plugin baseado no PacDroid, integrado com análise de ponteiros.
- Análise Spring DI e WEC é suportada através do plugin de análise Spring.
- Nosso artigo "Two Approaches to Fast Bytecode Frontend for Static Analysis" foi aceito no OOPSLA'25. Este artigo apresenta o novo frontend de bytecode do Tai-e, que é significativamente mais rápido e confiável que frontends existentes.
- Nosso artigo "Pointer Analysis for Database-Backed Applications" foi aceito no PLDI'25. Este artigo descreve uma análise de ponteiros ponta a ponta para aplicações Java com banco de dados, desenvolvida sobre o Tai-e.
- Nosso artigo "PacDroid: A Pointer-Analysis-Centric Framework for Security Vulnerabilities in Android Apps" foi aceito no ICSE'25. Este trabalho demonstra a nova capacidade do Tai-e em análise Android, fornecendo uma abordagem simples, porém eficaz, para análise de segurança de aplicativos. Este trabalho recebeu o Best Artifact Award🏅.
- Nosso artigo "Bridge the Islands: Pointer Analysis for Microservice Systems" foi aceito no ISSTA'25. Este artigo descreve a primeira análise de ponteiros para sistemas de microsserviços Java desenvolvida sobre o Tai-e.
- Nosso artigo "Interactive Cross-Language Pointer Analysis for Resolving Native Code in Java Programs" foi aceito no ICSE'25. Esta é a primeira análise de ponteiros entre linguagens Java e C. Este trabalho ganhou o Distinguished Paper Award🏅.
- Nosso artigo "Context Sensitivity without Context: A Cut-Shortcut Approach to Fast and Precise Pointer Analysis" foi aceito no PLDI'23. Este é o primeiro trabalho de pesquisa publicado desenvolvido sobre o Tai-e.
- Nosso artigo "Tai-e: A Developer-Friendly Static Analysis Framework for Java by Harnessing the Good Designs of Classics" foi aceito no ISSTA'23. Este artigo descreve os projetos dos principais componentes do Tai-e.
Índice
O que é Tai-e?
Tai-e (chinês: 太阿; pronúncia: [ˈtaɪə:]) é um novo framework de análise estática para Java (veja nosso artigo do ISSTA 2023 para detalhes), que incorpora os projetos "melhores", argumentavelmente, tanto dos novos que propusemos quanto daqueles de frameworks clássicos como Soot, WALA, Doop e SpotBugs.
Tai-e é fácil de aprender, fácil de usar, eficiente e altamente extensível, permitindo que você desenvolva novas análises facilmente sobre ele.
Atualmente, o Tai-e fornece os seguintes componentes principais de análise (e mais análises estão a caminho):
- Framework poderoso de análise de ponteiros
- Construção de grafo de chamadas em tempo real
- Várias técnicas clássicas e avançadas de abstração de heap e sensibilidade a contexto para análise de ponteiros
- Sistema extensível de plugins de análise (permite desenvolver e adicionar convenientemente novas análises que interagem com a análise de ponteiros)
- Análise de segurança configurável
- Análise de mancha (taint analysis), que permite configurar fontes, sumidouros, transferências de mancha e sanitizadores
- Detecção de várias vazamentos de informação e vulnerabilidades de injeção
- Várias opções de equilíbrio entre precisão e eficiência (beneficiando-se do framework de análise de ponteiros)
- Várias análises fundamentais/utilitárias
- Análises fundamentais, por exemplo, análise de reflexão e análise de exceções
- Análises de recursos modernos da linguagem, por exemplo, análise de lambda e referência de método, e análise invokedynamic
- Ferramentas utilitárias como temporizador de análise, verificador de restrições (para depuração) e vários despejadores de grafo
- Framework de análise de fluxo de controle/dados
- Construção de grafo de fluxo de controle
- Análises clássicas de fluxo de dados, por exemplo, análise de variáveis vivas, propagação de constantes
- Suas análises de fluxo de dados
- Sistema de detecção de bugs semelhante ao SpotBugs
- Detectores de bugs, por exemplo, detector de ponteiro nulo, detector de
clone() incorreto
- Seus detectores de bugs
Tai-e é desenvolvido em Java e pode ser executado nos principais sistemas operacionais, incluindo Windows, Linux e macOS.
Como cortesia aos desenvolvedores, esperamos que você por favor cite o artigo do ISSTA 2023 que descreve o framework Tai-e em seu trabalho de pesquisa:
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).
Como obter um Tai-e executável?
A maneira recomendada é baixar o ZIP de distribuição dos GitHub Releases.
O ZIP contém Tai-e, todas as dependências de tempo de execução, documentação offline e scripts de inicialização para Windows, Linux e macOS.
Alternativamente, você pode compilar o Tai-e mais recente a partir do código-fonte. Isso pode ser feito simplesmente via Gradle (certifique-se de que o Java 17 (ou versão superior) está disponível no seu sistema):
./gradlew distZip
O ZIP de distribuição será gerado em tai-e/build/distributions/.
Após extraí-lo, execute o Tai-e através do script de inicialização:
# no Linux/macOS
./tai-e-<version>/bin/tai-e -h
# no Windows
.\tai-e-<version>\bin\tai-e.bat -h
Para compatibilidade com versões anteriores e scripts, o Tai-e ainda fornece um JAR all-in-one legado:
./gradlew fatJar
java -jar build/tai-e-all-<version>.jar -h
Como incluir Tai-e no seu projeto?
Tai-e é projetado como uma ferramenta autônoma, mas você também tem a opção de incluí-lo em seu projeto como uma dependência.
Ele está disponível nos repositórios Maven, permitindo integrá-lo facilmente em seus projetos Java usando ferramentas de build como Gradle e Maven.
Mantemos versões estáveis e mais recentes do Tai-e, e aqui estão as coordenadas correspondentes nos formatos de script Gradle e Maven:
Versão Estável
Para Gradle:
dependencies {
implementation("net.pascal-lab:tai-e:0.5.4")
}
Para Maven: