UM PROCESSO PARA CONSTRUÇÃO DE GERADORES DE ARTEFATOS - PDF
UM PROCESSO PARA CONSTRUÇÃO DE GERADORES DE ARTEFATOS
Download "UM PROCESSO PARA CONSTRUÇÃO DE GERADORES DE ARTEFATOS"
Regina Machado Galvão
1 LUIZ PAULO ALVES FRANCA UM PROCESSO PARA CONSTRUÇÃO DE GERADORES DE ARTEFATOS Tese de Doutorado DEPARTAMENTO DE INFORMÁTICA Rio de Janeiro, 17 de agosto de 2000 Luiz Paulo Alves Franca
2 Um processo para a construção de geradores de artefatos Tese apresentada ao Departamento de Informática da PUC-Rio como parte dos requisitos para obtenção do título de Doutor em Informática: Ciência da Computação Orientador: Arndt von Staa Departamento de Informática Pontífica Universidade Católica do Rio de Janeiro Rio de Janeiro, 17 de agosto de 2000 ii
3 Dedico este trabalho, aos meus pais Aloisio e Therezinha aos meus irmãos Heloisa e Eduardo, à minha Rose, namorada, esposa, e companheira à nossa Marcela que está quase chegando iii
4 Agradecimentos Meu orientador, mestre e amigo, Prof. Arndt von Staa por mostrar-me a saída deste potencial labirinto que é um trabalho de doutorado. Ao CNPQ pelo apoio financeiro. BNDES pela experiência de 3 anos como analista de sistemas do Depto. de Informática, onde pude vivenciar além das questões técnicas, os aspectos sociológicos que envolvem a implantação de sistemas. Colegas do BNDES, Calvano, Carlos Henrique, Fernando, João Marcelo, Sidnei, Margarida,..., pelo incentivo no início desta jornada. Meus amigos e sócios da Interatum Informática ( atual Ingresso.com) Mauro e Jorge, pela ajuda na consolidação de nossa empresa, por suprirem as minhas ausências, enquanto estava realizando este meu outro sonho. Colegas da Ingresso.com Anddré, Marcelo, Erick, Mássimo, Robson, Fernanda, Fábio, Deborá, Roberto, Dário, Heloisa, Patricia,..., pelo incentivo ao longo da jornada. Meu cliente e amigo, Pedro Barenboim, pela oportunidade de desenvolver meu primeiro sistema efetivamente útil, e por mostra-me que enquanto num romance policial, o culpado é o mordomo, numa empresa o culpado sempre é o analista de sistemas. Prof. Firmo Freire pelas dicas no início do trabalho, e por apresentar-me a sincronicidade. Hamilton Fonte II, futuro Engenheiro de Computação, pela ajuda na exploração do mundo da programação Internet e pelos protótipos em Java. Paulo Caroli, cujo trabalho de mestrado proporcionou-me importantes insights. Depto. de Informática da PUC-Rio pela superação da precariedade da época collor, e pelas excelentes condições oferecidas para realização deste trabalho. Meus amigos de surf Márcio, Júlio, Marcelo, Armando e Krishinan pela minha ausência no pico e pelas ondas que deixei pegar durante estes 4 últimos anos. iv
5 Meu xará e amigo, Luiz Paulo, por compartilhar sua amizade. Bahia por continuar me recebendo de braços abertos. v
6 Resumo Um gerador de artefatos é um software que produz um artefato a partir de sua especificação de alto nível. Um artefato é qualquer item criado como parte da definição, manutenção ou utilização de um processo de software. Geradores de artefatos permitem reduzir os custos e o tempo para a disponibilização, e aumentar a confiabilidade de artefatos dentro de um domínio de aplicação. No entanto, para que se possa disseminar mais o emprego de geradores de artefatos, devem ser reduzidos os custos e a dificuldade do seu desenvolvimento e manutenção. Esta tese apresenta um processo de baixo custo para o desenvolvimento e a manutenção de geradores de artefatos. O processo inicia com um exemplo de um artefato simples visando determinado domínio de aplicação. Dado este exemplo e levando em consideração o conjunto de todos os possíveis artefatos dentro deste domínio, são identificadas todas as partes comuns e todas as partes variáveis. São identificadas também as propriedades a serem satisfeitas pelas especificações de cada artefato-alvo. A seguir, o exemplo é modificado de modo que venha a conter marcadores de geração em cada um dos pontos variáveis. Estes marcadores estabelecem as regras de transformação a serem aplicadas ao gerar um artefato específico a partir de sua especificação. Para programar os editores das especificações e os geradores, utilizamos uma ferramenta CASE. Por intermédio de outra ferramenta, o exemplo devidamente marcado é transformado em um componente a ser combinado com a biblioteca de transformações, produzindo, assim, o gerador a ser internalizado na ferramenta CASE. O processo foi utilizado com sucesso para transformar especificações em aplicações, componentes e documentação. Palavras Chave Gerador de artefatos, gerador de aplicações, CASE, processo de desenvolvimento de geradores. vi
7 Abstract An artifact generator is a software tool which produces an artifact from its high-level specification. An artifact is any item created as part of definition, maintenance or utilization of a software process. Artifact generators are a way to reduce production costs and time to market, and to increase reliability of artifacts within a given application domain. However, in order to achieve a more widespread usage of artifact generators, the difficulty and the cost of their development and maintenance must be reduced. This thesis presents a lowcost artifact generator development and maintenance process. The process departs from an example of a simple artifact within the target application domain. Given this example and considering all possible artifacts of the domain, all commonalties and variabilities are identified, as well as the properties that the specification of each specific target artifact must satisfy. The example is then modified in order to contain specific generator tags at all variable points. These tags establish the transformation rules that must be applied to the specification in order to generate the application. We have used a CASE tool, which allows the programming of the specification editors and of the generators. By means of another tool, the tagged example artifact is transformed into a component, which is combined with the transformation library, yielding the generator code to be internalized by the CASE tool. The process has been successfully used to transform specifications into applications, components and documentation. Keywords Artifact generator, application generator, CASE, generator development process vii
8 Sumário Capítulo 1- Introdução Motivação Objetivos Gênese do Problema Organização da Tese... 9 Capítulo 2- Conceitos Básicos Geradores de Artefato Arquitetura de um Gerador de Artefatos meta-geradores de Artefatos Draco: meta-gerador baseado em Domínios Stage: Experiência AT&T em Geradores Eugene: meta-gerador baseado em meta-modelos Frame: meta-gerador Industrial GenVoca: Modelo para o domínio de construção de geradores Frameworks Processo de Construção de Geradores Processo baseado em meta-geradores Processo baseado em Famílias de Aplicações Processo baseado em Frameworks Resumo Capítulo 3- Métodos, Técnicas, e Ferramentas para Construção de Geradores de Artefatos Requisitos para Métodos, Técnicas e Ferramentas para Construção de Geradores de Artefatos Ambiente para construção de geradores: Talisman Hot-Spot Mining Hot-Spot: Modo de Adaptação: Substituir - Apoio: Pattern Hot-Spot: Modo de Adaptação: Habilitar - Apoio: Pattern Hot-Spot: Modo de Adaptação: Aumentar - Apoio: Ilimitado Transformações de Generalização Tag de Substituição viii
9 3.4.2 Tag de Bloco Tag Condicional Resumo Capítulo 4- Processo de Construção de Geradores de Artefatos Características do Processo Proposto Visão Geral do Processo de Construção Detalhamento do Processo de Construção Construção do Artefato-Exemplo Definição do artefato Definição da Linguagem de Especificação Hot-spot Mining Construção do editor da especificação Programação do Gerador Geração do programa de geração do artefato Codificação das Regras de Transformação Criação do Coordenador da Geração Criação do verificador da especificação Implementação do Gerador Montagem do Gerador Compilação do Gerador Construção dos utilitários pós-geração Controle da qualidade Processo de Manutenção do Gerador de Artefatos Resumo Capítulo 5- Controle da Qualidade Introdução Ferramentas de Identificação de Faltas Prevenção de Problemas Prototipação Abordagem Formal Sistemas Transformacionais Formais Framewoks Componentes ix
10 5.5 Resumo Capítulo 6- Estudos de Caso ProtoBD: Prototipador de modelo de dados Utilização de diferentes linguagens de representação Independência do processo em relação à linguagem de 114 programação da aplicação final Utilização de Rotinas de Escape Evolução do Gerador de Artefatos Utilização do ProtoBD Documentador HTML de Modelo de Dados Resumo Capítulo 7- Conclusão Resumo do Trabalho Comparação com trabalhos relacionados Processo de construção Ambiente de Geração Principais Contribuições Trabalhos Futuros Apêndice A- Glossário Apêndice B- BNF do arquivo de meta-descrição Apêndice C- Regras de Transformação Apêndice D- Documentação de Hot-Spot Apêndice E- Padrão para a escolha de nomes Apêndice F- Medições Realizadas Referências Bibliográficas x
11 Lista de Figuras Padrão de figura de formulário de entrada de dados Fonte Normal: Título de campo Fonte em Negrito: Campo digitado Nome: Endereço Descrição: Endereço completo contendo logradouro, número, apto, bloco, etc. Tipo: String Tamanho: 60 Figura 1.1 Visão Geral do COMPASSO... 5 Figura 1.2 Implementação em 3 camadas da entidade Métrica do COMPASSO... 6 Figura 1.3 Exemplos de pontos modificados num trecho em HTML... 7 Figura 1.4 Exemplos de pontos modificados num trecho em Java... 7 Figura 1.5 Exemplos de geração dos arquivos de saída... 8 Figura 2.1. Visão esquemática de um gerador de artefatos Figura 2.2 Visão esquemática da utilização do gerador de artefatos Figura 2.3. Arquitetura padrão de um gerador de artefatos Figura 2.4. Arquitetura padrão de um meta-gerador de artefatos Figura 2.5. Visão Esquemática do Ambiente Draco Figura 2.6. Visão Esquemática do Stage Figura 2.7. Visão Esquemática do Eugene Figura 2.8. Hierarquia de Frames [Basset 1996] Figura 2.9 Equação de tipo Figura 2.10 Transformação do programa em Jak Figura 2.11 Mecanismo de hot spot Figura 2.12 Atividades de design de um framework [Schimd 1999] Figura 2.13 Evolução de um framework Figura 2.14 Processo de desenvolvimento de um framework Figura 2.15 Processo de detalhado de desenvolvimento de um framework xi
12 Figura 2.16 Processo de desenvolvimento de um framework Figura 3.1 Visão geral do meta-case Talisman Figura 3.2 Relação entre objetos do meta-modelo do Talisman Figura 3.3 Trecho de código na linguagem nativa do Talisman Figura 3.4 Talisman: Ambiente para construção de geradores Figura 3.5 Trecho de um programa de edição da especificação Figura 3.6 Exemplo de uma tela de entrada de dados Figura 3.7 Trecho de um programa de descrição de artefato Figura 3.8 Trecho de um arquivo HTML gerado referente ao programa da Fig Figura 3.9 Exemplos de hot-spots do tipo substituir Figura 3.10 Exemplos de hot-spots do tipo habilitar Figura 3.11 Exemplos de hot-spot do tipo aumentar Figura 3.12 Visão esquemática da generalização Figura 3.13 Geração automática do programa de descrição do artefato Figura 3.14 Transformação de um frozen-spot Figura 3.15 Exemplo de um arquivo de meta-descrição do artefato Figura 3.16 Exemplo de tag de Substituição Figura 3.17 Exemplo de tag de Substituição Figura 3.18 Exemplo de tag de Bloco Figura 3.19 Exemplo de tag Condicional Figura 3.20 Exemplo de tag Condicional ( rotina de escape ) Figura 4.1 Visão esquemática da generalização/geração Figura 4.2 Processo evolutivo de construção Figura 4.3 Visão resumida do processo de construção de geradores de artefatos Figura 4.4 Visão detalhada do processo de construção de geradores de artefatos Figura 4.5 Construção do artefato-exemplo Figura 4.6 Definição do artefato Figura 4.7 Definição da linguagem de especificação Figura 4.8 Hot-spot Mining Figura 4.9 Construção do editor da especificação Figura 4.10 Programação do Gerador Figura 4.11 Geração do programa de geração do artefato Figura 4.12 Linha de comando do utilitário GERDESCR xii
13 Figura 4.13 Arquivo de make Figura 4.14 Codificação da Regra de Transformação Figura 4.15 Exemplo de regra de transformação Figura 4.16 Exemplo de decomposição da regra de transformação Figura 4.17 Criação do coordenador da geração Figura 4.18 Exemplo de uma Função de Coordenação de Geração Figura 4.19 Criação do verificador da especificação Figura 4.20 Implementação do gerador Figura 4.21 Montagem do Gerador Figura 4.22 Arquivo de make completo Figura 4.23 Processo de Compilação do Gerador Figura 4.24 Processo de Construção de Utilitários pós-geração Figura 4.25 Exemplos de Utilitários pós-geração Figura 4.26 Controle da qualidade Figura 4.27 Composição do gerador Figura 5.1 Origens das faltas de um artefato gerado Figura 5.2 Ferramenta de identificação de faltas nas etapas de construção Figura 5.3 Ferramentas de identificação de faltas nas etapas de geração Figura 5.4 Visão esquemática da introdução de faltas Figura 5.5 Composição do artefato gerado Figura 5.6 Prototipação + Evolução do gerador Figura 5.7 Abordagem de formalização [Fontoura 1999] Figura 6.1 ProtoBD: Visão Esquemática da Geração Figura 6.2 Tela de Manutenção de uma Entidade Figura 6.3 Implementação em três camadas de uma entidade do modelo de dados Figura 6.4 Estrutura de diretórios da aplicação gerada Figura 6.5 Arquivos de meta-descrição do artefato Figura 6.6 Definição da estrutura de menus da aplicação Figura 6.7 Dicionário de dados de um processo do diagrama de fluxo de dados Figura 6.8 Estrutura de menus Figura 6.9 Geração de diferentes linguagens Figura 6.10 Rotina de Escape Figura 6.11 Dicionário de dados para rotina de escape xiii
14 Figura 6.12 Trecho do meta-arquivo de descrição BD.MJAVA Figura 6.13 Regras de transformação associadas a rotina de escape Figura 6.14 Exemplo de expansão da rotina de escape Figura 6.15 Atributo Nome = Titulo de janela/campo Figura 6.16 Atributo título de janela/campo Figura 6.17 Função javascript de validação de campo Figura 6.18 Relação dicionário de dados X função de validação de campo Figura 6.19 Limite de 1 relacionamento com uma mesma entidade Figura 6.20 Múltiplos relacionamentos com uma mesma entidade Figura 6.21 Auto-relacionamento 1:N Figura 6.22 Auto-relacionamento N:N Figura 6.23 Exemplo de modelo de dados testado no ProtoBD Figura 6.24 Documentação em HTML Figura 6.25 Arquivos de meta-descrição Figura 6.26 Relação arquivo de meta-descrição Index.mhtml X arquivo do artefato Index.html Figura D.1 Diagrama de Classes da Documentação do Hot-spot xiv
15 Capítulo 1- Introdução Neste capítulo apresentamos os fatores que motivaram esta tese, os seus objetivos e sua organização Motivação Ao longo de sua carreira, um analista de sistema observa que grande parte das atividades de desenvolvimento e de manutenção consiste no reúso de artefatos que foram desenvolvidos anteriormente. A efetividade deste tipo de reúso depende da experiência do desenvolvedor. Na maioria das vezes, o reúso é realizado através de sucessivas operações de cortar/colar/modificar. A qualidade do artefato produzido varia conforme a quantidade dessas operações de reúso. Quanto maior a quantidade de adaptações, pior a qualidade, pois devido à sua natureza manual e repetitiva, estas operações freqüentemente levam a erros. Apesar das limitações, esta é provavelmente a prática de reutilização mais difundida. Uma possível forma de automação deste tipo de reúso empírico é através da utilização de geradores de artefatos. Um gerador de artefatos é uma ferramenta que produz um artefato a partir de sua especificação. Os artefatos gerados podem ser: programas completos, módulos, documentação, arquivos de configuração, planos de testes, etc. A substituição do reúso do tipo cortar/colar/modificar pela adoção de geradores de artefatos, somente é possível, caso o processo de construção de geradores seja efetivamente dominado pela organização e seja economicamente viável. Quando uma organização decide utilizar geradores de artefatos dentro dos seus processos de desenvolvimento, ela tem como principal objetivo a promoção do reúso de largo espectro [Pfleeger 1998]. Diferentes relatos apresentados na literatura [Biggerstaff 1998, Basset 1997] mostram resultados similares bastante expressivos em relação à adoção de geradores. Os principais benefícios esperados com a utilização de geradores são: Aumento de produtividade. Na maioria dos geradores, a maior parte de um artefato gerado corresponde a trechos fixos referentes a detalhes de 1
16 implementação. A geração automática destas partes fixas proporciona uma elevação da produtividade da equipe de desenvolvimento. Redução do tempo para o mercado. O tempo de desenvolvimento de um novo artefato fica reduzido ao tempo gasto para fornecimento de sua especificação. Prototipação. Para criar novas versões de um artefato basta ao desenvolvedor alterar a especificação fornecida ao gerador. Este baixo custo de criação de novas versões, permite ao desenvolvedor conduzir diversos experimentos para determinar o artefato mais adequado ao usuário. Qualidade do artefato gerado. Quando da utilização de um gerador podese pressupor que esteja correto, bem como que o artefato gerado também seja correto por construção. Caso o artefato gerado tenha problemas, estes estarão associados a problemas na especificação fornecida ao gerador. Geralmente o escopo de um gerador comercial é bastante restrito, isto é, alterações no tipo do artefato gerado estão limitadas ao conjunto de propriedades predefinidas do gerador. Com isto, nem sempre é possível encontrar no mercado um gerador que atenda exatamente às necessidades de geração de uma organização. A análise custo X benefício em relação à técnica de desenvolvimento a ser adotada, será favorável à utilização de gerador de artefatos, caso o artefato a ser desenvolvido esteja dentro do escopo do gerador disponível pela organização. Contudo, quando o artefato-alvo não se encaixar no escopo do gerador, o custo de produzi-lo torna impeditiva a utilização do gerador, visto que o artefato após ser gerado deve sofrer alterações para atender às necessidades do usuário. Com o objetivo de reduzir a distância entre o artefato desejado e artefato gerado, podem ser adotadas duas possíveis abordagens para construção de um gerador que atenda às necessidades da organização. A primeira seria a construção de geradores mais genéricos, possuindo um grande número de parâmetros que poderiam ser alterados em função do tipo de artefato a ser produzido. Esta abordagem pode tornar a estrutura do gerador extremamente complexa, pois o gerador embutiria inúmeras alternativas de implementação 2
17 que precisariam ser antecipadas pelo seu desenvolvedor e que, talvez nunca fossem usadas [Bassett 1997, CHSV 1997]. A segunda abordagem consiste na simplificação da construção de geradores específicos, ou seja, caso o gerador X não sirva para gerar o artefato ABC pertencente a determinado domínio de problema, a organização poderia criar um novo gerador Y específico para artefatos deste domínio e a seguir gerar o artefato ABC. O nosso trabalho descreve uma alternativa para esta segunda abordagem. A questão do processo de construção de geradores de artefatos não é uma novidade dentro da área de Engenharia de Software. Entendemos que o maior problema das propostas apresentadas, seja o de que elas freqüentemente requerem do desenvolvedor conhecimentos nas áreas de linguagens formais e de compiladores. Como este perfil de desenvolvedor não é comumente encontrado na maioria das organizações, a técnica de construção de geradores acaba sendo pouco difundida. 1.2 Objetivos Em nosso trabalho, no sentido de ampliar a utilização de geradores de artefatos, procuramos simplificar o seu processo de construção bem como dotá-lo de ferramentas que disponibilizassem a infra-estrutura necessária para sua implementação. Da mesma forma que a construção de um artefato através do reúso do tipo cortar/colar/modificar é iniciada a partir de um artefato desenvolvido anteriormente, o processo de construção de um gerador de artefatos pode utilizar este mesmo princípio de criação. O ponto de partida do processo é um artefato-exemplo que é sistematicamente transformado num gerador de artefatos no mesmo domínio de problema alvo do artefato-exemplo. Os principais objetivos a serem atingidos com este trabalho de tese são: Definir detalhadamente o processo de construção em relação, tanto às atividades a serem desempenhadas, como aos produtos envolvidos; Definir detalhadamente o processo de manutenção em relação, tanto às atividades a serem desempenhadas, como aos produtos envolvidos; Simplificar esses processos através da adoção de um processo dirigido por exemplo ; 3
18 Avaliar as vantagens da utilização de uma ferramenta CASE (Computer- Aided Software Engineering) como gerador de geradores de artefatos; Identificar e descrever as heurísticas empregadas na generalização de um artefato. 1.3 Gênese do Problema Durante uma boa parte do trabalho de doutorado, nossa área de interesse foi o campo da medição de software. Dentro desta área desenvolvemos alguns trabalhos [FS 1998, FSL 1998, FSF 1999] voltados para medição de software para pequenas organizações. Estes trabalhos visavam ao desenvolvimento da ferramenta COMPASSO, um ambiente para a geração de sistemas de medição customizável (Figura 1.1). O núcleo do COMPASSO é o meta-case Talisman [Staa 1993]. As facilidades disponibilizadas pelo Talisman para a customização de seus formulários de entrada e de seus arquivos de saída, são adequadas para permitir que o COMPASSO produza sistemas de medição compatíveis com a realidade de cada organização. A geração dos sistemas é feita a partir do modelo genérico de medição armazenado no repositório de dados do Talisman. Para construir o COMPASSO, definimos as seguintes etapas de desenvolvimento: 1) Especificação do Modelo Genérico: Definição do modelo de dados para sistemas de medição de software que representasse tanto as entidades relacionadas com métricas como aquelas associadas ao processo de medição. 2) Desenvolvimento de Protótipos: Verificar alternativas de arquitetura e de implementação mais adequadas aos sistemas de medição [LD 1998] para serem utilizados por pequenas empresas de software. 3) Internalização no Talisman: Definição dos formulários de entrada de dados e dos arquivos de saída do Talisman a partir de um protótipo selecionado. Estas definições correspondem a programas escritos na linguagem nativa do Talisman. Por meio desta linguagem é possível 4
19 acessar, editar e manipular os objetos definidos pelo meta-modelo do repositório da ferramenta ( seção 3.2). Figura 1.1 Visão Geral do COMPASSO As 2 primeiras etapas foram concluídas e alcançaram os objetivos esperados. Em relação aos protótipos, foram feitas implementações que acessassem banco de dados por meio de diferentes linguagens de programação, como por exemplo: VisualBasic, CgiLUA [HBI 1997] + HTML, e Java + HTML. Como resultado da análise dos protótipos decidimos adotar a arquitetura em 3 camadas [ED 1997, Caroli 1999] (Figura 1.2) utilizando a tecnologia Java-Servlet. Este protótipo era composto por arquivos em Java, JavaScript e HTML, distribuídos em diretórios correspondentes a cada classe do modelo. Neste tipo de aplicação, boa parte da funcionalidade corresponde à execução de operações básicas de manipulação de tabelas (incluir, alterar, excluir, e consultar), a arquitetura adotada expôs as similaridades entre os arquivos que compunham a aplicação. 5
20 Camada de Interface Subcamada de Apresentação Metrica_Form.HTML Metrica_Style.HTML Metrica_Script.HTML Subcamada de Acesso ao Negócio MetricaManut.JAVA Camada de Negócio MetricaConversor.JAVA Metrica.JAVA Camada de Persistência Subcamada de Acesso a Base de Dados MetricaBD.JAVA Base de Dados Interface ODBC Figura 1.2 Implementação em 3 camadas da entidade Métrica do COMPASSO Devido às similaridades presentes, utilizamos o reúso empírico do tipo cortar/colar/modificar durante a construção de uma versão mais completa do protótipo. A codificação de uma nova classe era baseada nos arquivos referentes a uma classe já implementada, na qual todas as referências ao nome e aos atributos eram substituídos pelos da nova classe (Figuras 1.3, 1.4). No protótipo, cada entidade do modelo estava mapeada em 4 arquivos em JAVA e em 3 arquivos em HTML (Figura 1.2-Camada de Interface). Como o modelo apresentava 15 entidades que poderiam ser criadas através deste tipo de reúso, as modificações envolveriam 105 arquivos. Como cada arquivo em média possuía 25 pontos de modificação, a versão final do protótipo seria resultado de cerca de 2500 operações de reúso do tipo cortar/colar/modificar. Esta grande quantidade de modificações provavelmente introduziria inúmeras faltas na aplicação final [Basset 1997]. A quantidade elevada e a natureza repetitiva destas operações levou-nos a desenvolver uma solução baseada em um gerador de artefatos. 6
21 <form name="tela" action=""> <div id="menu"> <input type="button" class="botaoon" name="btmenu" onclick="padlistamenu(); " value="menu"><br> <input type="button" class="botaoon" name="btgravar" onclick="padconf_gravacao();" value="gravar"><br> </div> <div id="cabecalho"> Cadastro de METRICA </div> <div id="formulario"> <table> <tr> <td align="right"> <b>idmetrica</b> </td> <td> <input type="text" name="idmetrica" class="clidmetrica" readonly maxlength="8"> </td> </tr> <tr> <td align="right"> <b>nmmetrica</b> </td> <td> <input type="text" name="nmmetrica" class="clnmmetrica" maxlength="20" onchange= "ESPvalida(document.TELA.NMMETRICA, savaantnmmetrica, 'S','N',0,0,1 );"> </td> </tr> Figura 1.3 Exemplos de pontos modificados num trecho em HTML public METRICA exibir(metrica ofpametrica) throws java.sql.sqlexception,classnotfoundexception { Class.forName(oCvaSISINFO.getDRIVERODBC()); java.sql.connection myconnection = java.sql.drivermanager.getconnection(ocvasisinfo.getodbc(), ocvasisinfo.getusuario(), ocvasisinfo.getsenha()); java.sql.statement exibirstatement= myconnect.createstatement(); java.lang.string sql; sql="select *"; sql=sql +" FROM METRICA"; sql=sql +" WHERE IDMETRICA ='" +ofpametrica.getidmetrica()+"'"; java.sql.resultset resultado = exibirstatement. executequery(sql); resultado.next(); ofpametrica.setidmetrica ( resultado.getstring("idmetrica") ); ofpametrica.setnmmetrica ( resultado.getstring("nmmetrica") ); ofpametrica.settxtmetrica( resultado.getstring("txtmetrica") ); exibirstatement.close(); myconnect.close(); return ofpametrica; } Figura 1.4 Exemplos de pontos modificados num trecho em Java 7
22 Em relação à etapa de internalização no Talisman, as atividades foram divididas na programação dos formulários de entrada das especificações e nos geradores de arquivos de saída. Os formulários são utilizados para o preenchimento dos dicionários de dados referentes a um diagrama de entidade-relacionamento. Estes formulários são versões simplificadas dos programas-exemplo disponibilizados pelo Talisman. Em relação à atividade de programação dos arquivos de saída, os arquivos em Java, JavaScript e HTML do protótipo deveriam ser redigitados dentro do Talisman e conectados através de funções que buscassem dados do repositório da ferramenta (Figura 1.5). A quantidade de arquivos e de conexões a serem feitas tornava inviável a codificação manual destes arquivos. Em função do retrabalho que envolveria a internalização dos arquivos do protótipos, começamos a desenvolver uma solução que automatizasse esta etapa. METRICA IDMETRICA NMMETRICA METRICA.JAVA public class METRICA { private String private String scvaidmetrica; scvanmmetrica; METRICABD.JAVA ofpametrica.setidmetrica ( resultado.getstring("idmetrica") ); ofpametrica.setnmmetrica ( resultado.getstring("nmmetrica") ); METRICA_FORM.HTML <td> <input type="text" name="nmmetrica" class="clnmmetrica" maxlength="20" onchange= Figura 1.5 Exemplos de geração dos arquivos de saída A partir deste momento, em função da experiência acumulada na criação de diferentes protótipos dentro do domínio de medição de software, da motivação inicial do projeto de um gerador para este domínio, bem como da necessidade de automatizar a própria construção do gerador, decidimos que o foco da trabalho de doutorado fosse deslocado para elaboração de um processo de construção de geradores de artefatos. 1.4 Organização da Dissertação 8
23 O capítulo 2 apresenta os conceitos básicos e os trabalhos relacionados utilizados ao longo da dissertação. A arquitetura padrão de geradores e metageradores são apresentadas. São analisadas algumas propostas de processo de construção de geradores. Neste capítulo, os principais conceitos de framewoks são apresentados. O capítulo 3 descreve os métodos, técnicas e ferramentas utilizados no processo de construção de geradores de artefatos. A adequação da utilização de um CASE como ambiente de geração é discutida. A abordagem de generalização de artefatos é apresentada. O capítulo 4 apresenta a descrição do processo de construção de geradores de artefatos. A etapa de construção do artefato-exemplo é ponto partida da construção do gerador. Ao longo do processo, o artefato-exemplo vai sendo generalizado até ser transformado num gerador. A etapa final de controle da qualidade é necessária para certificar que o artefato gerado está em conformidade com a especificação fornecida. O capítulo 5 é dedicado à questão do controle da qualidade na construção de um gerador. A abordagem empírica empregada é discutida, e também são apresentadas algumas referências de uma abordagem mais formal. O capítulo 6 apresenta um resumo dos experimentos realizados. São descritos sete estudos de caso que serviram para refinar o processo proposto e avaliar os impactos na evolução de um gerador. O capítulo 7 conclui o trabalho e apresenta sugestões para trabalhos futuros. A tese possui 6 apêndices. O apêndice A é um glossário dos principais termos utilizados ao longo da dissertação. O apêndice B descreve a BNF do arquivo de meta-descrição do artefato. O apêndice C mostra a lista das funções de transformação. O apêndice D apresenta o padrão de documentação utilizado para descrever o gerador construído. 9
Geradores de Artefatos: Implementação e Instanciação de Frameworks
Geradores de Artefatos: Implementação e Instanciação de Frameworks Luiz Paulo Alves Franca Programare Informática luizp@ism.com.br Arndt von Staa Departamento de Informática, PUC-Rio arndt @ inf.puc-rio.br