Table 1. Dados do trabalho



Documentos relacionados
UML - Unified Modeling Language

Introdução à Engenharia de Software

UML 2. Guia Prático. Gilleanes T.A. Guedes. Novatec. Obra revisada e ampliada a partir do título Guia de Consulta Rápida UML 2

RUP. Evolução. Principais Características do RUP. Principais Características do RUP RUP

build UNIP Sistemas de Informação Análise Essencial de Sistemas 3 Prof.Marcelo Nogueira A produção de Software é uma atividade build and fix.

Engenharia de Software

UNIVERSIDADE DO ESTADO DE SANTA CATARINA - UDESC DCC Departamento de Ciência da Computação Joinville-SC

Wilson Moraes Góes. Novatec

Tópicos em Engenharia de Software (Optativa III) AULA 2. Prof. Andrêza Leite (81 )

Planejamento da disciplina: Modelagem de processos de negócio

Um Framework para definição de processos de testes de software que atenda ao nível 3 do TMM-e

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

ISO/IEC 12207: Gerência de Configuração

Padrões de projeto 1

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

Análise e Projeto de Sistemas. Engenharia de Software. Análise e Projeto de Sistemas. Contextualização. Perspectiva Histórica. A Evolução do Software

2 Engenharia de Software

Modelagemde Software Orientadaa Objetos com UML

PRODUTO 1 (CONSTRUÇÃO DE PORTAL WEB)

Histórico da Orientação a Objetos Ciclo de vida de Desenvolvimento de SW

Engenharia Reversa e Reengenharia

CES-32 e CE-230 Qualidade, Confiabilidade e Segurança de Software. Conceitos de Qualidade. CURSO DE GRADUAÇÃO e DE PÓS-GRADUAÇÃO DO ITA

REPRESENTAÇÃO DE REQUISITOS VARIÁVEIS COM UML, SEGUINDO O MÉTODO ICONIX

UML e a Ferramenta Astah. Profa. Reane Franco Goulart

Desenvolvimento de software orientado a características e dirigido por modelos

FAP - Faculdade de Apucarana Curso de Sistemas de Informação RESUMO EXPANDIDO DE TRABALHO DE CONCLUSÃO DE CURSO -

Engenharia de Software. Apostila I >>> Introdução à ES - HEngholmJr

Engenharia de Software

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

Processos de Desenvolvimento de Software

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

Métodos de Desenvolvimento de Software. Aula 1: Introdução

GERADOR DE APLICAÇÕES WEB BASEADO EM UMA LINGUAGEM DE PADRÕES DEFINIDA EM XML

Usando RDL para Derivação de Produtos em uma Linha de Produtos de Software

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA

Objetivos. Processos de Software. Tópicos abordados. O processo de software. Modelos genéricos de modelos de processo de software.

Autoria:Aristófanes Corrêa Silva Adaptação: Alexandre César M de Oliveira

PADRÕES DE PROJETO E FRAMEWORK NO DESENVOLVIMENTO DE SOFTWARE

Uma Arquitetura de Linha de Produto Baseada em Componentes para Sistemas de Gerenciamento de Workflow

ENGENHARIA DE SOFTWARE I

Frameworks. Pasteur Ottoni de Miranda Junior

Ferramenta para Geração de Código a partir da Especialização do Diagrama de Classes

Orientação a Objetos

Padrões. Projeto (Design) de Software

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

ANÁLISE E PROJETO ORIENTADO A OBJETOS. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

Unidade II MODELAGEM DE PROCESSOS

Linha de Produto de Software

Fábrica de Software 29/04/2015

Engenharia de Software: conceitos e aplicações. Prof. Tiago Eugenio de Melo, MSc tiagodemelo@gmail.com

1 UML (UNIFIED MODELING LANGUAGE)

2 Diagrama de Caso de Uso

ALESSANDRO RODRIGO FRANCO FERNANDO MARTINS RAFAEL ALMEIDA DE OLIVEIRA

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

O que é a UML? Introdução a UML. Objetivos da Modelagem. Modelos. A UML não é. Princípios da Modelagem. O que é um modelo?

Introdução a UML. Hélder Antero Amaral Nunes haanunes@gmail.com

Introdução à Computação

Etapas da Elaboração de um Projeto de Banco de Dados

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Fase 1: Engenharia de Produto

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

Conceitos de Banco de Dados

Programa do Curso de Pós-Graduação Lato Sensu MBA em Engenharia de Software Orientada a Serviços (SOA)

Análise qualitativa do processo de workflow da ouvidoria do IFMG campus Bambuí: um estudo de caso

CONSTRUÇÃO DE UM FRAMEWORK PARA O DESENVOLVIMENTO DE APLICAÇÕES WEB

Uma Abordagem para Tratamento de Regras de Negócio nas Fases Iniciais do Desenvolvimento

**Docentes do Centro Universitário Filadélfia- Unifil.

A Grande Importância da Mineração de Dados nas Organizações

Felipe Denis M. de Oliveira. Fonte: Alice e Carlos Rodrigo (Internet)

Algumas propriedades dos objetos:

Um Gerador de aplicações configurável. Edison Kicho Shimabukuro Junior

Glossário Apresenta a definição dos termos, siglas e abreviações utilizadas no contexto do projeto Citsmart.

GUIA DE FUNCIONAMENTO DA UNIDADE CURRICULAR

Modelagem de Processos. Prof.: Fernando Ascani

Prototipação de Software

DESENVOLVIMENTO DE INTERFACE WEB MULTIUSUÁRIO PARA SISTEMA DE GERAÇÃO AUTOMÁTICA DE QUADROS DE HORÁRIOS ESCOLARES. Trabalho de Graduação

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

Engenharia de Software II

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Introdução ao Paradigma Orientado a Objetos. Principais conceitos

Requisitos de Software

Um modelo é uma simplificação da realidade. Construímos modelos para compreender melhor o sistema que estamos desenvolvendo.

)HUUDPHQWDV &RPSXWDFLRQDLV SDUD 6LPXODomR

Engenharia de Software

Introdução a Computação

GARANTIA DA QUALIDADE DE SOFTWARE

TI Aplicada. Aula 02 Áreas e Profissionais de TI. Prof. MSc. Edilberto Silva prof.edilberto.silva@gmail.com

Curso: Engenharia de Software com Ênfase em Padrões de Software (UECE Universidade Estadual do Ceará) RUP

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

Processo de Desenvolvimento Unificado

! Software e Engenharia de Software! Engenharia de Software e Programação! Histórico. " Crise do Software

do grego: arkhé (chefe ou mestre) + tékton (trabalhador ou construtor); tekhne arte ou habilidade;

O Rational Unified Process (RUP) é um processo de desenvolvimento de software inspirado no

Transcrição:

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 T. Vaccare Braga Nível: Mestrado Programa de pós-graduação: Programa de Pós-Graduação em Ciências de Computação e Matemática Computacional - Universidade de São Paulo Email de contato do aluno: kicho@icmc.usp.br Email de contato do(s) masiero@icmc.usp.br orientador(es): rtvb@icmc.usp.br Ano de ingresso no programa: 2004 Época prevista de conclusão: 03/2006 Data da aprovação da 23/03/2005 proposta de dissertação: Table 1. Dados do trabalho Resumo. A engenharia de software de linhas de produtos almeja o aumento da produtividade e a construção de diversos sistemas em um domínio particular. Os riscos associados à implementação de uma linha de produtos podem aumentar em função do custo e da complexidade da construção dos artefatos necessários na linha de produtos. Um dos artefatos produzidos na linha de produtos são os geradores de aplicação. Essas ferramentas são implementadas em uma das últimas etapas do processo de desenvolvimento de uma família de produtos e normalmente são construídas de forma específica, ou seja, elas não podem ser reutilizadas em outros domínios sem modificações em sua estrutura interna. Este trabalho apresenta um gerador de aplicação baseado em linguagem de padrões configurável, ou seja, um gerador de aplicações que pode ser especializado por meio de uma linguagem de padrões, sem necessidade de recompilação, para diversos domínios diferentes. Com essa abordagem, um gerador de aplicação pode ser reutilizado em linhas de produtos distintas, possibilitando o aumento da produtividade em diversas fases do processo de desenvolvimento, tais como: codificação, documentação e testes, sem os custos encontrados no desenvolvimento de geradores de aplicação específicos. Palavras-chave: Engenharia de Software de Linhas de Produtos, Geradores de Aplicação, Padrões de Software, Linguagens de Padrões.

Geradores de aplicação configuráveis por linguagens de padrões Edison K. Shimabukuro Jr 1, Rosana T. Vaccare Braga 1, Paulo Cesar Masiero 1 1 Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo (USP) Caixa Postal 668 13.560-970 São Carlos SP Brazil 1. Introdução {kicho,rtvb,masiero}@icmc.usp.br A indústria de software tem como uma de suas principais metas a construção de sistemas de alta qualidade e baixo custo. Nesse ambiente de alta competitividade, diversos sistemas são desenvolvidos para suprir as necessidades do mercado. Dentre esses sistemas, muitos apresentam mais similaridades do que diferenças [Greenfield and Short 2004]. Mesmo com a demanda por produtos similares, o processo usual adotado pelas organizações é a produção de aplicações individuais para posterior desenvolvimento de variações do mesmo sistema. Embora esta seja uma solução que atinja o seu objetivo, esta abordagem apresenta a necessidade de grandes investimentos em projeto, codificação e testes em todos os sistemas construídos [Weiss and Lai 1999, Greenfield and Short 2004, Czarnecki and Eisenercker 2002]. A engenharia de software de linhas de produtos pode ser utilizada para responder a essa demanda por produtos similares, apoiando a configuração e montagem de componentes, integração e automação do processo de produção, desenvolvimento de ferramentas que configuram e automatizam tarefas repetitivas e padronização de processos [Greenfield and Short 2004, Weiss and Lai 1999]. Com essas técnicas, uma organização pode atingir níveis mais elevados de produtividade e construir sistemas sob demanda de forma mais eficaz. O desenvolvimento de geradores de aplicação normalmente é realizado em uma das últimas etapas do processo de implementação de uma linha de produtos. Essas ferramentas são construídas com o objetivo de automatizar a implementação de artefatos de software, tais como: código fonte, documentação e casos de testes. Os principais problemas com a utilização dessas ferramentas são a complexidade do seu desenvolvimento e o seu alto acoplamento com os artefatos da linha de produtos, ou seja, elas são específicas para uma linha de produtos. Essas características fazem com que essas ferramentas sejam caras de desenvolver e pouco reutilizáveis por linhas de produtos diferentes. Este trabalho apresenta um gerador de aplicação baseado em linguagem de padrões configurável para um domínio específico. Esse gerador de aplicação pode ser configurado, sem a necessidade de recompilação, para realizar a transformação de uma especificação de entrada em artefatos de software. Essa ferramenta pode ser reutilizada em linhas de produtos diferentes, fornecendo apoio para a geração de artefatos e apresentando um baixo custo no processo de configuração em relação à abordagem tradicional de desenvolvimento de geradores de aplicação específicos. Este trabalho está organizado da seguinte maneira: Na Seção 2 é apresentada a fundamentação teórica deste trabalho. Na Seção 3 é apresentada a arquitetura e o pro-

cesso de configuração e utilização de um gerador de aplicação baseado em linguagens de padrões configurável. Finalmente, na Seção 4 são apresentadas as considerações finais deste trabalho. 2. Fundamentação Teórica Os principais assuntos abordados neste trabalho são padrões e linguagens de padrões de software, geradores de aplicação, componentes, frameworks e linhas de produtos. A seguir são apresentados os principais conceitos relacionados com padrões, linguagens de padrões e geradores de aplicação. 2.1. Padrões e Linguagens de Padrões Construir software não é uma tarefa fácil. Desenvolvedores experientes possuem maior facilidade na atividade de construção de software por possuírem conhecimento de soluções recorrentes que podem ser aplicadas em diversas situações similares. Tais soluções podem ser documentadas adequadamente no formato de padrões. Um padrão pode ser visto como a descrição de uma solução de um problema recorrente em um determinado ambiente para facilitar a sua utilização diversas vezes, sem no entanto, implementar a solução da mesma forma duas vezes [Alexander 1979]. Na engenharia de software, padrões encapsulam as melhores soluções baseadas em anos de desenvolvimento de aplicações, observação e experiência. Para encontrar a melhor solução, o desenvolvedor deve entender o problema, o contexto e as forças que governam esse problema [Harrison et al. 1999]. Dessa forma, os padrões ajudam na construção de sistemas confiáveis, seguindo os passos de outras construções de sistemas de sucesso [Harrison et al. 1999]. Nenhum padrão é uma entidade isolada e cada padrão é apoiado por outros padrões [Alexander 1979]. Uma linguagem de padrões é um conjunto de padrões, e os relacionamentos entre esses padrões são utilizados sistematicamente para resolver problemas. Uma linguagem de padrões fornece sugestões sobre como os padrões podem ser combinados para a solução de problemas específicos. Essas sugestões descrevem o processo de aplicação dos padrões, ou apenas definem restrições que a aplicação possui, como por exemplo, a ordem na qual os padrões devem ser aplicados [Greenfield and Short 2004]. 2.2. Geradores de aplicação O termo gerador de aplicação pode assumir diferentes significados, tais como: compiladores, pré-processadores, meta-funções que geram classes e procedimentos, wizards e geradores de código [Czarnecki and Eisenercker 2002]. Por exemplo, um wizard é um programa gráfico que recebe uma especificação em alto nível de abstração e a transforma em artefatos de software. Algumas ferramentas CASE (do inglês Computer Aided Software Engineering) geram uma parte do código de uma aplicação, utilizando como entrada diagramas e especificações que são inseridos na ferramenta pelo engenheiro de aplicação. Os compiladores são geradores de código, uma vez que recebem uma informação em um certo nível de abstração, tais como a linguagem Java ou C++, e transformam essa informação em uma linguagem de mais baixo nível, tais como código objeto, bytecode ou código de máquina [Czarnecki and Eisenercker 2002].

De maneira geral, o conceito de gerador de aplicação que será utilizado neste trabalho assume o significado de uma ferramenta que realiza as seguintes tarefas [Czarnecki and Eisenercker 2002]: valida a especificação de entrada e relata erros ou avisos de inconsistências, completa a especificação utilizando as configurações padrões, realiza otimizações e gera a implementação. Os geradores de aplicação podem ser baseados em uma linguagem de padrões. Geradores de aplicação baseados em linguagens de padrões são ferramentas que possuem o fluxo de execução baseado em uma linguagem de padrões [Braga and Masiero 2003]. O fluxo de execução dessas ferramentas conduz o engenheiro de aplicação por uma seqüência de etapas. Em cada etapa, a ferramenta fornece meios para o engenheiro de aplicações inserir informação sobre um padrão. No fim da execução dessa seqüência de etapas, a ferramenta possui as informações sobre todos os padrões aplicados e assim, ela pode utilizar essas informações para gerar artefatos de software. 3. Geradores de aplicação configuráveis por linguagens de padrões Como foi apresentado na Seção 1, quando se desenvolvem geradores de aplicação de forma específica, eles se tornam caros e, muitas vezes, o risco associado ao seu desenvolvimento dificulta ou impossibilita sua construção e utilização. A principal motivação para a construção de um gerador de aplicação configurável baseado em linguagens de padrões é evitar os custos do desenvolvimento de geradores de aplicações específicos e facilitar a sua modificação para a geração de diferentes artefatos durante o processo de desenvolvimento e manutenção de software. O ciclo de vida de um gerador de aplicação configurável (Figura 1) apresenta três fases: a fase de desenvolvimento, a fase de configuração e a fase de utilização. Na fase de desenvolvimento o gerador de aplicação configurável é projetado e implementado; na fase de configuração ele é especializado por um engenheiro de domínio para uma instância de um gerador de aplicação específico; na terceira fase, o gerador de aplicação especializado é utilizado por um engenheiro de aplicação para a geração de artefatos de aplicações específicas. Para que um gerador de aplicação baseado em linguagem de padrões tenha a capacidade de gerar artefatos para diferentes aplicações sem a necessidade de recompilação, ele deve ser configurado de acordo com as características da linguagem de padrões e dos artefatos de software que implementam as aplicações, tais como o código fonte necessário para realizar a composição de componentes ou instanciações de um framework, implementação de casos de testes específicos e geração de documentos específicos, tais como documentos de requisitos de usuário e documentos da UML [Booch et al. 2000]. Como ilustrado na Figura 2, para configurar o gerador de aplicação deve-se inserir na ferramenta o meta-modelo da linguagem de padrões e os templates dos artefatos de software. O meta-modelo da linguagem de padrões especifica quais padrões a ferramenta deve apresentar para o engenheiro de aplicação, quais são os relacionamentos e dependências entre os padrões e quais são os dados que a ferramenta deve coletar de cada padrão. Os templates são documentos de texto que representam o corpo dos artefatos que devem ser gerados, tais como código-fonte e casos de teste. Eles possuem marcações especiais que devem ser substituídas por dados provenientes da entrada do usuário para a obtenção dos diferentes arquivos de saída produzidos pelo gerador de aplicações.

Figure 1. Ciclo de vida de um gerador configurável Figure 2. Configuração do gerador de aplicação configurável Após o processo de configuração, o gerador de aplicação estará pronto para produzir artefatos de software com base na especificação de entrada fornecida pelo engenheiro de aplicação e assim oferecer apoio a linhas de produtos diferentes. 4. Considerações Finais Existem na literatura diversas abordagens para a construção de geradores de aplicação. Essas abordagens permitem a construção de geradores de aplicação que podem ser utilizados em domínios específicos, tais como o gerador MOmoC [Bichler 2003] e o gerador específico de domínio P3 [Batory et al. ]. Braga (2003) desenvolveu um gerador de aplicação específico baseado na linguagem de padrões GRN [Braga et al. 1999], denominado GREN-Wizard [Braga and Masiero 2003], que é utilizado para a instanciação do framework GREN [Braga 2003]. Após a conclusão desse trabalho, a autora propôs a construção de um Wizard genérico que pudesse ser utilizado para a instanciação de diversos pares de linguagens de padrões e frameworks. Este trabalho se caracteriza pela extensão dessa proposta, visando o desenvolvimento de um gerador de aplicação configurável por linguagens de padrões para a instanciação de frameworks e geração de outros

artefatos de software, tais como documentos UML, documentos de usuário, casos de testes e código fonte. Com a abordagem proposta neste trabalho, pretende-se diminuir a curva de investimento necessária para o desenvolvimento e utilização de geradores de aplicação em linhas de produtos diferentes. Essa diminuição será obtida pela substituição da fase de desenvolvimento de geradores de aplicação em linhas de produtos diferentes pela configuração de um gerador de aplicação configurável para atender às necessidades de cada linha de produtos. Para realizar essa tarefa, é necessário codificar um gerador de aplicações configurável e definir o seu processo de desenvolvimento, configuração e utilização. Atualmente já existe um protótipo dessa ferramenta e o processo de desenvolvimento está em fase de implementação. A ferramenta será utilizada na instanciação do framework GREN associado com a linguagem de padrões GRN [Braga et al. 1999] e mais um estudo de caso que utilizará composição de componentes para a construção de uma aplicação específica. Os principais resultados que serão observados na validação serão: o esforço necessário para que o engenheiro de domínio configure o gerador, a flexibilidade e extensibilidade da ferramenta, e a qualidade dos artefatos gerados. References Alexander, C. (1979). The Timeless Way of Building. Oxford University Press. Batory, D., Chen, G., Robertson, E., and Wang, T. Design wizards and visual programming environments for genvoca generators. IEEE Trans. Softw. Eng. Bichler, L. (2003). OOPSLA. A flexible code generator for mof-based modeling languages. Booch, G., Rumbaugh, J., and Jacobson, I. (2000). The Unified Modeling Language User Guide. Addison-Wesley. Braga, R. T. V. (2003). Um Processo para Construção e Instanciação de Frameworks baseados em uma Linguagem de Padrões para um Domínio Específico. PhD thesis, Instituto de Ciências Matemáticas e de Computação, Universidade de São Paulo. Braga, R. T. V., Germano, F. S. R., and Masiero, P. C. (1999). A pattern language for business resource management. In Proceedings of the 6th Annual Conference on Pattern Languages of Programs, Monticello, Illinois, EUA, volume 7, pages 1 33. Braga, R. T. V. and Masiero, P. C. (2003). Building a wizard for framework instantiation based on a pattern language. 9th International Conference on Object-Oriented Information Systems (OOIS 03), Genebra, Suiça. Lecture Notes on Computer Science, pages 95 106. Czarnecki, K. and Eisenercker, U. W. (2002). Generative Programming. Addison-Wesley. Greenfield, J. and Short, K. (2004). Software Factories - Assembling Applications with Patterns, Models, Frameworks, and Tools. Wiley Publishing, Inc. Harrison, N., Foote, B., and Rohnert, H. (1999). Pattern Languages of Program Design 4. Addison-Wesley. Weiss, D. M. and Lai, C. T. R. (1999). Software Product-Line Engineering. Addison- Wesley.