2. Migração de Sistemas OO para OA

Tamanho: px
Começar a partir da página:

Download "2. Migração de Sistemas OO para OA"

Transcrição

1 Uma Abordagem para Reengenharia de Sistemas implementados em Java para AspectJ Daniel Kawakami 1, Ricardo Argenton Ramos 2, Rosângela Ap. Penteado 1 1 Departamento de Computação Universidade Federal de São Carlos (UFSCar) 2 Centro de Informática - Universidade Federal de Pernambuco (UFPE) Abstract. The concern with the improvement of systems is constant by the developers. This work presents a method of reengineering of systems written in Java to AspectJ language. The identification of crosscutting concerns of persistence and logging, existing in Java code, is performed using an Indication model based on syntax analyses. Both identification and reorganization of code to AspectJ use a computational support, named ReJAsp, developed as a plug-in belonging to Eclipse environment. Studies of observation are presented in order to demonstrate method importance. Resumo. A preocupação com a melhoria de sistemas é constante por parte dos desenvolvedores. Este trabalho apresenta uma abordagem de reengenharia para sistemas implementados em Java para AspectJ. A identificação de indícios de interesses transversais de persistência e de logging, existentes no código Java é realizada por meio de um Modelo de Indícios com base em análise sintática. Tanto a identificação quanto a reestruturação do código para AspectJ utilizam um apoio computacional, ReJAsp, desenvolvido como um plug-in do ambiente Eclipse. Estudo de observação são apresentados para ilustrar a abordagem apresentada.

2 1. Introdução O paradigma de orientação a objetos permite a separação clara de interesses primários (core concerns). Entretanto, alguns problemas ainda persistem como, por exemplo, a não separação de interesses transversais (crosscutting concerns) que se apresentam espalhados e misturados por diversos módulos do sistema. Exemplos desses são: persistência em banco de dados, tratamento de exceção, controle de concorrência, rastreamento, autenticação, controle de acesso, entre outros. Os interesses transversais, quando espalhados e entrelaçados são difíceis de serem localizados e alterados, tornando o sistema complexo e reduzindo sua qualidade quanto à adaptabilidade, manutenibilidade e reusabilidade [Satiroğlu 2004]. A Programação Orientada a Aspectos (POA) [Kiczales et al 1997] é uma forma para tratar os interesses transversais por meio da especificação de aspectos, isto é, mecanismos para a localização de expressões que contêm interesses transversais e a separação desses dos interesses primários (core concerns). Os principais benefícios da POA são: a construção de sistemas mais modulares e reutilizáveis, maior legibilidade do código-fonte e, conseqüentemente, aumento da manutenibilidade. O Desenvolvimento de Software Orientado a Aspectos (DSOA) [AOSD ] é uma opção para que engenheiros de software organizem melhor os artefatos produzidos desde o documento de requisitos [Rashid et al 2002] até a implementação [Kiczales et al 1997] e testes de software [Elrad et al 2001]. Por ser uma linha de pesquisa ainda em evolução, a maioria dos esforços está concentrado na fase da implementação e projeto. Atualmente, a linguagem de POA mais popular e consolidada é a AspectJ sendo empregada em projetos reais para a otimização de plataforma middleware, monitoramento e melhoria de desempenho, adição de interesses de segurança em aplicações existentes e implementação de Integração de Aplicação Coorporativa (Enterprise Application Integration) [Laddad 2003]. Todos esses projetos evidenciam a redução da quantidade de linhas de código e do tempo necessário para a elaboração de produtos. Reengenharia de software pode ser aplicada para realizar manutenção preventiva de sistemas [Pressman 2006]. Assim, sistemas Orientados a Objetos (OO) com problemas inerentes de espalhamento e entrelaçamento de interesses transversais podem ser migrados para um novo sistema Orientado a Aspectos. O comportamento externo do sistema resultante deve ser equivalente ao original, mas sua legibilidade e manutenibilidade são melhoradas, devido à centralização de código-fonte pertencente a um mesmo interesse transversal, antes espalhada por todo o sistema. Para viabilizar a reengenharia desses sistemas é necessária a existência de métodos e ferramentas que o apóiem. Nesse sentido, Aspecting [Ramos 2004] surgiu como uma abordagem sistemática para auxiliar engenheiros de software na identificação de candidatos a aspectos, denominados de indícios e implementação dos interesses transversais de modo modular. Para isso, a abordagem requer a execução de um conjunto de diretrizes pelo engenheiro de software, tendo como entrada um sistema escrito em Java, gerando outro equivalente implementado na linguagem AspectJ.

3 Este artigo apresenta aprimoramentos da abordagem Aspecting, por meio da definição do Modelo de Indícios e de diretrizes de identificação de indícios e de reestruturação de código-fonte, baseadas neste modelo. Essa nova representação de indícios facilita a construção de um apoio computacional que automatize parte das atividades executadas na abordagem Aspecting, favorecendo a reengenharia de um sistema legado implementado em Java para AspectJ. A Seção 2 discute questões referentes à migração de sistemas OO para OA com o uso da abordagem Aspecting. Na Seção 3 os aprimoramentos realizados na Aspecting são comentados. Na seção 4 são feitas considerações quanto à forma de busca utilizada pela abordagem Aspecting e aos aprimoramentos nela realizados. Essas considerações justificam a criação de um apoio computacional que utiliza o Modelo de Indícios e as diretrizes para identificação e reestruturação de sistemas. Na Seção 5 um apoio computacional, denominado ReJAsp (Reengenharia de sistemas Java para AspectJ) é descrito. A avaliação do ReJAsp, realizada por estudos de observação, é apresentada na Seção 6. Alguns trabalhos relacionados são comparados com ReJAsp na Seção 7 e as considerações finais estão na Seção Migração de Sistemas OO para OA A abordagem Aspecting [Ramos 2004, Ramos et al 2004] auxilia na identificação de alguns interesses transversais que se apresentam espalhados e entrelaçados em diversos módulos de um sistema escrito em Java e, em seguida, possibilita sua implementação em AspectJ. Para o entendimento da funcionalidade do sistema OO são usados diagramas de casos de uso e de classes de projeto. Os interesses existentes são descobertos com o uso da Lista de Indícios (Tabela 1) e, posteriormente, são modelados como aspectos em um diagrama de classes de projeto. A Aspecting tem 3 passos: 1) A criação de diagrama de casos de uso e de diagrama de classes de projeto, caso não exista, para representar a funcionalidade do sistema legado; 2) O tratamento dos interesses que pesquisa, em cada classe implementada no código legado, a existência de possíveis indícios de interesses transversais. Para cada indício encontrado, o trecho deve ser marcado no código fonte e adicionado um número seqüencial que indica a ordem em que esse trecho aparece na classe. No diagrama de classes de projeto o interesse relacionado ao indício encontrado é adicionado e, posteriormente, deve ser feita a sua implementação em AspectJ, seguindo diretrizes elaboradas para esse fim; 3) A comparação do sistema OO com o OA é realizada utilizando os casos de uso inicialmente construídos para garantir que a funcionalidade original do sistema foi preservada. Alguns sistemas simples foram utilizados para validação das diretrizes da Aspecting quando da realização de reengenharia manual [Ramos et al 2004]. Sistemas de maior complexidade demandam maior esforço e não há garantias que o código produzido em AspectJ seja totalmente isento de interesses transversais espalhados entre as classes, se um apoio computacional não for utilizado durante o processo. Com esse objetivo algumas modificações foram realizadas na Aspecting, principalmente em relação à criação do Modelo de Indícios, e são comentadas a seguir.

4 Tabela 1 Lista Parcial de Indícios criada na Aspecting [Ramos, 2004] Interesse Indícios 1)Persistência em <i.persistencia.bd> = 'Connection' <statements> 'Connection'<statements><SQL> Banco de Dados <SQL><statements>'Connection' 'PreparedStatement'<statements> 'PreparedStatement' <statements> <SQL> <SQL><statements>'PreparedStatement' 'ResultSet'<statements> 'ResultSet' <statements> <SQL> <SQL> <statements> 'ResultSet' 2) Persistência em memória temporária (Buffering) <i.persistência.mem.temp> = 'BufferredReader' <statements> 'new' 'BufferredReader' '(' <statements> ')' 'StringBuffer' <statements> 'new' 'StringBuffer' '(' <statements> ')' 'BufferedInputStream' <statements> 'new' 'BufferedInputStream' '(' <statements> ')' 3. Aprimoramento da abordagem Aspecting A Lista de Indícios apresenta uma característica em comum nas gramáticas livre de contexto (GLC) para os interesses de persistência em banco de dados e de persistência em memória temporária: a utilização de tipos (classes e interfaces) de pacotes específicos da API do JDK, Java 2 Platform Standard Edition Development Kit [Java Technology 2007]. Para que esses tipos possam ser utilizados corretamente em um apoio computacional há necessidade de incluir também suas instruções de importação na Lista de Indícios. O Modelo de Indícios extensão da abordagem Aspecting, Figura 1, é aplicado ao tratamento de indícios relacionados à importação, declaração e uso de variáveis de um conjunto de tipos. Com base nesse modelo foram criadas diretrizes específicas de identificação e de reestruturação o que possibilita melhor precisão nos resultados, com o uso de análise sintática do código, diferindo-se da Abordagem Aspecting que apenas verifica o conteúdo léxico. Além disso, o maior nível de detalhamento das diretrizes propostas, quando comparado com as diretrizes originais, torna a reengenharia mais disciplinada e menos propensa a erros cometidos pelo engenheiro de software. Na Aspecting são definidas diretrizes específicas para cada interesse transversal tratada por esta abordagem. Por outro lado, as diretrizes propostas neste trabalho são sempre as mesmas, independente do interesse transversal tratado. Isso acontece porque as diretrizes processam informações contidas no Modelo de Indícios. Desde que os interesses transversais estejam devidamente representados no Modelo de Indícios, as diretrizes aplicadas não variam. Alguns dos tipos indicados na Lista de Indícios foram identificados e formatados segundo o Modelo de Indícios e novos tipos foram incorporados. Para os indícios de persistência em banco de dados foram incluídos tipos pertencentes ao pacote java.sql além dos tipos já existentes: Connection, PreparedStatement e ResultSet. Originalmente os indícios de interesse de memória temporária estavam relacionados à declaração e à alocação de objetos do tipo BufferedReader, StringBuffer e BufferedInputStream. O primeiro e terceiro tipo podem ser utilizados no código-fonte mediante a importação do pacote java.io da API do JDK e o outro tipo é pertencente ao pacote java.lang. Entretanto, Deursen et al (2003) afirmam que o tipo FileOutputStream, pertencente ao pacote java.io, também é utilizado para a

5 implementação de persistência em memória temporária. Por esse motivo, esse tipo foi incorporad o ao Modelo de Indícios de persistência em memória temporária. Figura 1. Modelo de Indícios Por outro lado, o interesse de Logging, ausente da Aspecting original, foi acrescentado ao Modelo de Indícios, sendo associado à coleta de informações referentes aos eventos ocorridos durante a execução de um sistema, registrando datas e/ou horas de eventos. Pode auxiliar na realização de testes ou no diagnóstico de falhas de sistema. Essas informações, normalmente, encontram-se espalhadas pelos vários módulos do sistema e entrelaçadas com outros interesses, caracterizando-as como interesse transversal. A linguagem Java permite a utilização de tipos com o mesmo nome desde que pertençam a pacotes diferentes, o que pode levar à seleção de falsos indícios na abordagem Aspecting. Por exemplo, uma implementação de um sistema desktop que faça sincronização de dados com um dispositivo embarcado possui o tipo Connection associado às conexões estabelecidas com esse dispositivo, induzindo aos falsos indícios de persistência em banco de dados, visto que Connection também é o nome do tipo existente na API do JDK, responsável por estabelecer conexão com um banco de dados. Uma maneira encontrada para contornar a identificação desses falsos indícios é a associação de tipos aos seus pacotes, permitindo diferenciar tipos distintos com mesmo nome. Por esse motivo, o Modelo de Indícios relaciona os tipos identificados por IndicationType na Figura 1, com pacotes representados por IndicationPackage, tornando o mecanismo de identificação mais confiável. A Lista de Indícios original da abordagem Aspecting [Ramos 2004] sugere buscas por meio de análise léxica, que consiste em realizar uma varredura pelo código até encontrar um conjunto / padrão de caracteres, que inclui os caracteres pertencentes às palavras reservadas da linguagem, comentários, nomes e valores de variáveis, entre outros. Dessa forma, pode-se obter quantidade elevada de falsos indícios de aspectos considerando que as buscas incluem comentários aos resultados, mesmo que esses não interfiram na execução do programa. Outro ponto é quanto a buscas em conteúdos de variáveis de cadeia de caracteres (strings), que na maioria das vezes não traz pistas significativas de aspectos.

6 A melhoria do processo de identificação de indícios pode ser viabilizada pela utilização de um mecanismo baseado em análise sintática do código-fonte. Para isso, o Modelo de Indícios foi criado e proporciona a função de armazenamento de informações de indícios usadas para realizar a mineração de aspectos, de modo a facilitar as buscas por análise sintática do código, a fim de que novas ferramentas possam implementar o mecanismo de identificação de interesses transversais. Na Figura 1, o Modelo de Indícios, representado por um diagrama de classes em UML, especifica: a) Indication, a classe principal que representa um conjunto de indícios referentes a um mesmo interesse transversal; b) IndicationPackage, pacote contido em cada conjunto de indícios (Indication); c) IndicationClass, armazena informações de classes cuja declaração e uso de seus objetos são considerados indícios; d) IndicationInterface, aplicável a interfaces que representem indícios; e) IndicationException são classes especializadas do tipo Exception e usadas no tratamento de exceção das operações realizadas por objetos com indícios; e) MatchText armazena algumas regras de buscas que apóiam as identificações de padrões de cadeias de caracteres. 4. Abordagem de Reengenharia de Java para AspectJ A abordagem de reengenharia aqui proposta é iterativa e consiste na identificação de interesses transversais e posterior implementação do sistema legado para uma linguagem que permita especificar aspectos, neste caso AspectJ. Os interesses transversais contemplados pelo Modelo de Indícios são: persistência em banco de dados, logging e persistência em memória temporária. Um apoio computacional, denominado ReJAsp (Reengenharia de sistemas Java Para AspectJ)[Kawakami 2007] foi criado usando esse modelo e será apresentado na seção seguinte. Na primeira etapa de reconhecimento de tipos, cada instrução de importação de tipo existente no código é verificada, sendo que os tipos usados e seus respectivos pacotes são obtidos. Cada tipo importado é, comparado com os tipos e pacotes existentes no Modelo de Indícios. Os tipos importados encontrados no Modelo de Indícios são posteriormente usados na etapa de identificação de indícios. A etapa de reconhecimento de tipos permite que apoios computacionais apresentem melhor desempenho, pois, ao invés de fazer a busca de todos os tipos existentes no Modelo de Indícios no código, apenas o subconjunto de tipos identificados na importação são considerados. Além disso, essa etapa é fundamental na determinação de falsos indícios de tipos que apresentem o mesmo nome daqueles existentes no Modelo de Indícios, porém localizados em pacotes diferentes. A melhoria de desempenho se torna mais evidente para sistemas que apresentem grande quantidade de arquivos. Caso nenhum tipo importado exista no Modelo de Indícios durante a primeira etapa, os passos da etapa posterior não são executados. Dentre esses passos, a construção da AST (Abstract Syntax Tree árvore abstrata sintática) é aquele com maior consumo de processamento. Para cada classe e interface, uma AST é gerada e percorrida, ainda na identificação de indícios. Assim, indícios são buscados nos ramos da árvore com declaração de objetos (declaração de atributos, de constantes e de variáveis locais) e em

7 instruções em código. Em seguida, os indícios são agrupados em instruções e cadastrados para posteriormente serem tratados. Cada indício identificado é analisado pelo engenheiro de software, para classificá-lo como um falso indício ou um aspecto propriamente dito. Para esse segundo caso, diretrizes de reestruturação de código-fonte devem ser aplicadas. Essas diretrizes têm o objetivo de gerar sugestões de implementação, para transferir os aspectos encontrados no código Java para um módulo de aspectos apropriado, em AspectJ. Para isso, a introdução de atributos e de métodos pode ser feita a partir de declarações intertipos e as instruções podem ser separadas por conjuntos de junção e adendos. 5. Apoio Computacional para a Reengenharia Proposta A reengenharia manual de sistemas Java para AspectJ consome muitos esforços mesmo seguindo as diretrizes apresentadas na seção anterior. Assim, um apoio computacional para automatizar parte dessas atividades foi idealizado na tentativa de minimizar os estorços e os erros inseridos pelos próprios engenheiros de software. Esse apoio computacional é denominado ReJAsp (Reengenharia de sistemas Java para AspectJ), desenvolvido com o modelo de processo de prototipação, com duas iterações, sendo esta segunda implementada como um plug-in do ambiente Eclipse [Eclipse 2007]. O mecanismo de identificação de indícios utiliza as bibliotecas do plug-in JDT, que permite a navegação e manipulação do código-fonte por meio de uma estrutura de dados similar à AST. As diretrizes propostas são possíveis de serem executadas de modo parcialmente automatizado. Os resultados da identificação de indícios são mostrados na visão de árvore de indícios, apresentada na Figura 2. (1) Raiz: é o nó principal da árvore de indício cujo rótulo identifica o nome do projeto selecionado; (2) Códigos-base ("Base Codes"): tem a função de agregar os pacotes, os arquivos escritos em "java" e os indícios de aspecto; (3) Aspecto ("Aspect"): possibilita o acesso a arquivos de aspecto e aos pacotes que contém tais arquivos; (4) Pacotes: correspondem a nós agregados dos de códigos-base e dos de aspectos. Representam os pacotes utilizados na linguagem Java ou em AspectJ. Devido à possibilidade de um mesmo diretório conter arquivos de classes (".java") e de Figura 2. Árvore de indícios aspectos (".aj"), um nó de pacote pode

8 coexistir tanto no nó de códigos-base quanto no nó de aspectos; (5) Pacotes vazios: posteriormente podem ser compostos por arquivos de extensão "java" ou "aj". Nesse caso, sua categoria passa de pacote vazio para simplesmente pacote; (6) Arquivos Java: podem ou não conter outros nós de indícios, (7) Arquivos de Aspecto: arquivos de aspecto (".aj") do sistema, podem estar contidos no nó de aspectos ou em um de seus pacotes. Esses nós não apresentam nós agregados; (8) Indícios: instruções ou trechos de instruções que contém indícios (candidatos) de aspectos. Estão diretamente relacionados com os nós de arquivos Java, mas não agregam outros nós. Antes de iniciar a reengenharia, é possível verificar no ReJAsp quais modos de reestruturação de código são mais apropriados para serem aplicados ao indício: a) introdução de atributos, b) introdução de métodos, c) extração de início de método e d) extração de fim de método. Em trabalhos anteriores Ramos et al (2004) e Binkley et al (2006) usaram desenvolvimento por c) e d). Essa tarefa é realizada com assistentes (wizard) do apoio computacional, sendo que ajustes manuais no código-fonte podem ser necessários. A seguir, estudos de observação envolvendo ReJAsp são descritos e seus resultados discutidos. 6. Estudos de Observação Para que o ReJAsp possa ser avaliado qualitativamente foram conduzidos estudos de observação utilizando sistemas de informação de pequeno porte implementados em Java. Esse estudo foi divido em duas etapas: uma em que os desenvolvedores realizaram a reengenharia manualmente e outra em que utilizaram o apoio computacional ReJAsp. O objetivo dos estudos foi observar a usabilidade do apoio computacional e a possível redução de tempo na reengenharia com o seu uso. Para a formação dos grupos foram aplicados questionários elaborados a fim de obter informações quanto ao conhecimento de cada desenvolvedor em relação à linguagem Java, programação orientada a aspectos, AspectJ, Eclipse. Os estudos de observação foram realizados por 4 grupos de 3 a 4 desenvolvedores com conhecimentos intermediários em Java e básico em POA. Paralelamente, dois outros desenvolvedores com conhecimento avançados em Java e em POA também participaram do estudo, entretanto, realizaram as tarefas individualmente. Essa atividade ocorreu como parte de uma disciplina de pós-graduação em que o tema Aspectos foi um entre os vários apresentados durante o semestre. Para a avaliação da usabilidade do ReJAsp, eficácia do identificador de indícios, praticidade de assistentes, utilidade do visualizador de indícios e da documentação para uso 1 foi elaborado um questionário e distribuído aos grupos e aos desenvolvedores isolados logo no início do estudo. Uma planilha também foi preenchida pelos desenvolvedores registrando os tempos gastos com a reengenharia realizada tanto de 1 Guia do usuário disponível em

9 modo manual e quanto assistida pelo apoio computacional ReJAsp. Esses tempos incluem a quantidade de horas usadas para o entendimento do código do sistema legado e também o de implementação em AspectJ do sistema. 6.1 Resultados Obtidos com os Estudos de Observação As respostas obtidas a partir da aplicação dos questionários aos desenvolvedores, que participaram dos estudos de observação, indicaram como um ponto forte a visualização dos indícios do apoio computacional. Os assistentes de reestruturação de código foram usados na maioria das vezes e foram classificados como fáceis de usar pela maioria dos desenvolvedores. A idéia inicial de comparar o tempo gasto entre o processo de reengenharia manual e com apoio computacional foi possível somente para um dos quatro sistemas usados, devido ao insucesso na aplicação reengenharia dos sistemas por alguns grupos. Segundo as respostas ao questionário, pôde-se inferir que o apoio computacional proporciona economia de tempo na atividade de reengenharia de sistemas legados. Entretanto, não foi possível estimar diretamente essa economia com os registros de tempos apresentados nas planilhas confeccionadas pelos grupos, devido ao pouco conhecimento da maioria dos desenvolvedores com desenvolvimento orientado a aspectos e a linguagem AspectJ. Ainda em relação a esse ponto, é interessante notar que de acordo com os dados obtidos, um dos sistemas teve seu tempo menor na reengenharia manual do que utilizando ReJAsp. Esse resultado inesperado é explicado quando a quantidade de indícios coletada das duas formas é comparada. Manualmente, a quantidade de indícios no código base se manteve igual ao do legado, devido à separação de poucos aspectos e com a inserção de novos aspectos pelo grupo. Com apoio computacional, obteve-se maior sucesso na separação de indícios, devido à diminuição da sua quantidade no sistema que passou por reengenharia. Assim, a melhor qualidade do sistema pode justificar o tempo adicional gasto no segundo estudo, sendo que a utilização do ReJAsp, contribuiu para a separação mais efetiva dos aspectos. Os resultados obtidos pelos estudos realizados individualmente não constataram economia de tempo com a utilização do ReJAsp. Com o seu uso foi possível o tratamento de número maior de aspectos e, conseqüentemente, a geração de um sistema mais manutenível. Também nota-se que o tempo gasto para reengenharia de um indício a aspectos é reduzido significativamente quando o apoio computacional é utilizado. Por outro lado, calculando os tempos de reengenharia gastos por indícios, isto é, calculados a partir da divisão do tempo total de reengenharia pela quantidade de indícios tratados, é verificado que os menores tempos estão associadas ao uso do ReJAsp. Outra vantagem observada com a realização desses estudos refere-se à identificação e à visualização de indícios conferida pelo apoio computacional, permitindo que os desenvolvedores estejam cientes dos possíveis candidatos a aspectos. Em contrapartida, o desconhecimento de indícios remanescentes no código contribui para a finalização precoce das atividades de reengenharia do sistema, mantendo grande número de aspectos espalhados e entrelaçados pelo sistema. 7. Trabalhos Relacionados Além da abordagem Aspecting, existem outros trabalhos que auxiliam a identificação de indícios ou candidatos a aspectos (mineração de aspectos). AspectBrowser [Griswold

10 et al 2000] é uma ferramenta desenvolvida como plug-in do ambiente Eclipse e permite a visualização dos indícios no código-fonte, mediante a definição prévia de expressões regulares, definidas pelo usuário no padrão grep. Os resultados são visualizados em barras verticais, assemelhando-se com a representação gráfica da visão Aspect Visualization, contida no plug-in AJDT [AspectJ Development Tools 2007]. O ponto fraco dessa ferramenta é a utilização de buscas léxicas pelo código-fonte, possibilitando a ocorrência de uma quantidade considerável de falsos indícios. A ferramenta AMT, Aspect Mining Tool [Hannemann e Kiczales 2001], emprega duas técnicas distintas: mineração de aspectos baseada em texto e em tipo. A primeira depende da presença de convenções de nomenclaturas de tipos, métodos, variáveis e classes. A outra reconhece a declaração de tipos e seus objetos, não dependendo de convenções de nomes no código. Os tipos analisados na AMT não são associados a pacotes, possibilitando maior ocorrência de falsos indícios, e esse é o diferencial entre ela e o apoio computacional para ReJAsp, aqui apresentado. AMT, também, não é integrada a um ambiente de desenvolvimentos integrado, sendo necessário utilizar uma versão muito antiga do JDK. A navegação e a visualização de indícios no apoio computacional apresentado são realizadas com base na árvore de indícios. Uma alternativa poderia ser o uso de JQuery [Janzen e Volder 2003] que permite a busca de subconjuntos específicos de elementos do código-fonte, inclusive candidatos a aspectos. JQuery combina características de navegadores hierárquicos e exploração do código com a especificação de linguagens de consultas. O ponto negativo dela é sua usabilidade, pois a definição de consultas demanda conhecimento de sua linguagem, dificultando o seu uso. Além disso, Jazen e Volder (2003) afirmam que JQuery não provê apoio direto à manipulação de aspectos. Nesse sentido, a árvore de indícios e os assistentes existentes em ReJAsp apresentam maior facilidade de uso e maior enfoque nas atividades de identificação e reestruturação de aspectos. Breu et al (2006) defendem que os aspectos emergem com o tempo e, para isso, propõem que a identificação de indícios pode ser baseada no histórico do sistema de versões CVS (do inglês, Concurrent Version System), ao invés de apenas uma única versão de software como é observado nos métodos convencionais. O processo de identificação de indícios verifica a freqüência com que a chamada dos métodos é realizada e as mais freqüentes são consideradas indícios. Esse método foi desenvolvido em um protótipo denominado HAM, com a desvantagem de não estar integrado a nenhum ambiente de desenvolvimento. O experimento conduzido pelos autores em sistemas pequenos e com histórico do CVS reduzido obteve baixa precisão, em torno de 60% de acerto. Como não existem garantias de que o sistema legado seja mantido pelo CVS ou que modificações não sejam feitas com freqüência, pode ser discutível a utilização da HAM. Nesse ponto, o apoio computacional apresentado na Seção 5 tem a vantagem de integração com o IDE Eclipse e precisão na identificação de indícios independente da utilização de um sistema de controle de versão e do tamanho do sistema legado. Com o enfoque diferente das demais ferramentas apresentadas, AOP Migrator [Binkley et al 2006] tem o objetivo de refatorar sistemas em Java de modo iterativo. Para isso, contempla o apoio às refatorações de extração de: início/fim de método/tratamento de exceção, início/fim de chamada; condicional, pré-retorno,

11 wrapper e tratamento de exceção. A sua instalação depende de versões antigas do IDE Eclipse e do plug-in AJDT. Em contrapartida, ReJAsp tem a vantagem ser utilizado em versões mais atuais do Eclipse e do AJDT, além de ter a função de identificação de indícios, não contemplada no AOP Migrator. 8. Considerações Finais e Trabalhos Futuros O apoio computacional para reengenharia de sistemas legados, ReJAsp, foi construído como um plug-in para o ambiente opensource Eclipse, com o objetivo de reduzir esforços de manutenção e erros na detecção de indícios de aspectos. Dessa forma, é possível identificar os interesses transversais e implementá-los em AspectJ. As alterações realizadas na Aspecting foram não só quanto à modificação no modo de identificação de indícios da léxica para a sintática, mas também quanto ao detalhamento das diretrizes. Assim, é possível encontrar indícios de forma genérica a partir dos tipos especificados no Modelo de Indícios, enquanto que com a Lista de Indícios existe um algoritmo para cada interesse transversal. Os assistentes de reestruturação de código-fonte desenvolvidos no ReJAsp auxiliam na criação de um novo módulo de aspecto por meio da introdução de atributos e de métodos com indícios para esse módulo ou separação de instruções contidas no início ou final de métodos. Os indícios obtidos são automaticamente reconhecidos pelos assistentes de reestruturação do código-fonte, resultando em economia de tempo. Outras vantagens que se destacam no apoio computacional são: Modelo de Indícios existente contendo três categorias de indícios e persistência das categorias de indícios em arquivo XML, que permite manter cópias de segurança, importação e exportação de categorias de indícios entre ambientes Eclipse diferentes em máquinas distintas. Dentre os trabalhos futuros, destacam-se a adição de novas categorias de indícios; aumento da quantidade de assistentes de reestruturação de código-fonte; cadastro de indícios pelo contexto da árvore de indícios, isto é, via seleção de pacotes, classes ou interfaces a partir da árvore de indícios, de modo a criar ou atualizar uma categoria de indícios rapidamente; inclusão de informações semânticas ao Modelo de Indícios para obtenção de resultados mais precisos; entre outras. Referências Bibliográficas AOSD.06 Home Page (2006). AspectJ Development Tools Home Page (2007). Binkley, D., Ceccato, M., Harman, M., Ricca, F., and Tonella, P. (2006) Tool- Supported Refactoring of Existing Object-Oriented Code into Aspects. In: IEEE Transactions on Software Engineering, vol. 32, nº. 9. Breu, S., Zimmermann, T., and Lindig, C. (2006) "Aspect Mining for Large Systems". In: Companion to the 21st Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2006, Portland, OR, USA. Deursen, A. V., Marin, M., Moonen, L. (2003) "Aspect Mining and Refactoring". In: Proceedings First International Workshop on REFactoring: Achievements, Challenges, Effects (REFACE). University of Waterloo.

12 Eclipse Home Page (2007). Elrad, T., Filman, R., Bader, A. (2001) "Aspect-Oriented Programming". In: Anais do ACM. Griswold, W., Kato, Y., and Yuan, J. (2000) "Aspect Browser: Tool Support for Managing Dispersed Aspects". In: Workshop on Multi-Dimensional Separation of Concerns (ICSE), Ireland.Hannemann, J., and Kiczales, G. (2001) "Overcoming the Prevalent Decomposition in Legacy Code". In: Position paper for workshop on Advanced Separation of Concerns, International Conference on Software Engineering (ICSE). Hannemann, J., Kiczales, G. (2001) "Overcoming the Prevalent Decomposition in Legacy Code". In: Workshop on Advanced Separation of Concerns in Software Engineering at (ICSE), Toronto. Janzen, D., and Volder, K. D. (2003). Navigating and querying code without getting lost. In: Aspect-Oriented Software Engineering, pages ACM. Java Technology Home Page (2007). Kawakami, D. (2007) Um Apoio Computacional para auxiliar a Reengenharia de Sistemas Legados Java para AspectJ. Dissertação de mestrado apresentada ao PPG- CC, UFSCar, Kiczales, G., Lamping, J., Mendhekar, A. (1997) "RG: A Case-Study for Aspect- Oriented Programming". In: SPL97. Xerox Palo Alto Research Center, Technical Report. Laddad, R. (2003) "AspectJ in Action: Pratical Aspect-Oriented Programming". In: Manning Publications Company, Connecticut - USA. 512 p. Pressman, R. S. (2006) "Engenharia de Softawre 6. ed. Brasil, McGraw Hill. Ramos, R. A. (2004) Abordagem Aspecting: Migração de Sistemas OO para Sistemas AO. Mastering Thesis. Departamento de Computação, Universidade Federal de São Carlos. Ramos, R. A., Penteado, R. A. D., Masiero, P. C. (2004) Migração de Sistemas OO para Sistemas OA com a abordagem Aspecting. In: Simpósio Brasileiro de Engenharia de Software (SBES), Brasília DF. Rashid, A., Sawyer, P., Moreira, A. e Araújo, J. (2002) "Early Aspects. A Model for Aspect-Oriented Requirements Engineering". In: Conference on Requirements Engineering, Essen, Germany. Satiroglu, Y. (2004) Aspect-Oriented Evolution of Legacy Information Systems. Mastering Thesis, Departamento de Engenharia de Computação e Instituto de Engenharia e Ciências da Universidade de Bilkent, p

Identificação de Interesses Transversais: Uma Visão Geral

Identificação de Interesses Transversais: Uma Visão Geral Identificação de Interesses Transversais: Uma Visão Geral Paulo Afonso Parreira Júnior paulojunior@jatai.ufg.br 24 de Maio de 2013 Agenda Breve Histórico sobre Desenvolvimento de Software Separação de

Leia mais

Aspect-Oriented Programming AOP. Comentários Sérgio Crespo

Aspect-Oriented Programming AOP. Comentários Sérgio Crespo Aspect-Oriented Programming AOP Comentários Sérgio Crespo Separation of Concerns O princípio de Separation of Concerns já é utilizado por engenheiros de software para o gerenciar a complexidade de sistemas

Leia mais

GeCA: Uma Ferramenta de Engenharia Reversa e Geração Automática de Código

GeCA: Uma Ferramenta de Engenharia Reversa e Geração Automática de Código GeCA: Uma Ferramenta de Engenharia Reversa e Geração Automática de Código Igor Steinmacher 1, Éderson Fernando Amorim 1, Flávio Luiz Schiavoni 1, Elisa Hatsue Moriya Huzita 1 1 Departamento de Informática

Leia mais

Programação Orientada a Aspectos

Programação Orientada a Aspectos Programação Orientada a Aspectos Uma Breve Introdução Universidade Estadual do Oeste do Paraná Centro de Ciências Exatas e Tecnológicas Colegiado de Informática Prof. Luiz Antonio Roteiro Introdução Evolução

Leia mais

Requisitos de Ferramentas Especializadas de Gestão de Configuração de Software

Requisitos de Ferramentas Especializadas de Gestão de Configuração de Software Requisitos de Ferramentas Especializadas de Gestão de Configuração de Software Ricardo Terra 1 1 Departamento de Ciência da Computação Universidade Federal de Minas Gerais (UFMG) Campus da Pampulha 31.270-010

Leia mais

3.1 Baseado em operações

3.1 Baseado em operações 23 3. Estado da Arte Algumas das ferramentas de controle de versão comerciais mais conhecidas atualmente são: Concurrent Version System (CVS) [CEDERQVIST, 1993], Microsoft Visual SourceSafe (MVSS) [MICROSOFT,

Leia mais

Reuso. Curso de Especialização DEINF - UFMA Desenvolvimento Orientado a Objetos Prof. Geraldo Braz Junior

Reuso. Curso de Especialização DEINF - UFMA Desenvolvimento Orientado a Objetos Prof. Geraldo Braz Junior Reuso Curso de Especialização DEINF - UFMA Desenvolvimento Orientado a Objetos Prof. Geraldo Braz Junior Reutilização de Software Na maioria das áreas de engenharia de software, sistemas são desenvolvidos

Leia mais

Introdução à Engenharia de Software

Introdução à Engenharia de Software Introdução à Engenharia de Software Professor: Rômulo César romulodandrade@gmail.com www.romulocesar.com.br Imagem Clássica Objetivo da aula Depois desta aula você terá uma visão sobre o que é a engenharia

Leia mais

Tópicos em Engenharia de Software (Optativa III) AULA 2. Prof. Andrêza Leite andreza.lba@gmail.com (81 )9801-6619

Tópicos em Engenharia de Software (Optativa III) AULA 2. Prof. Andrêza Leite andreza.lba@gmail.com (81 )9801-6619 Tópicos em Engenharia de Software (Optativa III) AULA 2 Prof. Andrêza Leite andreza.lba@gmail.com (81 )9801-6619 Engenharia de Software Objetivo da aula Depois desta aula você terá uma revisão sobre o

Leia mais

Introdução à Plataforma Eclipse. Leandro Daflon daflon@les.inf.puc-rio.br

Introdução à Plataforma Eclipse. Leandro Daflon daflon@les.inf.puc-rio.br Introdução à Plataforma Eclipse Leandro Daflon daflon@les.inf.puc-rio.br Agenda Introdução Arquitetura da Plataforma Componentes da Plataforma JDT PDE Visão Geral do Projeto Eclipse.org 2 Introdução O

Leia mais

Engenharia de Software Introdução. Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1

Engenharia de Software Introdução. Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1 Engenharia de Software Introdução Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1 Tópicos Apresentação da Disciplina A importância do Software Software Aplicações de Software Paradigmas

Leia mais

Engenharia Reversa para Recuperação de Modelos de Sistemas Desenvolvidos em PL/SQL

Engenharia Reversa para Recuperação de Modelos de Sistemas Desenvolvidos em PL/SQL Engenharia Reversa para Recuperação de Modelos de Sistemas Desenvolvidos em PL/SQL Rodnei Couto 1, Luana Lachtermacher 1, Soeli Fiorini 1, Akeo Tanabe 1, Gustavo Carvalho 1, Arndt von Staa 1, Ricardo Choren

Leia mais

Gerenciamento de Configuração de Software

Gerenciamento de Configuração de Software Gerenciamento de Configuração de Software Prof. Ricardo Argenton Ramos [Baseado na apresentação do prof. Masiero ICMC-USP] Contexto para Gerência de Configuração 2 Problema dos Dados Compartilhados Desenvolvedor

Leia mais

Ciência da Computação ENGENHARIA DE SOFTWARE. Análise dos Requisitos de Software

Ciência da Computação ENGENHARIA DE SOFTWARE. Análise dos Requisitos de Software Ciência da Computação ENGENHARIA DE SOFTWARE Análise dos Requisitos de Software Prof. Claudinei Dias email: prof.claudinei.dias@gmail.com Roteiro Introdução Tipos de requisitos Atividades Princípios da

Leia mais

Desenvolvimento de Sistemas Orientados a Objetos com UML UP/RUP: Projeto

Desenvolvimento de Sistemas Orientados a Objetos com UML UP/RUP: Projeto Desenvolvimento de Sistemas Orientados a Objetos com UML UP/RUP: Projeto Engenharia de Software I Informática 2009 Profa. Dra. Itana Gimenes RUP: Artefatos de projeto Modelo de Projeto: Use-Case Realization-projeto

Leia mais

Table 1. Dados do trabalho

Table 1. Dados do trabalho Título: Desenvolvimento de geradores de aplicação configuráveis por linguagens de padrões Aluno: Edison Kicho Shimabukuro Junior Orientador: Prof. Dr. Paulo Cesar Masiero Co-Orientadora: Prof a. Dr. Rosana

Leia mais

MARACATU. A component search tool. Especificação, Projeto e Implementação de uma Arquitetura para um Engenho de Busca de Componentes

MARACATU. A component search tool. Especificação, Projeto e Implementação de uma Arquitetura para um Engenho de Busca de Componentes MARACATU A component search tool Especificação, Projeto e Implementação de uma Arquitetura para um Engenho de Busca de Componentes Vinicius Cardoso Garcia July 29, 2005 Agenda Introdução Especificação

Leia mais

Rational Quality Manager. Nome: Raphael Castellano Campus: AKXE Matrícula: 200601124831

Rational Quality Manager. Nome: Raphael Castellano Campus: AKXE Matrícula: 200601124831 Rational Quality Manager Nome: Raphael Castellano Campus: AKXE Matrícula: 200601124831 1 Informações Gerais Informações Gerais sobre o RQM http://www-01.ibm.com/software/awdtools/rqm/ Link para o RQM https://rqmtreina.mvrec.local:9443/jazz/web/console

Leia mais

Ferramenta de apoio a gerência de configuração de software. Aluno: Rodrigo Furlaneto Orientador: Everaldo Artur Grahl

Ferramenta de apoio a gerência de configuração de software. Aluno: Rodrigo Furlaneto Orientador: Everaldo Artur Grahl Ferramenta de apoio a gerência de configuração de software Aluno: Rodrigo Furlaneto Orientador: Everaldo Artur Grahl Roteiro de apresentação Introdução Objetivos Fundamentação Teórica Gerência de Configuração

Leia mais

Softwares de Sistemas e de Aplicação

Softwares de Sistemas e de Aplicação Fundamentos dos Sistemas de Informação Softwares de Sistemas e de Aplicação Profª. Esp. Milena Resende - milenaresende@fimes.edu.br Visão Geral de Software O que é um software? Qual a função do software?

Leia mais

Transformação de um Modelo de Empresa em Requisitos de Software

Transformação de um Modelo de Empresa em Requisitos de Software Transformação de um Modelo de Empresa em Requisitos de Software Fábio Levy Siqueira 1 and Paulo Sérgio Muniz Silva 2 1 Programa de Educação Continuada da Poli-USP, São Paulo, Brazil 2 Escola Politécnica

Leia mais

Ontologia Aplicada ao Desenvolvimento de Sistemas de Informação sob o Paradigma da Computação em Nuvem

Ontologia Aplicada ao Desenvolvimento de Sistemas de Informação sob o Paradigma da Computação em Nuvem Ontologia Aplicada ao Desenvolvimento de Sistemas de Informação sob o Paradigma da Computação em Nuvem Luiz Cláudio Hogrefe Orientador: Prof. Roberto Heinzle, Doutor Roteiro Introdução Fundamentação teórica

Leia mais

Um processo para construção de software mais transparente

Um processo para construção de software mais transparente Um processo para construção de software mais transparente Eduardo Almentero 1, and Julio Cesar Sampaio do Prado Leite 1 1 Pontifícia Universidade Católica do Rio de Janeiro, PUC - Rio, Brasil {ealmentero,

Leia mais

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIAS DA COMPUTAÇÃO BACHARELADO AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS Orientando: Oliver Mário

Leia mais

CASE Orientada a Objetos com Múltiplas Visões e Implementação Automática de Sistemas - MVCASE

CASE Orientada a Objetos com Múltiplas Visões e Implementação Automática de Sistemas - MVCASE CASE Orientada a Objetos com Múltiplas Visões e Implementação Automática de Sistemas - MVCASE Tathiana da Silva Barrére Antonio Francisco do Prado Vitor César Bonafe E-mail: (tathiana,prado,bonafe)@dc.ufscar.br

Leia mais

Engenharia de Software

Engenharia de Software CENTRO UNIVERSITÁRIO NOVE DE JULHO Profº. Edson T. França edson.franca@uninove.br Software Sistemas Conjunto de elementos, entre os quais haja alguma relação Disposição das partes ou dos elementos de um

Leia mais

7 Trabalhos Relacionados A idéia é tentar dar todas as informações que ajudem os outros a julgar o valor da sua contribuição; não apenas as informações que levem o julgamento a uma direção em particular.

Leia mais

Programa do Módulo 2. Processo Unificado: Visão Geral

Programa do Módulo 2. Processo Unificado: Visão Geral 9.1 Programa do Módulo 2 Orientação a Objetos Conceitos Básicos Análise Orientada a Objetos (UML) O Processo Unificado (RUP) Processo Unificado: Visão Geral 9.2 Encaixa-se na definição geral de processo:

Leia mais

ARQUITETURA DE SISTEMAS. Cleviton Monteiro (cleviton@gmail.com)

ARQUITETURA DE SISTEMAS. Cleviton Monteiro (cleviton@gmail.com) ARQUITETURA DE SISTEMAS Cleviton Monteiro (cleviton@gmail.com) Roteiro Definição Documento de arquitetura Modelos de representação da arquitetura Estilos arquiteturais Arquitetura de sistemas web Arquitetura

Leia mais

Software de gerenciamento do sistema Intel. Guia do usuário do Pacote de gerenciamento do servidor modular Intel

Software de gerenciamento do sistema Intel. Guia do usuário do Pacote de gerenciamento do servidor modular Intel Software de gerenciamento do sistema Intel do servidor modular Intel Declarações de Caráter Legal AS INFORMAÇÕES CONTIDAS NESTE DOCUMENTO SÃO RELACIONADAS AOS PRODUTOS INTEL, PARA FINS DE SUPORTE ÀS PLACAS

Leia mais

5 Mecanismo de seleção de componentes

5 Mecanismo de seleção de componentes Mecanismo de seleção de componentes 50 5 Mecanismo de seleção de componentes O Kaluana Original, apresentado em detalhes no capítulo 3 deste trabalho, é um middleware que facilita a construção de aplicações

Leia mais

Introdução. à Linguagem JAVA. Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação. Laboratório de Visão Computacional

Introdução. à Linguagem JAVA. Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação. Laboratório de Visão Computacional Introdução à Linguagem JAVA Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação Laboratório de Visão Computacional Vantagens do Java Independência de plataforma; Sintaxe semelhante às linguagens

Leia mais

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia. 1 Introdução aos Sistemas de Informação 2002 Aula 4 - Desenvolvimento de software e seus paradigmas Paradigmas de Desenvolvimento de Software Pode-se considerar 3 tipos de paradigmas que norteiam a atividade

Leia mais

TÍTULO: ELICITAÇÃO DE REQUISITOS DE INTEGRIDADE PARA SISTEMAS SEGUROS UTILIZANDO ASPECTOS E DOMÍNIOS

TÍTULO: ELICITAÇÃO DE REQUISITOS DE INTEGRIDADE PARA SISTEMAS SEGUROS UTILIZANDO ASPECTOS E DOMÍNIOS TÍTULO: ELICITAÇÃO DE REQUISITOS DE INTEGRIDADE PARA SISTEMAS SEGUROS UTILIZANDO ASPECTOS E DOMÍNIOS CATEGORIA: CONCLUÍDO ÁREA: CIÊNCIAS EXATAS E DA TERRA SUBÁREA: COMPUTAÇÃO E INFORMÁTICA INSTITUIÇÃO:

Leia mais

Programação Orientada a Aspectos Aplicada. Charles Wellington de Oliveira Fortes chalkmaster@gmail.com

Programação Orientada a Aspectos Aplicada. Charles Wellington de Oliveira Fortes chalkmaster@gmail.com Programação Orientada a Aspectos Aplicada. Charles Wellington de Oliveira Fortes chalkmaster@gmail.com Resumo: Demonstrar de forma clara e prática como a Programação Orientada a Aspectos pode ajudar a

Leia mais

UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES

UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES 1 BRANCO; Guido Aparecido Junior, 2 TAMAE, Rodrigo Yoshio 1-Discente do Curso Sistemas de Informação FAEG/Garça 2-Docente do Curso Sistemas

Leia mais

MAPEAMENTO OBJETO RELACIONAL: UM ESTUDO DE CASO

MAPEAMENTO OBJETO RELACIONAL: UM ESTUDO DE CASO MAPEAMENTO OBJETO RELACIONAL: UM ESTUDO DE CASO UTILIZANDO O HIBERNATE Rafael Laurino GUERRA, Dra. Luciana Aparecida Martinez ZAINA Faculdade de Tecnologia de Indaiatuba FATEC-ID 1 RESUMO Este artigo apresenta

Leia mais

UM ESTUDO SOBRE ARQUITETURA PARA DESENVOLVIMENTO DE SOFTWARE WEB UTILIZANDO NOVAS TECNOLOGIAS

UM ESTUDO SOBRE ARQUITETURA PARA DESENVOLVIMENTO DE SOFTWARE WEB UTILIZANDO NOVAS TECNOLOGIAS UM ESTUDO SOBRE ARQUITETURA PARA DESENVOLVIMENTO DE SOFTWARE WEB UTILIZANDO NOVAS TECNOLOGIAS Edi Carlos Siniciato ¹, William Magalhães¹ ¹ Universidade Paranaense (Unipar) Paranavaí PR Brasil edysiniciato@gmail.com,

Leia mais

PROFESSOR: CRISTIANO MARIOTTI

PROFESSOR: CRISTIANO MARIOTTI PROFESSOR: CRISTIANO MARIOTTI Conjunto de atividades, parcialmente ordenadas, com a finalidade de obter um produto de software; Considerado um dos principais mecanismos para se obter software de qualidade

Leia mais

Tópicos. Engenharia de Software: Uma Visão Geral

Tópicos. Engenharia de Software: Uma Visão Geral Tópicos 2 3 Engenharia de Software: Uma Visão Geral SCE 186 - Engenharia de Software Profs. José Carlos Maldonado e Elisa Yumi Nakagawa 2 o semestre de 2002 A importância do Software Software Aplicações

Leia mais

SISTEMA DE GESTÃO DE PROJETOS DE SOFTWARE - SGPS

SISTEMA DE GESTÃO DE PROJETOS DE SOFTWARE - SGPS SISTEMA DE GESTÃO DE PROJETOS DE SOFTWARE - SGPS Lilian R. M. Paiva, Luciene C. Oliveira, Mariana D. Justino, Mateus S. Silva, Mylene L. Rodrigues Engenharia de Computação - Universidade de Uberaba (UNIUBE)

Leia mais

Pós Graduação Engenharia de Software

Pós Graduação Engenharia de Software Pós Graduação Engenharia de Software Ana Candida Natali COPPE/UFRJ Programa de Engenharia de Sistemas e Computação FAPEC / FAT Estrutura do Módulo Parte 1 QUALIDADE DE SOFTWARE PROCESSO Introdução: desenvolvimento

Leia mais

SISTEMAS OPERACIONAIS. Apostila 03 Estrutura do Sistema Operacional UNIBAN

SISTEMAS OPERACIONAIS. Apostila 03 Estrutura do Sistema Operacional UNIBAN SISTEMAS OPERACIONAIS Apostila 03 Estrutura do Sistema Operacional UNIBAN 1.0 O Sistema Operacional como uma Máquina Virtual A arquitetura (conjunto de instruções, organização de memória, E/S e estrutura

Leia mais

Separaçã. ção Multi-Dimensional de Interesses

Separaçã. ção Multi-Dimensional de Interesses OD 2002 Uma nova abordagem para modelagem de requisitos Separaçã ção Multi-Dimensional de Interesses Helder da Rocha (helder@acm.org) argonavis.com.br Objetivos 1. Discutir as limitações existentes no

Leia mais

Autor(es) BARBARA STEFANI RANIERI. Orientador(es) LUIZ EDUARDO GALVÃO MARTINS, ANDERSON BELGAMO. Apoio Financeiro PIBIC/CNPQ. 1.

Autor(es) BARBARA STEFANI RANIERI. Orientador(es) LUIZ EDUARDO GALVÃO MARTINS, ANDERSON BELGAMO. Apoio Financeiro PIBIC/CNPQ. 1. 19 Congresso de Iniciação Científica ESPECIFICAÇÃO E IMPLEMENTAÇÃO DE UMA FERRAMENTA AUTOMATIZADA DE APOIO AO GERSE: GUIA DE ELICITAÇÃO DE REQUISITOS PARA SISTEMAS EMBARCADOS Autor(es) BARBARA STEFANI

Leia mais

CURSO DESENVOLVEDOR JAVA Edição Intensiva de Férias

CURSO DESENVOLVEDOR JAVA Edição Intensiva de Férias CURSO DESENVOLVEDOR JAVA Edição Intensiva de Férias O curso foi especialmente planejado para os profissionais que desejam trabalhar com desenvolvimento de sistemas seguindo o paradigma Orientado a Objetos

Leia mais

Engenharia de Software Introdução. Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1

Engenharia de Software Introdução. Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1 Engenharia de Software Introdução Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1 Tópicos Apresentação da Disciplina A importância do Software Software Aplicações de Software Paradigmas

Leia mais

EMENTAS DAS DISCIPLINAS

EMENTAS DAS DISCIPLINAS EMENTAS DAS DISCIPLINAS CURSO EDUCAÇÃO A DISTÂNCIA (EAD) SISTEMAS PARA INTERNET INTRODUÇÃO À COMPUTAÇÃO 68 A disciplina estuda a área da informática como um todo e os conceitos fundamentais, abrangendo

Leia mais

Qualidade de Software

Qualidade de Software Qualidade de Software O software é algo abstrato, pois são as instruções que quando executadas atingem o propósito desejado no sistema computacional. (Algoritmo). As principais características são: Complexidade:

Leia mais

José Benedito Lopes Junior ¹, Marcello Erick Bonfim 2

José Benedito Lopes Junior ¹, Marcello Erick Bonfim 2 ISBN 978-85-61091-05-7 Encontro Internacional de Produção Científica Cesumar 27 a 30 de outubro de 2009 Definição de uma tecnologia de implementação e do repositório de dados para a criação da ferramenta

Leia mais

Engenharia de Software I

Engenharia de Software I Engenharia de Software I Rogério Eduardo Garcia (rogerio@fct.unesp.br) Bacharelado em Ciência da Computação Aula 05 Material preparado por Fernanda Madeiral Delfim Tópicos Aula 5 Contextualização UML Astah

Leia mais

REVISÃO ENGENHARIA DO SOFTWARE. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

REVISÃO ENGENHARIA DO SOFTWARE. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com REVISÃO ENGENHARIA DO SOFTWARE Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com Software Sequencia de Instruções a serem seguidas ou executadas Dados e rotinas desenvolvidos por computadores Programas

Leia mais

EMENTA DO CURSO. Tópicos:

EMENTA DO CURSO. Tópicos: EMENTA DO CURSO O Curso Preparatório para a Certificação Oracle Certified Professional, Java SE 6 Programmer (Java Básico) será dividido em 2 módulos e deverá ter os seguintes objetivos e conter os seguintes

Leia mais

A Semi-Automatic Strategy to Identify Crosscutting Concerns in PL-AOVgraph Requirement Models

A Semi-Automatic Strategy to Identify Crosscutting Concerns in PL-AOVgraph Requirement Models Universidade Federal do Rio Grande do Norte Departamento de Informática e Matemática Aplicada Natal/RN - Brasil A Semi-Automatic Strategy to Identify Crosscutting Concerns in PL-AOVgraph Requirement Models

Leia mais

PLATAFORMA DE DESENVOLVIMENTO PINHÃO PARANÁ MANUAL DE UTILIZAÇÃO DO CVS NO ECLIPSE

PLATAFORMA DE DESENVOLVIMENTO PINHÃO PARANÁ MANUAL DE UTILIZAÇÃO DO CVS NO ECLIPSE PLATAFORMA DE DESENVOLVIMENTO PINHÃO PARANÁ MANUAL DE UTILIZAÇÃO DO CVS NO ECLIPSE Agosto 2007 Sumário de Informações do Documento Tipo do Documento: Manual Título do Documento: MANUAL DE UTILIZAÇÃO DO

Leia mais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP) Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,

Leia mais

Identificando a Formação de Ilhas de Conhecimento em Projetos de Software

Identificando a Formação de Ilhas de Conhecimento em Projetos de Software Identificando a Formação de Ilhas de Conhecimento em Projetos de Software Francisco Vanderson de Moura Alves 1, Pedro de Alcântara dos Santos Neto 1, Werney Ayala Luz Lira 1, Ricardo de Andrade Lira Rabêlo

Leia mais

GuiBi: Um aplicativo para plataforma Android com um guia comercial da cidade de Bambuí MG

GuiBi: Um aplicativo para plataforma Android com um guia comercial da cidade de Bambuí MG GuiBi: Um aplicativo para plataforma Android com um guia comercial da cidade de Bambuí MG Bruno Alberto Soares Oliveira 1,3 ; Lucas Vieira Murilo 1,3 ; Maik Olher Chaves 2,3 1 Estudante de Engenharia de

Leia mais

Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos

Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos Francisco José da Silva e Silva Laboratório de Sistemas Distribuídos (LSD) Departamento de Informática / UFMA http://www.lsd.deinf.ufma.br

Leia mais

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi Metodologias de Desenvolvimento de Sistemas Analise de Sistemas I UNIPAC Rodrigo Videschi Histórico Uso de Metodologias Histórico Uso de Metodologias Era da Pré-Metodologia 1960-1970 Era da Metodologia

Leia mais

Sistemas Operacionais

Sistemas Operacionais UNIVERSIDADE BANDEIRANTE DE SÃO PAULO INSTITUTO POLITÉCNICO CURSO DE SISTEMAS DE INFORMAÇÃO Sistemas Operacionais Notas de Aulas: Tópicos 7 e 8 Estrutura do Sistema Operacional São Paulo 2009 1 Sumário

Leia mais

Requisitos de Software

Requisitos de Software Requisitos de Software Centro de Informática - Universidade Federal de Pernambuco Kiev Gama kiev@cin.ufpe.br Slides originais elaborados por Ian Sommerville e adaptado pelos professores Márcio Cornélio,

Leia mais

PDS - DATASUS. Processo de Desenvolvimento de Software do DATASUS

PDS - DATASUS. Processo de Desenvolvimento de Software do DATASUS PDS - DATASUS Processo de Desenvolvimento de Software do DATASUS Coordenação Geral de Arquitetura e Engenharia Tecnológica Coordenação de Padronização e Qualidade de Software Gerência de Padrões e Software

Leia mais

Customização de Software como um Meio para o Desenvolvimento de Sistemas de Software

Customização de Software como um Meio para o Desenvolvimento de Sistemas de Software Customização de Software como um Meio para o Desenvolvimento de Sistemas de Software Thiago Bianchi 1 Elisa Yumi Nakagawa 2 1 IBM - International Business Machines 04753-080, São Paulo, SP, Brazil tbianchi@br.ibm.com

Leia mais

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 10 PROFª BRUNO CALEGARO

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 10 PROFª BRUNO CALEGARO UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 10 PROFª BRUNO CALEGARO Santa Maria, 10 de Outubro de 2013. Revisão aula anterior Documento de Requisitos Estrutura Padrões Template Descoberta

Leia mais

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Especialização em Desenvolvimento de Aplicações Web com Interfaces Ricas EJB 3.0 Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 10 Persistência de Dados

Leia mais

Gerenciamento de Serviços de TI com base na ITIL

Gerenciamento de Serviços de TI com base na ITIL Gerenciamento de Serviços de TI com base na ITIL Information Technology Infrastructure Library ou Biblioteca de Infraestrutura da Tecnologia da Informação A TI de antes (ou simplesmente informática ),

Leia mais

Processo de garantia da qualidade baseado no modelo MPS.BR. Acadêmico: Anildo Loos Orientador: Everaldo Artur Grahl

Processo de garantia da qualidade baseado no modelo MPS.BR. Acadêmico: Anildo Loos Orientador: Everaldo Artur Grahl Processo de garantia da qualidade baseado no modelo MPS.BR Acadêmico: Anildo Loos Orientador: Everaldo Artur Grahl Roteiro introdução objetivos do trabalho fundamentação teórica desenvolvimento da ferramenta

Leia mais

Resumo: Perguntas a fazer ao elaborar um projeto arquitetural

Resumo: Perguntas a fazer ao elaborar um projeto arquitetural Resumo: Perguntas a fazer ao elaborar um projeto arquitetural Sobre entidades externas ao sistema Quais sistemas externos devem ser acessados? Como serão acessados? Há integração com o legado a ser feita?

Leia mais

INDICE 3.APLICAÇÕES QUE PODEM SER DESENVOLVIDAS COM O USO DO SAXES

INDICE 3.APLICAÇÕES QUE PODEM SER DESENVOLVIDAS COM O USO DO SAXES w w w. i d e a l o g i c. c o m. b r INDICE 1.APRESENTAÇÃO 2.ESPECIFICAÇÃO DOS RECURSOS DO SOFTWARE SAXES 2.1. Funcionalidades comuns a outras ferramentas similares 2.2. Funcionalidades próprias do software

Leia mais

Projeto de Arquitetura

Projeto de Arquitetura Projeto de Arquitetura Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 11 Slide 1 Objetivos Apresentar projeto de arquitetura e discutir sua importância Explicar as decisões de projeto

Leia mais

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Perola André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Prevayler é a implementação em Java do conceito de Prevalência. É um framework que prega uma JVM invulnerável

Leia mais

Engenharia de Software I

Engenharia de Software I Engenharia de Software I Rogério Eduardo Garcia (rogerio@fct.unesp.br) Bacharelado em Ciência da Computação Aula 03 In a calm sea every man is a pilot. Engenharia de Software I Aula 3 Gerenciamento de

Leia mais

Fundamentos de Java. Prof. Marcelo Cohen. 1. Histórico

Fundamentos de Java. Prof. Marcelo Cohen. 1. Histórico Fundamentos de Java Prof. Marcelo Cohen 1. Histórico 1990 linguagem Oak; desenvolvimento de software embutido para eletrodomésticos S.O. para o controle de uma rede de eletrodomésticos o surgimento da

Leia mais

Eduardo Bezerra. Editora Campus/Elsevier

Eduardo Bezerra. Editora Campus/Elsevier Princípios de Análise e Projeto de Sistemas com UML 2ª edição Eduardo Bezerra Editora Campus/Elsevier Capítulo 11 Arquitetura do sistema Nada que é visto, é visto de uma vez e por completo. --EUCLIDES

Leia mais

Unified Modeling Language UML - Notações

Unified Modeling Language UML - Notações Unified Modeling Language UML - Notações Prof. Ms. Elvio Gilberto da Silva elvio@fmr.edu.br UML Ponto de Vista É gerada com propósito geral de uma linguagem de modelagem visual usada para especificar,

Leia mais

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE Aluno: Roberto Reinert Orientador: Everaldo A. Grahl Roteiro de apresentação Introdução Objetivos Fundamentação Teórica Workflow Processo

Leia mais

DSI é o processo cujo objetivo é introduzir mudanças num sistema de informação, com objetivo de melhorar o seu desempenho.

DSI é o processo cujo objetivo é introduzir mudanças num sistema de informação, com objetivo de melhorar o seu desempenho. - DSI DSI é o processo cujo objetivo é introduzir mudanças num sistema de informação, com objetivo de melhorar o seu desempenho. Preocupação: Problema técnicos Mudança na natureza e conteúdo do trabalho

Leia mais

Avaliação de uma Metodologia de Medição da Qualidade em um Documento de Requisitos Orientado a Aspectos

Avaliação de uma Metodologia de Medição da Qualidade em um Documento de Requisitos Orientado a Aspectos Avaliação de uma Metodologia de Medição da Qualidade em um Documento de Requisitos Orientado a Aspectos Ricardo Argenton Ramos / Jaelson F. B. Castro Centro de Informática - Universidade Federal de Pernambuco

Leia mais

Reuso da Implementação Orientada a Aspectos do Padrão de Projeto Camada de Persistência

Reuso da Implementação Orientada a Aspectos do Padrão de Projeto Camada de Persistência Reuso da Implementação Orientada a Aspectos do Padrão de Projeto Camada de Persistência Copyright 2004, Ricardo Argenton Ramos, 1, Valter Vieira de Camargo, 2 Rosângela Penteado, Paulo Cesar Masiero Permission

Leia mais

Plano de Gerência de Configuração

Plano de Gerência de Configuração Plano de Gerência de Configuração Objetivo do Documento Introdução A aplicação deste plano garante a integridade de códigos-fonte e demais produtos dos sistemas do, permitindo o acompanhamento destes itens

Leia mais

UML - Unified Modeling Language

UML - Unified Modeling Language UML - Unified Modeling Language Casos de Uso Marcio E. F. Maia Disciplina: Engenharia de Software Professora: Rossana M. C. Andrade Curso: Ciências da Computação Universidade Federal do Ceará 24 de abril

Leia mais

Engenharia de Software III

Engenharia de Software III Engenharia de Software III Casos de uso http://dl.dropbox.com/u/3025380/es3/aula6.pdf (flavio.ceci@unisul.br) 09/09/2010 O que são casos de uso? Um caso de uso procura documentar as ações necessárias,

Leia mais

QUESTINAMENTOS AO EDITAL DE CONCORRÊNCIA 01/2013

QUESTINAMENTOS AO EDITAL DE CONCORRÊNCIA 01/2013 QUESTINAMENTOS AO EDITAL DE CONCORRÊNCIA 01/2013 Prezados Senhores da comissão de licitação da UENF, seguem alguns questionamentos acerca do edital de concorrência 01/2013 para esclarecimentos: 1. ANEXO

Leia mais

Linguagem de Programação Visual

Linguagem de Programação Visual Linguagem de Programação Visual Unidade 1 Ambiente de desenvolvimento Curso Técnico em Informática SUMÁRIO INTRODUÇÃO... 3 SOBRE O JAVA... 3 AMBIENTE DE DESENVOLVIMENTO... 5 RECURSOS DA FERRAMENTA NETBEANS...

Leia mais

Uma Abordagem usando PU

Uma Abordagem usando PU Uma Abordagem usando PU Curso de Especialização DEINF - UFMA Desenvolvimento Orientado a Objetos Prof. Geraldo Braz Junior Referências: Baseada em: Rational Software Corpotation G. Booch, Ivar Jacobson,

Leia mais

Suporte à Engenharia Reversa para o ambiente SEA

Suporte à Engenharia Reversa para o ambiente SEA Otavio Pereira Suporte à Engenharia Reversa para o ambiente SEA Orientador: Ricardo Pereira e Silva Universidade Federal de Santa Catarina - UFSC Departamento de Informática e Estatística - INE Florianópolis

Leia mais

Melhores práticas para gerenciamento de suporte a serviços de TI

Melhores práticas para gerenciamento de suporte a serviços de TI Melhores práticas para gerenciamento de suporte a serviços de TI Adriano Olimpio Tonelli Redes & Cia 1. Introdução A crescente dependência entre os negócios das organizações e a TI e o conseqüente aumento

Leia mais

Lógica de Programação

Lógica de Programação Lógica de Programação Unidade 4 Ambiente de desenvolvimento Java QI ESCOLAS E FACULDADES Curso Técnico em Informática SUMÁRIO A LINGUAGEM JAVA... 3 JVM, JRE, JDK... 3 BYTECODE... 3 PREPARANDO O AMBIENTE

Leia mais

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Especialização em Desenvolvimento de Aplicações Web com Interfaces Ricas EJB 3.0 Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 5 Servidores de Aplicação

Leia mais

CURSO DESENVOLVEDOR JAVA Edição 2009

CURSO DESENVOLVEDOR JAVA Edição 2009 CURSO DESENVOLVEDOR JAVA Edição 2009 O curso foi especialmente planejado para os profissionais que desejam trabalhar com desenvolvimento de sistemas seguindo o paradigma Orientado a Objetos e com o uso

Leia mais

Engenharia de Software Processo de Desenvolvimento de Software

Engenharia de Software Processo de Desenvolvimento de Software Engenharia de Software Processo de Desenvolvimento de Software Prof. Edison A. M. Morais prof@edison.eti.br http://www.edison.eti.br Objetivo (1/1) Conceituar PROCESSO E CICLO DE VIDA, identificar e conceituar

Leia mais

Engenharia de Software: Introdução. Mestrado em Ciência da Computação 2008 Profa. Itana Gimenes

Engenharia de Software: Introdução. Mestrado em Ciência da Computação 2008 Profa. Itana Gimenes Engenharia de Software: Introdução Mestrado em Ciência da Computação 2008 Profa. Itana Gimenes Programa 1. O processo de engenharia de software 2. UML 3. O Processo Unificado 1. Captura de requisitos 2.

Leia mais

INTERLIMS SISTEMA DE GERENCIAMENTO DE INFORMAÇÕES PARA LABORATÓRIOS DE ANÁLISES DE ÁGUA

INTERLIMS SISTEMA DE GERENCIAMENTO DE INFORMAÇÕES PARA LABORATÓRIOS DE ANÁLISES DE ÁGUA INTERLIMS SISTEMA DE GERENCIAMENTO DE INFORMAÇÕES PARA LABORATÓRIOS DE ANÁLISES DE ÁGUA INTERLIMS SISTEMA DE GERENCIAMENTO DE INFORMAÇÕES PARA LABORATÓRIOS DE ANÁLISES DE ÁGUA O InterLIMS se apresenta

Leia mais

Framework utilizando reflexão e aspectos para persistência de objetos em java

Framework utilizando reflexão e aspectos para persistência de objetos em java Framework utilizando reflexão e aspectos para persistência de objetos em java Antonio Carlos Rolloff (UNIPAR) acrolloff@gmail.com Arthur Cattaneo Zavadski (UNIPAR) arthur@datacoper.com.br Maria Aparecida

Leia mais

1 http://www.google.com

1 http://www.google.com 1 Introdução A computação em grade se caracteriza pelo uso de recursos computacionais distribuídos em várias redes. Os diversos nós contribuem com capacidade de processamento, armazenamento de dados ou

Leia mais

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: davidmr@ifce.edu.br CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: davidmr@ifce.edu.br CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0 AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: davidmr@ifce.edu.br CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0 SUMÁRIO 1 Conceitos Básicos... 3 1.1 O que é Software?... 3 1.2 Situações Críticas no desenvolvimento

Leia mais

DESENVOLVIMENTO WEB UTILIZANDO FRAMEWORK PRIMEFACES E OUTRAS TECNOLOGIAS ATUAIS

DESENVOLVIMENTO WEB UTILIZANDO FRAMEWORK PRIMEFACES E OUTRAS TECNOLOGIAS ATUAIS DESENVOLVIMENTO WEB UTILIZANDO FRAMEWORK PRIMEFACES E OUTRAS TECNOLOGIAS ATUAIS Emanuel M. Godoy 1, Ricardo Ribeiro Rufino 1 1 Universidade Paranaense (Unipar) Paranavaí PR Brasil godoymanel@gmail.com,

Leia mais

Engenharia de Software II

Engenharia de Software II Engenharia de Software II Aula 27 http://www.ic.uff.br/~bianca/engsoft2/ Aula 27-26/07/2006 1 Ementa Processos de desenvolvimento de software Estratégias e técnicas de teste de software Métricas para software

Leia mais