Desenvolvimento de Software para Sistemas Multiagentes Hyggo Oliveira de Almeida 1, Evandro Costa 2, Angelo Perkusich 1 1 Departamento de Engenharia Elétrica Universidade Federal de Campina Grande Av. Aprigio Veloso, 882, Bodocongó Campina Grande, PB, Brasil 2 Departamento de Tecnologia da Informação Universidade Federal de Alagoas {hyggo,perkusic}@dee.ufcg.edu.br, evandro@tci.ufal.br Abstract. A abordagem multiagentes tem sido apontada como adequada para o desenvolvimento de sistemas de software complexos. Investimentos em Engenharia de Software para dar suporte à utilização desta abordagem em larga escala têm sido realizados. Porém, nestes trabalhos não são levadas em conta características como dinamicidade do sistema e flexibilidade da solução. Neste trabalho, apresenta-se uma infra-estrutura de engenharia para o desenvolvimento de software utilizando a abordagem multiagentes denominada COMPOR. Trata-se de um conjunto de diretrizes e ferramentas para o desenvolvimento de software com foco na obtenção de flexibilidade e adaptabilidade da solução. Além disso, um estudo de casos no domínio de empresas virtuais é apresentado. Resumo. Many researchers have been claimed that the multiagent approach is suitable for the development of complex software systems. Many works have been proposed to apply the multiagent approach on large scale software development. However, the dynamic feature of the system and the flexibility and adaptability of the solution have not been considered. This work presents an engineering infrastructure for software development through a multiagent approach, named COMPOR. This infrastructure represents a set of guidelines and tools to develop software for complex, open and dynamic systems. In order to illustrate its usefulness, the development of a complex virtual enterprise application is presented. 1. Introdução: problemática, objetivo e contribuições Muitos pesquisadores têm apontado a abordagem multiagentes como adequada ao desenvolvimento de sistemas de software complexos [Jennings 2001, Zambonelli et al. 2003]. De acordo com esta abordagem, um sistema de software deve ser visto como uma organização de agentes autônomos como abstração para gerenciar a sua complexidade. Neste contexto, a Engenharia de Software baseada em Agentes [Jennings 2001] tem como objetivo disponibilizar metodologias, ferramentas e infra-estruturas gerenciáveis para permitir o desenvolvimento de sistemas multiagentes em larga escala. Contudo, em se tratando de software, os requisitos definidos em primeira instância de análise tendem a ser refinados ou alterados com a iteração do ciclo de desenvolvimento. Em relação à abstração multiagentes, isto se reflete na alteração dos relacionamentos dos Mestre pelo Departamento de Sistemas e Computação, Universidade Federal de Campina Grande (Suportado pela CAPES). O segundo e o terceiro autores foram orientadores do trabalho. XVIII CTD 80
agentes e na entrada ou saída de agentes no sistema. Muitos investimentos em Engenharia de Software para prover ferramentas e metodologias para a utilização da abordagem multiagentes em larga escala têm sido realizados. Porém, na maioria destes trabalhos, o impacto da alteração ou refinamento dos requisitos sobre o software não é levado em conta. Sendo assim, os relacionamentos entre os agentes do sistema não se alteram e novos agentes não podem passar a fazer parte do sistema ou, quando tais características são providas, isto não é refletido para as fases de projeto e implementação do software. Em resumo, o desenvolvimento do software não reflete a realidade de cenários evolutivos, cada vez mais presentes no contexto de engenharia de software. Neste trabalho tem-se como objetivo disponibilizar uma infra-estrutura de engenharia, denominada COMPOR, para o desenvolvimento de software para sistemas complexos, abertos e dinâmicos, através de uma abordagem multiagentes. Trata-se de um conjunto de diretrizes e ferramentas para o desenvolvimento de software com foco na obtenção de flexibilidade e adaptabilidade. Estas diretrizes devem guiar o desenvolvedor desde a análise do problema até a implementação do software, com o auxílio das ferramentas computacionais desenvolvidas no contexto do COMPOR. A integração das diretrizes com as ferramentas também representa uma contribuição relevante em relação aos diversos trabalhos relacionados, detalhados em [Almeida 2004], que focalizam apenas alguns aspectos específicos do desenvolvimento de software para sistemas multiagentes. Mais especificamente, pode-se dividir este objetivo principal nos seguintes objetivos específicos, os quais constituem as contribuições deste trabalho e que são apresentados nas próximas seções do artigo: 1. Disponibilização de um conjunto de diretrizes de análise, projeto, implementação e testes para o desenvolvimento de software para sistemas multiagentes, levandose em conta as características de dinamicidade destes sistemas, decorrente da alteração nos seus requisitos. 2. Disponibilização de um modelo de componentes para estabelecer regras sobre a composição de funcionalidades dos agentes. O modelo deve permitir a troca de funcionalidades e componentes com o mínimo de impacto sobre o restante do agente, garantindo assim uma maior flexibilidade na solução proposta. 3. Desenvolvimento de um arcabouço baseado em componentes que implemente as especificações do modelo de componentes definido anteriormente. 4. Desenvolvimento de um ambiente integrado para a construção de software para sistemas multiagentes utilizando como base o arcabouço definido anteriormente. O ambiente também deve contemplar ferramentas para monitoramento e execução do software desenvolvido. 5. Desenvolvimento de uma aplicação no contexto de empresas virtuais, enfatizando a utilidade da infra-estrutura definida anteriormente, como um estudo de caso. 2. Diretrizes metodológicas - COMPOR-M As diretrizes metodológicas COMPOR-M (Methodology) têm como objetivo reduzir a distância entre análise, projeto e a implementação do software multiagentes. Para tanto, são contempladas quatro fases clássicas do desenvolvimento de software: análise, projeto, implementação e testes. O desenvolvimento é iterativo/incremental e não está vinculado a nenhum modelo de desenvolvimento. As diretrizes determinam apenas as atividades de cada fase, com transições seguindo a seqüência clássica de desenvolvimento de software. XVIII CTD 81
Fase de Análise: as diretrizes de análise são baseadas na análise de domínio MATHEMA [Costa et al. 1998]. Suas diretrizes foram generalizadas para englobar os diversos domínios de aplicação de sistemas multiagentes. Em síntese, as diretrizes de análise guiam o desenvolvedor na análise do domínio do problema, particionado em contextos, em busca das habilidades necessárias para a resolução do problema. As habilidades, suas dependências e os contextos a que pertencem são descritas através de um Diagrama de Habilidades [Almeida 2004]. Fase de Projeto: uma vez identificadas as habilidades necessárias em cada contexto para a resolução do problema, pode-se então definir o projeto arquitetural da sociedade de agentes, assim como a arquitetura interna de cada agente. O resultado da aplicação das diretrizes de projeto são representados em um Diagrama de Agentes [Almeida 2004], apresentando uma visão da arquitetura de agentes, e em um Diagrama de Componentes [Almeida 2004], com o projeto interno de cada agente. Fase de Implementação: na fase de implementação, assim como acontece no Desenvolvimento Baseado em Componentes, os componentes identificados na fase de projeto, caso não existam, devem ser implementados. A implementação dos novos componentes deve ser feita com base no modelo de componentes descrito na Seção 3.. Após a implementação de todos os componentes definidos na fase de projeto, o componente Planejador de cada agente é definido. O Planejador é um script de execução de cada agente que coordenará as suas funcionalidades e suas ações em relação à sociedade. Fase de Testes: o investimento na fase de testes vem se tornando indispensável no desenvolvimento de software. Como visto anteriormente, as funcionalidades dos agentes são providas pelos componentes e, sendo assim, testes em cada um dos componentes tornamse independentes dos testes dos agentes e da sociedade como um todo. As diretrizes englobam os testes de serviços, testes de dependências dos componentes de um agente e testes de dependências entre os agentes da sociedade. 3. Modelo de componentes - COMPOR-CM Embora o modelo COMPOR-CM (Component Model) [Costa et al. 2003] tenha sido criado para dar suporte à arquitetura de agentes COMPOR, também é aplicável a outros tipos de sistemas. O modelo tem base no princípio de que a inexistência de referências explícitas, ou diretas, entre provedores de funcionalidades tem como conseqüência uma maior flexibilidade na inserção, remoção e alteração destes provedores, inclusive em tempo de execução. Sistemas que possuem esta flexibilidade como requisito podem utilizar o modelo COMPOR-CM, ainda que não se utilizem da abordagem de agentes. Dois tipos de entidade são definidas em COMPOR-CM: os contêineres e os componentes funcionais. Os componentes funcionais implementam as funcionalidades do sistema, disponibilizando-as em forma de serviços. Os componentes funcionais não são compostos por outros componentes, ou seja, não possuem componentes-filhos. Os contêineres, por sua vez, não implementam funcionalidades, apenas gerenciam o acesso aos serviços dos seus componentes-filhos. No modelo COMPOR-CM são definidos modelos de especificação e interação entre componentes, assim como um processo de disponibilização de componentes [Almeida 2004]. A seguir, apresenta-se o modelo de interação baseada em serviços. XVIII CTD 82
Modelo de interação baseada em serviços: após a inserção de um componente em um determinado contêiner, seus serviços tornam-se disponíveis a qualquer outro componente do sistema. Sendo assim, supondo a existência do serviço salvar implementado pelo componente K, pode-se solicitar a execução deste serviço a partir de um componente X, sem fazer referência a K. Este processo é apresentado na Figura 1, onde pode-se verificar que não há referência alguma entre o componente solicitante do serviço ( X ) e o componente provedor do mesmo ( K ). Desta forma, é possível alterar o componente que provê o serviço salvar sem modificar o restante da estrutura. 3 O Contêiner 2 então encaminha a solicitação ao seu contêiner-pai (Contêiner 1) 2 O Contêiner 2 verifica, de acordo com sua tabela de serviços, que nenhum dos seus componentes-filhos implementa o serviço salvar salvar? Serviço calcular imprimir Componente X Y 4 O Contêiner 1 verifica, de acordo com sua tabela de serviços, que um de seus componentes-filhos implementa o serviço salvar (Contêiner 3). Para o Contêiner 1, o Contêiner 3 é visto como um componente que implementa o serviço. Contêiner 2 Serviço Componente calcular Contêiner 2 imprimir Contêiner 2 salvar Contêiner 3 Contêiner 1 5 O Contêiner 1 então encaminha a solicitação de serviço para o Contêiner 3. Contêiner 3 6 O Contêiner 3 não implementa o serviço mas possui em sua tabela uma referência ao real implementador do serviço - componente K. Serviço Componente salvar K 1 O componente X solicita a execução do serviço salvar ao seu contêiner-pai X Y K Não há referência entre X e K 7 O Contêiner 3 então encaminha a solicitação de serviço para o componente funcional K, que executa o serviço salvar e retorna o resultado da execução. Figura 1. Interação baseada em serviços: localização e execução sem referência entre componentes funcionais 4. Arcabouço baseado em componentes - COMPOR-F O arcabouço COMPOR-F (Framework) [Almeida et al. 2004] implementa as especificações do modelo de componentes COMPOR-CM. COMPOR-F tem seu projeto baseado no padrão Composite [Gamma et al. 1995]. As classes FunctionalComponent e Container são instanciadas, respectivamente, em componentes funcionais e contêineres, os quais são conceitualizados no modelo COMPOR-CM. A interface ComponentIF garante a composição recursiva, permitindo que os contêineres desconheçam a implementação dos seus componentes-filhos, que podem ser tanto componentes funcionais como outros contêineres. A implementação da arquitetura de agentes é então definida como uma extensão das classes Container e FuncionalComponent. A classe Agent estende a classe Container gerenciando o acesso a seus componentes filhos e permitindo a troca de componentes em tempo de execução. Os modelos de classe da arquitetura de componentes e agentes são detalhados em [Almeida 2004]. 5. Ambiente de desenvolvimento - COMPOR-E Para automatizar o processo de desenvolvimento e tornar mais eficiente a utilização do arcabouço COMPOR-F, um ambiente integrado para o desenvolvimento de sistemas mul- XVIII CTD 83
tiagentes foi construído. O ambiente COMPOR-E (Environment) [Almeida et al. 2003] possui um conjunto de ferramentas para auxiliar o desenvolvedor nas diversas fases de concepção de um software utilizando a abordagem multiagentes (Ver Figura 2). Para isso, o ambiente se baseia nas diretrizes definidas na Seção 2., dando suporte às fases de análise, projeto, implementação, testes e gerência de execução [Almeida 2004]. Figura 2. Ambiente de desenvolvimento 6. Estudo de caso - Empresa virtual Para ilustrar a aplicabilidade da infra-estrutura de Engenharia de Software proposta neste trabalho, apresenta-se a utilização do COMPOR no desenvolvimento de um sistema de empresa virtual. Por restrições de espaço, a descrição do sistema e seu desenvolvimento usando a infra-estrutura COMPOR foram omitidos deste artigo, sendo detalhados em [Almeida 2004]. 7. Considerações finais Este trabalho constituiu-se em uma investigação sobre o tema Engenharia de Software para Sistemas Multiagentes, tendo como ponto de partida resultados obtidos no mencionado ambiente MATHEMA. Nesta perspectiva, foi proposta uma infra-estrutura de engenharia para o desenvolvimento de sistemas de software complexos. Os objetivos descritos foram alcançados tendo como contribuições principais as diretrizes, modelo de componentes, arcabouço e ambiente de desenvolvimento apresentados. Estas contribuições foram publicadas separadamente em congressos nacionais e internacionais, assim como a infra-estrutura como um todo, publicada em revista. Esta dissertação foi apresentada, a convite, no Workshop de Teses e Dissertações (WTES/SBES 2003) como um dos três melhores trabalhos do evento. As referências e demais detalhes sobre o trabalho podem ser encontradas no próprio documento da dissertação, disponível, em versão eletrônica, em http://www.dee.ufcg.edu.br/ hyggo/dissertacao.zip. Além disso, o trabalho deu origem a um projeto de pesquisa, denominado COM- POR. Dentro do contexto deste projeto, seja para utilização, validação ou formalização XVIII CTD 84
da infra-estrutura, tem-se: cinco trabalhos de conclusão de graduação (sendo quatro concluídos), três dissertações de mestrado (sendo três concluídos) e uma tese de doutorado, sendo realizada pelo autor deste trabalho. Referências Almeida, H. O. (2004). COMPOR - Desenvolvimento de Software para Sistemas Multi- Agentes. Dissertação de Mestrado, Universidade Federal de Campina Grande, Campina Grande, Brasil. Almeida, H. O., Loureiro, E., Ferreira, G. V., Paes, R. B., Perkusich, A., and Costa, E. B. (2003). Ambiente integrado para o desenvolvimento de sistemas multi-agentes. In Proceedings of Simpósio Brasileiro de Engenharia de Software - Sessão de ferramentas - SBES 2003, volume 17, páginas 55 60, Manaus, Brasil. Almeida, H. O., Perkusich, A., Costa, E. B., and Paes, R. B. (2004). COMPOR: a Methodology, a Component Model, a Component based Framework and Tools to Build Multiagent Systems. CLEI Electronic Journal, 7(1). Costa, E. B., Almeida, H. O., Paes, R. B., and Perkusich, A. (2003). COMPOR: a Component-based Framework for building Multi-agent Systems. In Proceedings of 2nd International Workshop on Software Engineering for Large-Scale Multi-agent Systems - on ICSE 2003 - Portland - EUA, páginas 84 89. Costa, E. B., Perkusich, A., and Ferneda, E. (1998). From a Tridimensional view of Domain Knowledge to Multi-agent Tutoring System. In Proceedings of 14th Brazilian Symposium on Artificial Intelligence - Lecture notes on artificial intelligence, LNAI 1515, volume 991, páginas 61 72, Porto Alegre, Brasil. Springer Verlag. Gamma, E., Helm, R., Johnson, R., and Vlissides, J. (1995). Design Patterns: Elements of Reusable Object-oriented Software. Addison-Wesley. Jennings, N. R. (2001). An agent-based approach for building complex software systems. Commun. ACM, 44(4):35 41. Zambonelli, F., Jennings, N. R., and Wooldridge, M. (2003). Developing multiagent systems: The Gaia methodology. ACM Trans. Softw. Eng. Methodol., 12(3):317 370. XVIII CTD 85