INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS NATAL-CENTRAL DIRETORIA DE EDUCAÇÃO E TECNOLOGIA DA INFORMAÇÃO Implementação do Siga-Pattern no SIGAEPCTEDU 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 Sumário Introdução Análise Estática Arquitetura Eclipse Plugin FindBugs Sumário Padrões Criando um Detector do FindBugs Plugin para utilização no SIGA-EDU Conclusão 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 SIGAEDU. Introdução: Motivação para a criação do detector Necessidade para a equipe de desenvolvimento do SIGA-EDU a agilidade no processo de verificação e validação. Ferramenta Open-Source. Introdução: Motivação para a criação do detector Ótimo desempenho da ferramenta detecção de falhas no sistema. na Fácil integração do FindBugs com as ferramentas utilizadas no desenvolvimento do sistema. 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. Análise Estática Falsos Positivos & Falsos Negativos ◦ Penalidades Ferramentas de análise estática ◦ FindBugs X outras ferramentas Eclipse IDE Histórico da plataforma Plataforma para a integração de ferramentas de desenvolvimento. Independência de Sistema Operacional. 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 comportamentos errôneos Detectores de Bug Patterns de ◦ 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” Criando um Detector do FindBugs Plugin para utilização no SIGA-EDU 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 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 Criando um Detector do FindBugs Plugin para utilização no SIGA-EDU 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() Resultados dos testes SIGA-PATTERN 1% CORRECTNESS 19% CORRECTNESS PERFORMANCE 30% BAD_PRACTICE STYLE PERFORMANCE STYLE 4% BAD_PRACTICE 46% SIGA-PATTERN Conclusão Implementação dos padrões restantes Esse detector pode ser utilizado em qualquer Sistema Operacional que suporte o Eclipse SDK. Perguntas