Geração Automática e Assistida de Interface de Usuário em Tempo
Transcrição
Geração Automática e Assistida de Interface de Usuário em Tempo
Universidade Federal do Rio Grande do Sul – UFRGS Programa de Pós-Graduação em Computação Mestrado em Ciência da Computação Geração Automática e Assistida de Interface de Usuário em Tempo de Execução Plano de Estudos e Pesquisa Aluno: Marcelo Mrack <[email protected]> Orientador: Álvaro F. Moreira <[email protected]> Co-orientador: Marcelo Pimenta <[email protected]> Porto Alegre, 16 de dezembro de 2005. Resumo Este trabalho apresenta uma proposta para geração de interfaces de usuário em tempo de execução e sem código-fonte. Para isso são utilizados metadados provenientes do próprio modelo de dados do sistema, heurísticas, conhecimento empírico, inferência de informações e um mecanismo de retroalimentação, o qual promove melhorias significativas na qualidade das interfaces geradas e a redução dos custos de construção. A idéia de utilizar metadados para geração da interface do usuário, mais precisamente telas de cadastro, não é nova. Trabalhos como [Gohil, 1999] e [Shirota, 2005] indicam sucesso na geração do código-fonte para essas interfaces a partir de informações extraídas da estrutura do modelo de dados do sistema. Embora essa abordagem seja interessante, uma perspectiva diferente pode ser dada ao assunto. Ao invés de gerar o código-fonte relativo às interfaces do usuário, opta-se pela geração direta dessas interfaces durante a própria execução do sistema. Nesse paradigma, os metadados são traduzidos nos elementos da interface do usuário durante a própria execução do sistema por um mecanismo interpretador. Experiências anteriores [Moreira e Mrack, 2002] e implementações disponíveis na Internet [Clifton, 2005] exploram essa alternativa. Entretanto, mesmo nessa abordagem muitas características devem ser explicitamente definidas pelo desenvolvedor para que a interface torne-se um componente funcional. Com o intuito de reduzir esse esforço, esse trabalho acrescenta quatro outros conceitos ao processo: o uso de heurísticas sobre o sistema, o conhecimento empírico da equipe de desenvolviemento, um conjunto de regras de inferência e um mecanismo de realimentação. Dessa forma, espera-se obter um mecanismo de geração de alto nível, capaz de reduzir significativamente o esforço dedicado à construção da interface do usuário. Visão Geral Um fator de suma importância para qualquer sistema é a interface do usuário. De fato, como afirma [Ambler, 1998] “…a realidade fundamental para um desenvolvedor de 1 aplicações é que a interface do usuário é o sistema para o usuário” . Tal posicionamento evidencia um ponto-chave para os desenvolvedores de sistemas: a construção da interface do usuário. Nos últimos anos o advento das interfaces gráficas de usuário modificaram bastante a forma com que as interfaces de usuário são construídas. Enquanto as antigas interfaces baseadas em caractere não possuem aparência e comportamento definido, nem tão pouco um sistema de eventos, as interfaces GUI apresentam semântica padronizada, elaborados mecanismos para tratamentos de eventos e uma diversidade de elementos gráficos [Galitz, 2002]. Essas características associadas ao comportamento orientado a ações, o qual permite ao usuário interagir com praticamente qualquer elemento da tela a qualquer momento, eleva o nível de complexidade para construção das inferfaces do usuário. Com o intuito de reduzir essa complexidade, ou pelo menos, torná-la gerenciável, existem no mercado as chamadas ferramentas RAD (Rapid Application Development). Essas ferramentas propõem-se a realizar esse trabalho através do uso de editores de interfaces gráficas, os quais trabalham com o conceito WYSIWYG (What You See Is What You Get), ou seja o que você vê (ou o que você desenha no editor) é o que você tem quando o sistema estiver em execução. Devido sua relativa facilidade de uso, essas ferramentas tornaram-se bastante populares e hoje são praticamente indispensáveis para construção de qualquer sistema com interface gráfica. No tocante as interfaces de usuário para sistemas de banco de dados, a realidade não é diferente, ou seja, devido a complexidade inerente do modelo de dados da aplicação, as interfaces do usuário acabam tornando-se complexas por conseqüência. Com o advento da modelagem complexidade torna-se cada vez mais presente. 1 Tradução livre orientada a objeto, essa Porém, como argumenta [Shirota, 2005], a existência de um modelo de dados fortemente relacionado a interface do usuário pode traduzir-se em ganhos para sua construção. Isso decorre do fato que muitas informações que devem estar presentes na interface do usuário podem ser inferidas do próprio modelo de dados facilitando o trabalho dos programadores. Trabalhos publicados por [Gohil, 1999], [Clifton, 2005] e [Aloia et all, 2003] reforçam essa idéia. Vislumbrando essa possibilidade, disponibilizam assistentes para frequentemente criação dessas as ferramentas interfaces. RAD Esses assistentes recolhem informações sobre o modelo de dados e produzem como saída o código relativo à interface do usuário. Esse código, com os devidos ajustes, entra em funcionamento em tempo reduzido. Embora essa desenvolvimento, abordagem com o apresente passar do ganhos tempo, nos quando primeiros o sistema ciclos cresce de e complexidades adicionais devem ser implementadas nas interfaces produzidas, essa facilidade inicial acaba acarretando problemas como a reformatação da interface produzida, a adequação do código gerado aos padrões utilizados pela equipe de desenvolvimento e outras características como estilo, aparência, usabilidade e comportamento de uso [Moreira e Mrack, 2002]. Uma abordagem diferente, explorada por [Moreira e Mrack, 2002] e [Clifton, 2005] é utilizar o modelo de dados como fonte de informações para construção da interface do usuário, com o diferencial que nenhum código-fonte é gerado no processo: informações sobre metadados do modelo de dados são traduzidas em tempo de execução por um módulo interpretador, de forma que a interface do usuário seja produzida durante a própria execução do sistema. As justificativas para essa abordagem incluem problemas relacionados aos geradores de código, como aderência a padrões de desenvolvimento, dificuldade para sincronia entre código gerado e código editado pelo programador, oneroso processo de compilação, empacotamento e distribuição de novas versões e a própria qualidade do código produzido. No tocante às vantagens do processo sem código-fonte citam-se agilidade na disponibilização de novas versões, exatidão do sistema produzido, prototipação instantânea e padronização no processo [Moreira e Mrack, 2002]. Embora [Gohil, 1999] demonstre que interfaces funcionais possam ser obtidas apenas com o uso de informações de metadados, a completude dessas somente é alcançada através da participação de um programador, o qual adiciona funcionalidades específicas como a dependência de controles, ajustes na aparência e a adição das regras de negócio, por exemplo. Quando da publicação de [Moreira e Mrack, 2002], muitas expectativas foram criadas em torno da abordagem de geração automática do sistema a partir dos metadados do modelo. Porém, quando mais estudos foram executados sobre o assunto, complexidades adicionais mostraram-se presentes, levantando questões sobre como manter o desacoplamento e a interação das interfaces geradas e as regras de negócio; como permitir customizações na interface produzida e como interligar todas as partes do sistema. Mantendo a proposta original de [Moreira e Mrack, 2002] onde as interfaces do usuário são geradas durante a execução do sistema e sem código-fonte, esse trabalho possui um foco específico, onde somente as interfaces de usuário destinadas à edição dos dados do sistema são geradas. São as chamadas telas de cadastro. Ao reduzir o escopo de atuação, muitas características ignoradas nos trabalhos citados podem ser exploradas mais detalhadamente, tais como a organização dos elementos na tela, adição de validadores de conteúdo, comportamento, aparência, usabilidade e outros aspectos visuais, buscando a completude mencionada por [Gohil, 1999]. Para realizar essa tarefa, é proposto o uso não de uma, mas sim de cinco fontes de informação para o mecanismo gerador. A primeira é o uso dos metadados, tal como propõem [Gohil, 1999], [Shirota, 2005], [Moreira e Mrack, 2002] e [Clifton, 2005]. Esses são traduzidoss durante a execução do sistema e originam as características principais, consideradas básicas para os elementos da interface gerada, como tipos dos controles na tela, domínios de valores e estruturas essenciais de ligação entre os elementos produzidos. A segunda é o uso de heurísticas, que permite a descoberta de propriedades e comportamentos com base em conceitos simples, porém nem sempre utilizados. Como exemplo simplista cita-se a escolha da ordem de apresentação dos campos na interface, o que pode ser feito seguindo a ordem de declaração dos atributos no objeto de negócio, sua obrigatoriedade ou nível de complexidade. A terceira é o conhecimento empírico, que permite a reutilização de soluções de sucesso, obtidas através de experiências anteriores. Esse tipo de informação é válido, principalmente no tocante à otimização das interfaces. A escolha do momento em que validadores de conteúdo devem ser aplicados, adição de suporte a operações de arrastar e soltar e a correta relação entre o tipo de dado e o controle de tela que o representa são apenas alguns exemplos. O quarto é o uso da inferência, a qual permite obter novas informações a partir de um conjunto inicial de valores. Nesse contexto enquadram-se a construção de mensagens de auxílio para o usuário, nomes para controles de tela e o preenchimento de valores default. Finalmente, como artifício para melhoria contínua das interfaces geradas, este trabalho sugere o uso de retroalimentação. Em outras palavras, um histórico de uso e configuração é continuamente armazenado. Assim, ao gerar as interfaces do usuário, o mecanismo interpretador soma às informações disponíveis no momento os resultados armazenados no histórico, utilizando para isso uma política de pesos e medidas. Dessa forma argumenta-se a possibilidade de obtenção de resultados cada vez melhores ao longo do uso. A motivação A experiência profissional como desenvolvedor de software para área administrativa e acadêmica na Universidade de Santa Cruz do Sul – UNISC evidenciou um problema comum a todos os tipos de sistemas produzidos: a demora na construção na interface do usuário. Nesse sentido, estudos foram realizados com o objetivo de reduzir o esfoço empregado na realização dessas tarefas. Como resultado surgiu o chamado projeto Metagen, um software destinado a geração das interfaces do usuário em tempo de execução tendo como base os metadados da própria aplicação. Este software permitiu a escrita do artigo Sistemas Dinâmicos Baseados em Metamodelos [Moreira e Mrack, 2002] e a disponibilização de um produto funcional. Como característica principal desse software estava a geração completa de interfaces de usuário para edição de dados e a não existência de código-fonte para esses elementos. Desde então inúmeros protótipos, estudos e implementações foram sendo desenvolvidos, permitindo avanços nos conhecimentos relacionados. A fim de continuar nessa área, um grupo de estudos foi reunido entre os colegas de trabalho com o objetivo de explorar essa idéia, criando uma empresa e tornando esse software um produto completo. Trabalhar esses conceitos na área acadêmica mostra-se como uma oportunidade única de aprofundamento nos aspectos teóricos do assunto, formando a base para uma implementação de porte comercial. Objetivos Este trabalho propõe uma extensão a mecanismos existentes para geração da interface do usuário, porém sob uma perspectiva diferenciada, onde além da não existência de código-fonte, informações subjetivas e históricas são utilizadas. Como objetivos desse trabalho espera-se: • Estudar os mecanismos existentes que utilizam metadados para geração de interfaces de usuário; • Estudar conceitos de IHC, como usabilidade, aparência e comportamento de forma que possam ser corretamente aplicados; • Estudar alternativas para o armazenamento e a consulta de informações históricas; • Definir um conjunto de regras heurísticas e de inferência, de forma que possam ser utilizadas em favor da geração da interface do usuário; • Definir mecanismos que permitam à interface gerada ser estendida ou modificada pelas vias normais de desenvolvimento (codificação) com a mínima dependência; • Definir um conjunto de metadados que possam ser incorporados aos dados da aplicação, facilitando o trabalho do programador; • Criar um protótipo funcional que utilize esses conceitos para gerar as interfaces de usuário; De forma geral, o objetivo desse trabalho é produzir interfaces de usuário funcionais em tempo de execução sem a geração de código-fonte, utilizando para isso (i) metadados extraídos do próprio modelo de dados do sistema, (ii) regras heurísticas e empíricas, (iii) inferência de informações e (iv) um mecanismo de retroalimentação. Em relação aos estudos anteriores realizados durante o projeto Metagen [Moreira e Mrack, 2002], esse trabalho acrescenta características importantes, com evidência para o uso de informações históricas, recurso que deve tornar o sistema pró-ativo nas mais variadas situações. Metodologia Para realização desse trabalho, a seguinte linha de pesquisa deve ser utilizada: 1. Coleta de materiais relacionados ao assunto: Obtenção da literatura relacionada, como livros, artigos técnicos e acadêmicos, congressos, grupos de discussão, contato com autores e desenvolvedores, produtos, implementações de referência, pesquisas e periódicos. 2. Revisão e documentação dos tópicos relevantes, no tocante a exploração e uso de metadados, regras de usabilidade e diversos conceitos sobre IHC. 3. Implementação contínua de protótipos a fim de validar os conceitos estudados. Esses devem ficar disponíveis no site http://merlin.dev.java.net e constituem-se, entre outros, de diagramas de caso de uso, seqüência, colaboração, pacotes de teste, documentação de projeto e relatórios. 4. Escrita de dois artigos sobre o tema com a finalidade de obter a qualificação necessária para aprovação no curso. O primeiro de ser enviado para o VII Simpósio Brasileiro de Fatores Humanos em Sistema Computacionais – IHC2006. O outro deve ser enviado para o Seminário Integrado de Software e Hardware – SEMISH2006. 5. Estudo dos recursos oferecidos pela linguagem de programação Java2 no que concernem ao assunto; salientando-se o uso de reflexão (essencial para trabalho com elementos gerados em tempo de execução), anotações (JSR 175 http://www.jcp.org/en/jsr/detail?id=175) e o pacote gráfico Swing, o qual deve ser utilizado no trabalho. 6. Estudo do framework de mapeamento objeto-relacional EJB3 (JSR220 - http://www.jcp.org/en/jsr/detail?id=220), o qual possui inúmeros recursos de metadados que podem ser utilizados no trabalho. 7. Estudo do framework Hibernate Annotations, outro framework de mapeamento objeto-relacional padrão de mercado que possui recursos de metadados para definição de validadores de conteúdo para os dados do modelo. 2 Java é escolhida como linguagem de implementação por sua característica de multiplataforma, aderência a diversos ambientes (cliente-servidor, web e ncamadas, etc.) e pela familiaridade com a linguagem. 8. Estudo de frameworks de validação de conteúdo para IHC. Esses validadores visam manter a integridade dos dados editados na interface do usuário e estendem os recursos contidos no item 7. 9. Estudo de patterns e técnicas que permitam criar um baixo acoplamento entre os elementos de interface gerados, bem como agregar recursos como flexibilidade, escalabilidade e manutenabilidade aos sistemas gerados. 10. Realização de relatórios periódicos sobre o andamento do trabalho, funcionando como marcos de checagem de progresso e/ou possível redirecionamento dos estudos. O conteúdo desses relatórios deve ser definido em conjunto com o professor orientador. 11. Seminário de Andamento, a ser realizado entre 15/05/2006 a 18/05/2006. Nele devem ser exibidos o escopo do trabalho, os objetivos, estudos realizados, exibição dos resultados alcançados até a data e prognósticos. 12. Estudo de mecanismos que permitam o armazenamento e a consulta de informações históricas, de forma que o recurso de retroalimentação seja viável. 13. Finalização e revisão do trabalho até 20/11/2006. 14. Envio do trabalho à banca examinadora até 30/11/2006. 15. Defesa da dissertação, até 30 dias após o envio para banca examinadora (conforme resolução para bolsistas). Cronograma Para implementação desses itens, o seguinte cronograma é previsto para o ano de 2006, bem como o já realizado durante 2005: Item 2006 2005 1 2 3 4 5 6 x x x x 7 8 9 10 11 12 x x x x x x x 13 Ago x Set x x Out x x x x Nov x x x x Dez x x x x x Jan x x x x x Fev x x x x x x Mar x x x x x x Abr x x x x x x Maio x x x x x x Jun x x x x x Jul x x x x x Ago x x x x x x x x x x x x x Set Out Nov Dez 14 x x x x x x Salienta-se que esse cronograma é uma previsão e, portanto, pode ser alterado devido necessidades ou conforme orientação dos orientadores bem como ajustes de percurso devido conclusões obtidas durante o seu desenvolvimento. Referências bibliográficas [Ambler, 1998] User Interface Design: Tips and Techniques. Ambler, Scott W.. [white paper]. 1998. Disponível em http://www.ambysoft.com/userInterfaceDesign.pdf no dia [25/08/2005] [Galitz, 2002] The Essential Guide to User Interface Design - An Introduction to GUI Design Principles and Techniques, Second Edition. Galitz, Wilbert O.. 2002. John Wiley & Sons, Inc. [Shirota, 2005] Automatic GUI generation from database schema information. Shirota , Yukari;Iizawa, Atsushi. Disponível em http://www3.interscience.wiley.com/search/allsearch?mode=viewselected&pr oduct=journal&ID=52072&view_selected.x=47&view_selected.y=2&view_sele cted=view_selected no dia [31/08/2005]. [Clifton, 2005] A Dynamically Generated XML Data Editor. Clifton, Marc. Disponível em http://www.codeproject.com/dotnet/xmldataeditor.asp no dia [30/08/2005]. [Aloia et all, 2003] Automatic GUI Generation for Web Based Information Systems. Aloia, Nicola; Concordia, Cesare; Paratore, Maria Teresa. 2003. Disponível em http://bibserv.isti.cnr.it/Dienst/UI/2.0/Describe/cnr.isti/2003A2-105?tiposearch=ercim&langver= no dia [30/08/2005]. [Moreira e Mrack, 2002] Sistemas Dinâmicos Baseados em Metamodelos. Moreira, Diego; Mrack, Marcelo. II Workshop de Computação e Gestão da Informação – Univates (artigo). 2003. [Gohil, 1999] Automatic GUI Generation. Gohil, Bharat. 1999. Dissertação. Bournemouth University, Reino Unido. Disponível em http://www.geocities.com/aliadams/AutoGUI.htm no dia [30/08/2005].