Integração de técnicas de Engenharia Reversa utilizando

Propaganda
Integração de técnicas de
Engenharia Reversa utilizando
Multiagentes
Rafael H. P. Vieira
[email protected]
[email protected]
Introdução
• Definições básicas
– Engenharia reversa
– Sistemas multiagentes
• Motivação
• Proposta
• Análise estática formal
• Análise estática informal
Rafael H. P. Vieira © LES/PUC-Rio
Introdução
• Análise dinâmica
• Próximos passos
• Referências
Rafael H. P. Vieira © LES/PUC-Rio
Definições básicas
• Engenharia reversa (ER): estuda formas/técnicas de
representação do conhecimento implícito em um software e
de identificação dos seus componentes e das interrelação
entre estes. [1]
• Sistema legado: sistema antigo que, dada a importância
que tem para seu proprietário, continua em atividade.
Rafael H. P. Vieira © LES/PUC-Rio
Definições básicas
• Algumas técnicas:
– Análise estática formal
• Análise de dependências: algoritmo HITS, hub e authority
– Análise estática informal
• Information retrieval
• Clustering semântico
– Análise dinâmica
• Algoritmo HITS, com pesos
• Slicing
Rafael H. P. Vieira © LES/PUC-Rio
Definições básicas
• Sistemas Multiagentes: sistemas compostos por agentes
racionais que interagem, em um dado ambiente, através de
troca de mensagens, visando atingir um ou vários objetivos.
[6]
• Agente racional: dadas as suas percepções, do ambiente
no qual está inserido, deve escolher a ação que maximizará
sua medida de desempenho (heurística) na busca por seu
objetivo. [7]
• Heurística: informação utilizada na avaliação de
desempenho de um agentes, sendo útil na verificação do
alcance do seu objetivo.
Rafael H. P. Vieira © LES/PUC-Rio
Motivação
• Até 40% ou 60% do tempo de manutenção de software
é gasto em entendimento de programas. [2][3]
• Técnicas de Engenharia Reversa (ER) nem sempre são
satisfatórias, quando usadas isoladamente, para obtenção
de classes de domínio do sistema.
• Dificuldade na identificação de classes de domínio dos
sistemas.
• Existem muitos sistemas legados mal documentados ou
conhecidos por, somente, seus próprios desenvolvedores.
Rafael H. P. Vieira © LES/PUC-Rio
Proposta
• Desenvolver um sistema multiagente para integração de
técnicas de ER, visando o entendimento de programas
e análise de códigos orientados a objetos.
• O objetivo é, basicamente, identificar quais são as classes
de domínio do sistema em análise.
• O sistema será composto por três camadas de análise:
estática formal, estática informal e dinâmica.
• Cada uma das camadas de análise será executada por um
ou mais agentes de software.
Rafael H. P. Vieira © LES/PUC-Rio
Proposta
• Cada camada de análise abrangerá uma ou mais
heurísticas, baseadas nas técnicas de ER, as quais os
agentes utilizarão para qualificar as classes analisadas
como próximas ou não do domínio da aplicação.
• Qualificar, nesse contexto, significa atribuir uma
pontuação (p. ex., de 0 a 10) para cada classe, de acordo
com a proximidade do domínio da aplicação.
• A proximidade de domínio será avaliada de acordo com a
técnica usada pelo agente: conjunto de palavras ou radicais
relacionados ao assunto, classes mais antigas, mais
referenciadas, que mais referenciam, etc.
Rafael H. P. Vieira © LES/PUC-Rio
Análise estática formal
• Análise de referências estáticas : algoritmo HITS
– O algoritmo HITS, usado para extração de informações da web,
pode ser aplicado no contexto de análise de código, para
contagem das referências entre as classes de um sistema [2].
Rafael H. P. Vieira © LES/PUC-Rio
Análise estática formal
• Análise das heranças: subclasses de classes de domínio são
também de domínio. Outros tipos de análise sobre a
herança poderão ser estudadas.
• Tempo das classes no sistema: a “idade” de uma classe no
sistema, sendo usada em conjunto com as demais técnicas
de ER, pode ser um bom indicador para identificação de
classes de domínio. Por exemplo: classes de domínio de um
sistema legado serão mais antigas que a maioria das outras.
• Filtro por pacote: classes certos pacotes, informados pelo
usuário, são excluídas da análise (p. ex.: API Java).
Rafael H. P. Vieira © LES/PUC-Rio
Análise estática informal
•
Clustering semântico [3]
– Se utiliza de uma técnica de Information Retrieval para agrupamento
de classes em grupos (clusters), baseado na análise de identificadores
e comentários de código.
– Algoritmo LSI: utiliza um algoritmo para comparação de radicais das
palavras, transformando uma matriz de termos e documentos em uma
matriz que relaciona documentos entre si.
Rafael H. P. Vieira © LES/PUC-Rio
Análise dinâmica
• Análise das dependências (algortimo HITS), com pesos
baseados em estatísticas de trocas de mensagens [2].
• Slicing: consiste em “fatiar” o código em instruções
(statements), para avaliação das partes mais influentes no
resultado final de, por exemplo, um método [5]. Uma
possível métrica para essa técnica seria o grau de influência
que o código de uma determinada classe tem sobre o
produto da execução de um caso de uso.
Rafael H. P. Vieira © LES/PUC-Rio
Próximos passos
• Realizar levantamento de softwares e códigos livres que
implementem as técnicas de ER estudadas, para possível
uso no trabalho. Inclui, também, a escolha de um
framework multiagente.
• Verificar formas de aplicação do que foi levantado
anteriormente e implementar o que não tiver solução
implementada, em termos de técnicas de ER.
• Estabeler métricas (pontuação) para as heurísticas
escolhidas (baseadas nas técnicas).
• Integrar os programas e/ou códigos implementados através
dos agentes.
Rafael H. P. Vieira © LES/PUC-Rio
Próximos passos
• Avaliar a possibilidade de obter métricas de engenharia de
software (p. ex., acoplamento, coesão, etc) e incluir na
implementação.
• Fazer o benchmark da solução proposta com, pelo menos,
uma solução de ER de mercado, ou da academia, que seja
bem aceita.
Rafael H. P. Vieira © LES/PUC-Rio
Referências
•
[1] CHIKOFSKY, ELLIOT J.; CROSS II, JAMES H.; Reverse
Engineering and Design Recovery: A Taxonomy. IEEE
Software; pages 13–17; January 1990
•
[2] ZAIDMAN, ANDY; CALDERS, TOON; DEMEYER, SERGE;
PAREDAENS, JAN; Applying Webmining Techniques to
Execution Traces to Support the Program Comprehension
Process. Proceedings of the 9th European Conference on
Software Maintenance and Reengineering (CSMR2005), pages
134-142; IEEE Computer Society, Manchester, UK; March 2005
•
[3] KUHN, ADRIAN; DUCASSE; STÉPHANE; GÎRBA, TUDOR;
Semantic clustering: Identifying topics in source code.
Software Composition Group, University of Berne, Switzerland;
Language and Software Evolution Group, LISTIC, Université de
Savoie, France; June 2006
Rafael H. P. Vieira © LES/PUC-Rio
Referências
•
[4] LOPES, Maria C. S.; Mineração de dados textuais
utilizando técnicas de clustering para o idioma português.
COPPE/UFRJ; Tese - Universidade Federal do Rio de Janeiro; 2004
•
[5] WEISER, MARK; Program Slicing. Proc. 5th Int. Conf. on
Software Eng. New York: IEEE; 439-449; 1981
•
[6] WOOLDRIDGE, M.J.; JENNINGS, N. R..; Multiagent Systems:
A Modern Approach to Distributed Artificial Intelligence.
Cambridge: The MIT Press; 1999.
•
[7] RUSSEL, STUART; NORVIG, PETER; Inteligência Artificial.
Cap. 2; Tradução da Segunda Edição; Ed. Campus
Rafael H. P. Vieira © LES/PUC-Rio
Perguntas
?
Rafael H. P. Vieira © LES/PUC-Rio
Download