Upload
internet
View
108
Download
0
Embed Size (px)
Citation preview
2 © LES/PUC-Rio
Paradigmas de Engenharia de Software
• Um software possui um conjunto de partes, ou componentes, que executam e geram interações.
• Um paradigma deve oferecer modelos e técnicas que facilitam o tratamento da complexidade.
• São exemplos de paradigmas contemporâneos: Orientação a Objetos, Orientação a Aspectos, Orientação a Componentes, etc.
3 © LES/PUC-Rio
Complexidade
• Um sistema de software complexo é composto de subsistemas inter-relacionados.
• Interação é a característica mais importante em sistemas complexos.
• Complexidade em sistemas de software é normalmente estrutural: a adição de novos componentes vai gradualmente degradando a estrutura do sistema 1
1. R.D. Banker, S. Datar & D. Zweig. Software Complexity and Maintainability. Proceedings of the Tenth International Conference on Information Systems, 1989, pp. 247-255.
4 © LES/PUC-Rio
Complexidade
• Os sistemas desenvolvidos atualmente tendem a ser
– abertos
– distribuídos e
– compostos por diversos componentes que interagem uns com os outros e que sofrem alterações dinamicamente com a entrada de novos componentes e a saída de componentes já existentes
• Esses componentes podem possuir objetivos diferentes e, portanto conflitantes.
• Esses fatos aumentam ainda mais a complexidade dos sistemas atuais.
5 © LES/PUC-Rio
Complexidade
• Algumas das técnicas utilizadas para tratar a complexidade de sistemas distribuídos são:
– Decomposição
– Abstração
– Organização
• Decomposição: Sistemas complexos devem ser compostos por um conjunto de sub-sistemas organizados de forma hierárquica. Os subsistemas devem trabalhar em conjunto para atingir os objetivos do sistema.
• Abstração: Definição de modelos simplificados do sistema que enfatize alguns detalhes e propriedades, limitando a área de interesse (escopo) do desenvolvedor em um determinado momento.
6 © LES/PUC-Rio
Complexidade
• Organização: Sistemas complexos exigem relações organizacionais.
• As organizações permitem agrupar componentes de acordo com algum critério (i.e. família de problemas a serem resolvidos) e tratá-los como se fossem uma única entidade,
• Permite estabelecer relações de alto nível entre essas entidades (i.e. relações entre os problemas a serem resolvidos).
7 © LES/PUC-Rio
Tendências
• O conceito de “programa” tem dado lugar ao conceito de “organizações” e, com isso, a conceitos derivados como “colaboração” e “bases de conhecimento”.
• Além disso, as características dos sistemas devem levar em consideração as necessidades dos tempos atuais:
– Sistemas distribuídos
– Arquitetura aberta
– Sistemas extensíveis
– Crescimento da Internet
– Utilização de ontologias (Web Semântica)
8 © LES/PUC-Rio
Evolução de Paradigmas
Tempo
• Linguagens Assembly
• Abstração Funcional
• Programação Estruturada
• Orientação a Objetos
• Componentes
• Design Patterns
• ...
• Agentes de Software
Abstrações com bases conceituais determinadas pela arquitetura da máquina
Abstrações com bases conceituais determinadas pelo domínio do problema
9 © LES/PUC-Rio
Agentes de Software
• Um agente de software é uma entidade que faz parte de um sistema (sociedade de agentes) e que pode perceber aspectos limitados de seu ambiente de execução 1.
• Agente é um elemento cuja execução e interação (com outros agentes e com o ambiente) levam ao alcance dos objetivos do sistema 2 .
• Agente é uma unidade de software autônoma situada em um ambiente e capaz de executar ações para atingir seus objetivos.
1. G.F. Luger & W.A. Stubblefield. Artificial intelligence: structures and strategies for complex problem solving. 3.ed. Massachusetts: Addison-Wesley Longman, 1998. 824p.
2. M.N. Huhns & L.M. Stephens. Multiagent systems and societies of agents. In: G. Weiss (ed.) Multiagent systems. Massachussests: MIT Press, 2000, pp. 79-120.
10 © LES/PUC-Rio
Características de Agentes
• Os agentes são considerados entidades solucionadoras de problemas e devem ser:
• Autônomo: Agentes devem agir sem a necessidade de intervenção humana direta e devem ter controle sobre suas ações e seus estados internos.
• Reativo: Agentes devem perceber o ambiente onde estão situados e responder a mudanças ocorridas neste ambiente.
• Pró-ativo: Agentes devem possuir um comportamento oportunista, orientado a objetivos, executando suas ações sempre que oportuno.
11 © LES/PUC-Rio
Características de Agentes
• Social: Agentes devem interagir com outros agentes, quando apropriado, com o intuito de atingir seus objetivos ou de ajudar outros agentes.
• Intencional: Agentes devem ter a intenção de realizar uma tarefa. Para agentes agirem de forma intencional, eles devem possuir crenças (conhecimento sobre o ambiente) e objetivos a serem atingidos.
• Essas características são apropriadas para que as técnicas que tratam complexidade, citadas anteriormente (decomposição, abstração e organização), sejam utilizadas.
12 © LES/PUC-Rio
Agentes de Software
• Agentes autônomos podem ser considerados componentes de software que possuem as características apresentadas.
• Agentes podem ser utilizados como uma técnica de decomposição e modularização, com controle descentralizado, além de representarem abstrações para problemas existentes.
• Reatividade e próatividade tratam aspectos dinâmicos e imprevisíveis de um sistema complexo e aberto.
• Por fim, habilidades sociais estão fortemente relacionadas com questões organizacionais, já que é através delas que será possível tratar as dependências e interações entre os componentes (organizações) de um sistema complexo.
13 © LES/PUC-Rio
Características Adicionais
• Adaptação
– São capazes de modificar, em algum grau, o seu comportamento devido à mudanças do ambiente e de outros agentes (autonomic computing: self*)
• Aprendizado
– São capazes de modificar o seu comportamento baseados em sua experiência
• Racionalidade
– São capazes de selecionar suas ações baseados em seus objetivos
• Mobilidade
– São capazes de se mover de um ambiente para outro
14 © LES/PUC-Rio
Sistemas Multi-Agentes
• Um agente em geral não é encontrado completamente sozinho em uma aplicação, mas formando em conjunto com outros agentes: Sistemas Multi-Agentes (SMA).
• O paradigma de Engenharia de Software para SMA oferece:
– uma abstração para o desenvolvimento de software baseada no domínio do problema;
– um método de decomposição;
– um modo apropriado para a modelagem de sistemas como um conjunto de organizações que se relacionam;
– uma descentralização que reduz a quantidade de interação entre unidades.
15 © LES/PUC-Rio
Situações para Aplicar Agentes
• 50 Facts about Agent-Based Computing (Professor Michael Luck)
16 © LES/PUC-Rio
17 © LES/PUC-Rio
18 © LES/PUC-Rio
19 © LES/PUC-Rio
20 © LES/PUC-Rio
21 © LES/PUC-Rio
22 © LES/PUC-Rio
23 © LES/PUC-Rio
24 © LES/PUC-Rio
Estado da Arte
• Engenharia de SMA em exploração.
• Principais estudos em nível de experimentação, através de estudos de caso.
• Desenvolvimento de uma ES para o paradigma: análise de requisitos, linguagem de modelagem, processo, arquitetura de desenvolvimento, ferramentas, etc.
25 © LES/PUC-Rio
Exemplos de Aplicações de SMA
• Mercado Financeiro
• Reputação (Comércio Eletrônico)
• Autonomic Computing (self*)
• Linha de Produto de Software
• Competições do AAMAS (ART-Testbed, TACs, etc)
26 © LES/PUC-Rio
Bibliografia
• Jennings, N. R. An agent-based approach for building complex software systems. Communications of the ACM, Volume 44, Issue 4, April 2001. Pages: 34-41
• Jennings, N. R; Wooldridge, M. Agent-Oriented Software Engineering. In: Proceedings 12th Int. Conf. on Industrial and Engineering Applications of AI, Cairo, Egypt, 4-10. (Invited paper) (1999)
• Jennings, N., R.; Wooldridge, M. Applications of Intelligent Agents. Agent Technology: Foundations, Applications, and Markets. Jennings, N.R. and Wooldridge, M.J (Eds.), Springer, pp. 3-28 (1998).
• Agent Link Home Page, www.agentlink.org.
Perguntas?