Implementação do Siga-Pattern no SIGAEPCT-EDU através de Análise
Estática de Código utilizando a Ferramenta FindBugs Plugin
José Roberto de Melo Filho
Orientadora: Prof.ª Ms. Marília Aranha Freire
Co-orientador: Ms. Wanderson Câmara dos Santos
18 de julho de 2011
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE
CAMPUS NATAL-CENTRALDIRETORIA DE EDUCAÇÃO E TECNOLOGIA DA
INFORMAÇÃO
Sumário
Introdução
Análise Estática
Arquitetura Eclipse Plugin
FindBugs
Padrões
Criando um Detector do FindBugs Plugin para utilização no SIGA-EDU
Conclusão
Sumário
Introdução:Objetivos do Estudo e Implementação
O principal objetivo deste trabalho consiste na criação de um detector utilizando a Análise Estática em conjunto com a ferramenta FindBugs Plugin e como esse detector pode ajudar no processo de desenvolvimento do sistema SIGA-EDU.
Introdução:Motivação para a criação do detectorNecessidade para a equipe de
desenvolvimento do SIGA-EDU a agilidade no processo de verificação e validação.
Ferramenta Open-Source.
Ótimo desempenho da ferramenta na detecção de falhas no sistema.
Fácil integração do FindBugs com as ferramentas utilizadas no desenvolvimento do sistema.
Introdução:Motivação para a criação do detector
Análise Estática
Processo realizado por uma ferramenta em um programa sem necessidade de execução do mesmo.
Análise em Código Fonte versus Código Compilado.
Falsos Positivos & Falsos Negativos◦Penalidades
Ferramentas de análise estática◦FindBugs X outras ferramentas
Análise Estática
Histórico da plataforma
Plataforma para a integração de ferramentas de desenvolvimento.
Independência de Sistema Operacional.
Eclipse IDE
FindBugs
Ferramenta de Análise Estática
Utiliza a biblioteca BCEL para verificar o bytecode.
Formado por duas partes: Engine e Front-ends◦Engine: Núcleo da ferramenta◦Front-ends: Subdividem em Task para
ANT, Plugin para Eclipse e aplicação stand-alone.
Padrões
Evita a utilização de técnicas não-orientadas a objetos.
Bug Patterns são padrões de comportamentos errôneos
Detectores de Bug Patterns◦ Bug-patterns agrupam-se em categorias.◦ São identificados por pequenos códigos
no arquivo findbugs.xml.
Criando um Detector do FindBugs Plugin para utilização no SIGA-EDU
Situação
◦Classes “EJB”
◦Classes “DAO”
Ambiente de desenvolvimento
◦Java JDK com variáveis de ambiente configuradas JDK 1.5 ou mais nova
◦Eclipse Galileo 3.5.0
◦FindBugs source 1.3.9.qualifier
Criando um Detector do FindBugs Plugin para utilização no SIGA-EDU
Configurando o FindBugs Plugin
findbugs.xml
messages.xml
SIGADetector.java
Criando um Detector do FindBugs Plugin para utilização no SIGA-EDU
Criando um Detector do FindBugs Plugin para utilização no SIGA-EDU
Configurando o FindBugs Plugin
◦findbugs.xml Configuração da classe do detector
Tag <Detector> Instancia todos os detectores definidos por
essa tag
Tag <BugPattern> Especifica o tipo de bug que será retornado
Configurando o FindBugs Plugin
◦messages.xml Definição da nossa categoria: SIGAEDU
Criando um Detector do FindBugs Plugin para utilização no SIGA-EDU
Configurando o FindBugs Plugin
◦messages.xml Definição do nosso detector no arquivo
messages.xml
Criando um Detector do FindBugs Plugin para utilização no SIGA-EDU
Configurando o FindBugs Plugin
◦messages.xml Definição das mensagens visíveis para os
bug patterns identificados pelos conteúdos do atributo type.
Criando um Detector do FindBugs Plugin para utilização no SIGA-EDU
Implementando o SIGADetector.java
◦Deve implementar a interface Detector e estender a superclasse PreorderVisitor
◦Faz-se uma chamada à classe BugReporter no construtor
◦Declara o método visitClassContext(ClassContext)
Criando um Detector do FindBugs Plugin para utilização no SIGA-EDU
Implementando o SIGADetector.java
◦Criamos dois métodos auxiliares, getLastName() e o isMesmoNome(), para ajudar a limpar mais o método visit().
◦Sobrescrever o método visit()
Criando um Detector do FindBugs Plugin para utilização no SIGA-EDU
Resultados dos testes
CORRECTNESS19%
BAD_PRACTICE46%
STYLE4%
PERFORMANCE30%
SIGA-PATTERN1%
CORRECTNESSBAD_PRACTICESTYLEPERFORMANCESIGA-PATTERN
Conclusão
Implementação dos padrões restantes
Esse detector pode ser utilizado em qualquer Sistema Operacional que suporte o Eclipse SDK.
Perguntas