Grupo de Interfaces Gráficas
Integrantes do grupo:
Miguel Argollo Jr. (Coordenador)
Carlos José Maria Olguín
Daniel Weller
Endereço:
Fundação Centro Tecnológico para Informática - CTI
Instituto de Computação - IC
Rodovia Dom Pedro I, km 143,6
13089-500 Campinas - SP
E-mail: miguel@ic.cti.br
Conteúdo:
Os produtos de software atuais são muito mais complexos do que eram há apenas alguns anos atrás. Paralelamente, nos útimos 10 anos o computador passou a ser utilizado por usuários leigos em computação, e a experiência desses usuários com produtos como pl
anilhas, editores de texto, e programas de apresentação os convenceu que um programa de computador pode ser fácil de usar. Parte dessa facilidade foi proveniente da utilização de interfaces gráficas homem-computador com elementos do tipo janelas, menus, m
ouse e ícones, que representam um grande avanço em tornar os computadores pessoais mais amigáveis.
Embora fáceis de usar, aplicativos com interfaces gráficas são difíceis de desenvolver, envolvendo paradigmas não familiares para grande parte dos projetistas de software tais como orientação a objetos e processamento dirigido por eventos.
Estão disponíveis no mercado várias ferramentas para desenvolvimento de interfaces gráficas que oferecem uma gama de funcionalidade bastante variável, e a escolha da ferramenta para um projeto pode ter conseqüências não somente em sua fase de desenvolvime
nto mas também na sua evolução, uma vez que algumas ferramentas permitem o desenvolvimento de código fonte portátil, isto é, que pode ser transportado para vários ambientes sem necessidade de modificações.
Por sua vez, o teste de aplicativos com interfaces gráficas também não é uma tarefa simples, e realizar tais testes manualmente é uma tarefa tediosa e pouco confiável. Encontram-se disponíveis no mercado algumas ferramentas que permitem automatizar a fase
de testes, mas que apresentam preço e funcionalidade bastante díspares, não sendo fácil a escolha de uma delas.
Embora o uso do ambiente MS-Windows já esteja consolidado no Brasil, a indústria nacional de software somente agora começa a produzir produtos de modo sistemático para esse ambiente.
É dentro desse contexto que o CTI, através do Programa de Qualidade e Produtividade em Software, decidiu montar um grupo com o objetivo de absorver tecnologia avançada para a produção de interfaces gráficas portáteis de alta qualidade e repassar essa tecn
ologia para a indústria nacional de software.
Neste documento procuramos, de forma simplificada, apresentar a experiência adquirida e as perspectivas atuais do nosso grupo, abordando o trabalho realizado nas áreas de portabilidade, testes de aplicativos e metodologia para desenvolvimento de interface
s gráficas.
Atualmente a Microsoft detém a maior parcela da base de sistemas operacionais instalados com a dupla MS-DOS e MS-Windows. Este fato faz com que as plataformas da Microsoft sejam o principal alvo dos desenvolvedores de software, acarretando uma grande conc
orrência. Embora uma pequena fração da base instalada de sistemas operacionais não seja Microsoft, o tamanho do mercado mundial de software (aproximadamente 200 bilhões de dólares/ano) torna não desprezível o oferecimento de aplicativos para outras plataf
ormas. Uma empresa que domine uma tecnologia que permita desenvolver produtos para o ambiente Microsoft sem abandonar as outras fatias do mercado, passa a ter uma importante vantagem competitiva em suas mãos e, portanto, portabilidade torna-se uma palavra
-chave nesse contexto.
A questão portabilidade encontra-se razoavelmente equacionada nas áreas de linguagens de programação, acesso a dados e comunicações através dos padrões ANSI C, SQL e TCP/IP ou OSI/ISO, entre outros.
O mesmo não se pode afirmar no caso de interfaces gráficas pois cada ambiente (MS-Windows ou OS/2, por exemplo) possui um conjunto de recursos básicos, o toolkit, para a implementação de interfaces gráficas, todos desenvolvidos de forma independente e não
padronizada. A falta de padronização acarreta a necessidade de se reprogramar totalmente os módulos de controle da interface gráfica quando se transporta um aplicativo para um ambiente distinto de seu ambiente alvo inicial. Essa reprogramação pode ser ex
tremamente cara pelo fato de, em geral, a maior parte do código de um aplicativo tratar sua interface gráfica.
Quando se consideram os diversos ambientes gráficos percebe-se que a funcionalidade básica oferecida é, em grande parte, idêntica, sendo que as principais diferenças estão relacionadas com a forma pela qual elementos da interface como barras de rolagem, b
otões e janelas são representados graficamente.
Uma vez que a maior parte dos ambientes gráficos apresenta um conjunto comum de objetos com funcionalidades idênticas, uma das soluções para o problema de portabilidade de interfaces gráficas é a definição e implementação de uma interface de programação (
API) padronizada que suporte esse conjunto comum e que o mapeie nos toolkits originais (Figura 1). Dessa forma, um aplicativo desenvolvido com a interface de programação padronizada pode ser facilmente transportado para diversas plataformas, preservando s
empre a aparência e funcionalidade, o look-and-feel, da plataforma na qual é executado. Várias empresas desenvolveram ferramentas baseadas em toolkits portáteis tais como Zinc, zApp e XVT.
Colocar aqui a figura correspondente
Figura 1. Mapeamento através de interfaces de programação padronizadas
Após ter realizado um levantamento das ferramentas disponíveis no mercado, o grupo escolheu o XVT para ganhar experiência no uso de tecnologia para a produção de interfaces gráficas portáteis. Essa ferramenta fornece uma API padrão que permite a implement
ação de tais interfaces e seu transporte entre os principais ambientes gráficos atuais (MS-Windows, MS-Windows NT, Presentation Manager OS/2, OSF/MOTIF e Macintosh).
A ferramenta apresenta características de prototipação rápida, permitindo que seus usuários simulem, na fase inicial do desenvolvimento, a execução da interface do aplicativo, possibilitando o reconhecimento de possíveis problemas de projeto [Argollo 1995
].
O XVT é composto por dois módulos principais: um editor de interfaces gráficas e uma biblioteca de funções multi-plataforma. O editor de interfaces gráficas permite a criação dos objetos da interface de modo interativo e gera um arcabouço da aplicação na
linguagem C/C++ com o código necessário para o controle da interface [XVT 1994]. A biblioteca multi-plataforma dispõe de primitivas para a manipulação dos objetos básicos de interfaces gráficas: janelas, menus, controles (botões de rádio, campos de edição
, tabelas, planilhas, etc.), e funções para operações gráficas, de impressão, manipulação do clipboard e de fontes de caracteres, etc.
Após ter utilizado o XVT para desenvolver várias aplicações e de tê-las transportado da plataforma MS-Windows para a plataforma OSF/MOTIF e vice-versa podemos afirmar o seguinte:
é possível desenvolver interfaces gráficas portáteis com a tecnologia existente desde que seja utilizada uma metodologia voltada para a obtenção de portabilidade;
normalmente as ferramentas não são orientadas para domínios específicos e, por isso, funcionalidades do tipo acesso a base de dados ou geração automática de relatórios devem ser implementadas através de pacotes específicos;
o código gerado pelas ferramentas não impacta o desempenho da aplicação final;
as ferramentas não permitem abstrair todos os detalhes de cada plataforma; por exemplo, o ambiente OSF/MOTIF direciona saídas impressas para um arquivo postscript, enquanto o MS-Windows as envia para o gerente de impressão.
Embora as afirmações feitas acima tenham sido observadas a partir do uso de uma única ferramenta, o XVT, em apenas dois ambientes distintos (MS-Windows e OSF/MOTIF), não existe razão técnica que as invalide quando consideradas outras ferramentas com as me
smas características ou outros ambientes.
O teste de aplicativos com interfaces gráficas homem-computador é uma atividade difícil de realizar porque a complexidade desse componente de software, notada através de características como processamento multi-tarefa, manipulacão direta de objetos com re
sposta ao usuário em tempo-real e processamento dirigido por eventos, é responsável por uma explosão combinatorial de cenários com as possíveis interações homem-computador que devem ser testadas.
Embora existam poucas referências sobre métodos e estratégias para teste de interfaces gráficas na literatura técnica, diversas ferramentas cujo objetivo é a automação desses testes estão disponíveis no mercado. Essas ferramentas utilizam o método "gravar
e repetir" para capturar tanto as ações do usuário sobre a interface quanto os resultados dessas ações. O conjunto de ações e resultados capturados são mapeados numa linguagem de programação e gravados em arquivos denominados scripts de teste. As ferrame
ntas permitem a repetição das ações do usuário e a comparação dos resultados obtidos através da execução automática dos scripts de teste.
Essa abordagem do problema exige que a interface gráfica a ser testada esteja operacional e executando de modo confiável para que o usuário possa gravar suas ações nos diversos cenários de interação. Essa é uma limitação importante porque a fase de testes
fica relegada ao final do desenvolvimento, quando talvez já não haja tempo disponível para realizá-la de modo adequado. Apesar disso, o fato das ferramentas repetirem os scripts de teste já gravados permite que testes regressivos sejam realizados sempre
que o software tenha sido modificado, o que é um passo importante para a obtenção de produtos robustos.
Com o objetivo de permitir o desenvolvimento de scripts de teste sem que a interface esteja implementada, foram criados mecanismos que permitem a especificação das ações do usuário em termos dos objetos presentes na interface gráfica. Esse novo enfoque do
problema tornou possível a geração de casos de teste a partir da especificação da interface gráfica, permitindo que a fase de testes seja realizada em paralelo com a fase de implementação.
O grupo de interfaces gráficas selecionou e adquiriu a ferramenta QA Partner que incorpora uma tecnologia moderna para testes automáticos de aplicativos com interface gráfica [Segue 1994].
O primeiro passo para o desenvolvimento de casos de teste com essa ferramenta é a declaração dos elementos da interface. Esse passo permite que os objetos presentes na interface sejam referenciados por nomes mnemônicos e facilita o desenvolvimento de scri
pts de teste robustos, uma vez que mudanças de posição, tamanho e rótulo dos objetos na interface não irão impactar de modo significativo os testes já desenvolvidos.
O passo seguinte é o desenvolvimento de casos de teste na linguagem 4Test que é orientada a objetos e possui uma sintaxe bastante semelhante à da linguagem C. A linguagem 4Test possui comandos que referenciam os objetos da interface através de seus nomes
mnemônicos anteriormente declarados. Por exemplo, o seguinte comando
GotoLine.Ok.Click () ;
especifica um clique no botão "Ok" da janela "GotoLine" do aplicativo sendo testado.
Com a ferramenta, os scripts de teste podem ser desenvolvidos de forma manual, sem a necessidade de o aplicativo estar operacional, ou automaticamente, com ajuda de um módulo que captura as ações do usuário, caso o aplicativo tenha uma versão executável d
isponível. Os scripts de teste desenvolvidos controlam a execução do aplicativo em análise, simulando a interação com o usuário. A ferramenta se encarrega de comparar os resultados do programa testado com os resultados esperados. Tal comparação pode verif
icar o conteúdo de mensagens de erro apresentadas em janelas de diálogo, conteúdo de arquivos ou de áreas gráficas, etc.
O uso efetivo das ferramentas para teste não prescinde do emprego de métodos viáveis e bem definidos que permitam criar casos de teste que cubram todos os objetos da interface gráfica de uma aplicação e todos os possíveis cenários de interação homem-compu
tador. O grupo de interfaces gráficas tem um projeto em andamento cujo objetivo é investigar técnicas e desenvolver um método para teste de interfaces gráficas [Villaça 1995].
O conceito de sistema computacional modificou-se substancialmente com o surgimento das interfaces gráficas. Sua definição e seu processo de desenvolvimento tornaram-se mais abrangentes, a partir da intensa proliferação e uso dos computadores pessoais. Hoj
e, com os computadores constituindo-se em bens de consumo há um redirecionamento das indústrias de software para atender novos nichos de mercado, compostos por faixas mais amplas e diversificadas de usuários.
As preocupações atuais da indústria de software são diferentes daquelas de anos atrás. Basicamente, hoje há uma preocupação crescente tanto em relação à apresentação do produto quanto às necessidades dos usuários, que passam dessa maneira a ter um papel c
entral no desenvolvimento de interfaces gráficas [Norman 1986, Laurel 1990, Heckel 1991].
A abordagem para desenvolvimento centrada no usuário provocou uma ampliação do conceito tradicional de desenvolvimento de sistemas para além dos requisitos funcionais do aplicativo, incluindo, agora, fatores subjetivos relacionados com o conjunto de inter
ações do usuário, essenciais para o design de interfaces com qualidade [Winograd 1985]. Em linhas gerais, esta abordagem destaca a inadequação dos métodos tradicionais para desenvolvimento de sistemas com interfaces gráficas, explicitando uma questão acer
ca da visão errônea atribuída ao design e ao desenvolvimento de interfaces [Kay 1990, Norman 1990, Hix 1993].
"A postura de que o processo de design da interface com o usuário não é necessário, podendo ser realizado simplesmente durante a finalização total do desenvolvimento, é ingênua. Infelizmente essa atitude tem prevalecido e tem contribuído para a imagem de
que as indústrias de software desenvolvem sistemas não usáveis." [Browne, 1994, p. 20]
Vários estudos mostram o impacto financeiro e a importância das interfaces gráficas. Em [Browne 1994], por exemplo, é apresentado um quadro quantitativo onde cerca de 55% do código total pertence aos elementos de interface, aproximadamente 30% do custo to
tal de desenvolvimento do aplicativo está concentrado na interface e 60% do custo na fase de manutenção (responsável por 60% do custo total do aplicativo) está relacionado com alterações na interface.
O resultado deste e de outros estudos quantitativos oferecem argumentos objetivos sobre o papel e o lugar das interfaces gráficas no processo de desenvolvimento e justificam de forma indiscutível a necessidade de utilização de novos métodos de desenvolvim
ento, para diminuição do custo total do sistema e conseqüente aumento da produtividade da indústria de software. Diante da importância financeira e da complexidade do tema, muito tem sido discutido e vários métodos de desenvolvimento para aplicativos com
interfaces gráficas foram propostos [Nielsen 1993, Hix 1993, Browne 1994, Carlshamre 1994].
Nos diversos métodos para desenvolvimento identificamos certas semelhanças, que formam uma base comum. A primeira semelhança está relacionada com a utilização de considerações originárias da abordagem centrada no usuário [Norman 1986]. A segunda correspon
de ao consenso de que uma boa interface deve ser transparente e permitir o acesso fácil à funcionalidade da aplicação. E a terceira está relacionada com a utilização do conceito de usabilidade como parâmetro central para desenvolvimento do aplicativo e pa
ra avaliações em relação à qualidade da interface. Mas, como elaborar e desenvolver uma interface?
Para tratar esta questão, segundo [Nielsen 1993], é necessário diminuir o caráter subjetivo da avaliação de uma interface, que normalmente gira em torno da usabilidade do aplicativo. Com este objetivo, Nielsen associa cinco atributos concretos e mensuráve
is ao conceito de usabilidade, os quais auxiliam na quantificação de questões relacionadas às condições oferecidas aos usuários na utilização da funcionalidade do aplicativo. Os atributos de usabilidade são:
Facilidade de aprendizado
Eficiência de uso
Facilidade de memorização
Baixa taxa de erros
Satisfação subjetiva
Nielsen, a partir dessa associação, concentra-se no processo de desenvolvimento e estabelece o que denominou Engenharia de Usabilidade, onde são propostas atividades e heurísticas necessárias para a obtenção de um produto com alto grau de usabilidade.
Basicamente, na Engenharia de Usabilidade é apresentado um roteiro de onze fases que, independente do tipo de interface considerada, podem ser realizadas para o aumento da usabilidade. No roteiro, apresentado na tabela 1, há uma tentativa de se definir fa
tores críticos para a usabilidade do aplicativo, procurando-se, através de um desenvolvimento interativo, balancear os cinco atributos de usabilidade para obter produtos de software com um grau de usabilidade satisfatório.
Nem sempre é possível realizar todas as fases do roteiro. Afinal, a pressão do tempo e dos custos são dependentes do projeto e da possibilidade econômica das empresas. Assim, nos parece necessário efetuar uma análise e possível redução do ciclo mostrado n
a tabela 1 adaptando-o ao contexto brasileiro.
Colocar aqui a tabela correspondente
Tabela 1. Ciclo de vida da Engenharia de Usabilidade [Nielsen 1993]
O grupo tem como objetivo elaborar uma metodologia para desenvolvimento de interfaces gráficas, que equacione da melhor maneira possível as questões relacionadas ao custo/benefício e que seja viável ao perfil das empresas brasileiras desenvolvedoras de so
ftware.
O uso de interfaces gráficas como meio de comunicação com programas de computador é mandatório nos produtos de software atuais; longe de um simples modismo, esse mecanismo permite que usuários de programas de computador encontrem uma facilidade muito gran
de para desempenharem suas tarefas.
Dois fatores fundamentais para a implementação de uma boa interface gráfica são a tecnologia e a metodologia de trabalho empregadas.
A tecnologia existente no mercado para implementação de interfaces gráficas já se encontra bastante estável, como demonstra a experiência narrada neste trabalho no uso de ferramentas que tratam dos aspectos de portabilidade e de teste de aplicativos com i
nterfaces gráficas.
Metodologias específicas para desenvolvimento de software com interfaces gráficas foram propostas recentemente e, embora importantes, ainda são pouco empregadas pela indústria de software. A importância dada aos futuros usuários dos produtos de software d
urante a fase de definição da interface surge como um importante ponto comum entre todas as metodologias que estão sendo propostas.
De forma semelhante ao que acontece em outras áreas, entre o surgimento de uma tecnologia e seu emprego industrial decorre um período de tempo ocasionado pelas dificuldades que as empresas encontram para dominar e incorporar a nova tecnologia. Neste ponto
, a atuação de centros difusores de tecnologia é de extrema importância pois permite que empresas possam incorparar mais rapidamente novas tecnologias em seus processos produtivos.
O CTI vem trabalhando no processo de absorção e transferência de tecnologia para a produção de software através do Programa de Qualidade e Produtividade em Software (PQPS), um de seus três programas tecnológicos, procurando os mecanismos mais adequados à
s necessidades dos interessados. O trabalho apresentado neste artigo é um dos realizados no âmbito do PQPS, e os resultados obtidos até aqui indicam o acerto do rumo adotado.
[Argollo 1995]
Argollo Jr., M.T. e Scarpelini, S., "Uma Experiência em Portabilidade de Interfaces Gráficas", Revista do Instituto de Informática da PUCCAMP, Vol.3, Nro.1, Janeiro/Julho 1995.
[Browne 1994]
Browne D., STUDIO: Structured User-Interface Design for Interaction Optimisation. Prentice Hall, 1994.
[Carlshamre 1994]
Carlshamre P., Lowgren J. e Rantzer M., Usability Meets the Real World: A Case Study of Usability-Oriented Method Development in Industrial Software Production. Em Proc. 4th Int. Symp. Human Factors in Organization Design and Ma
nagement (ODAM), Amsterdam: Elsevier, 1994.
[Heckel 1991]
Heckel P., Software Amigável: Técnicas de Projeto para uma melhor Interface com o Usuário. Editora Campus, Rio de Janeiro, 1991.
[Hix 1993]
Hix D. e Hartson H., Developing User Interfaces: Ensuring Usability Through Product & Process. John Wiley & Sons, Inc, 1993.
[Kay 1990]
Kay A., User Interface: A Personal View. Em The Art of Human-Computer Interface Design. Addison-Wesley Publishing Company, 1990, pp. 191-207.
[Laurel 1990]
Laurel B., Introduction. Em The Art of Human-Computer Interface Design. Addison-Wesley Publishing Company, 1990, pp.xi-xvi.
[Nielsen 1993]
Nielsen J., Usability Engineering. AP Professional, 1993.
[Norman 1986]
Norman D., Cognitive Engineering: Em User Centered System Design: New Perspectives on Human-Computer Interaction. Lawrence Erlbaum Associates Publishers, 1986, pp. 31-61.
[Norman 1990]
Norman D., Why Interfaces Don't Work. Em The Art of Human-Computer Interface Design. Addison-Wesley Publishing Company, 1990, pp. 209-219.
[Segue 1994]
Test Builder's Guide, Segue Software, Inc., 1994.
[Villaça 1995]
Villaça, A. M., Introdução ao Teste de Interface Gráfica Homem-Computador, Relatório Técnico, Instituto de Computação, Fundação Centro Tecnológico para Informática, 1995.
[Winograd 1985]
Winograd T. e Flores F., Understanding Computers and Cognition. Ablex, Norwood, 1985.
[XVT 1994]
Guide to XVT Development Solution for C, XVT Software, Inc., 1994.