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