Prévia do material em texto
TESTES DE APLICATIVOS MÓVEIS AULA 4 Prof. Felipe Pedroti Raymundo 2 CONVERSA INICIAL Em conteúdos anteriores, pudemos adentrar um pouco neste mundo dos testes de software, especificamente dando uma olhada em um tipo de teste que não somente vai garantir que nossas funcionalidades possam ter a garantia de funcionamento, bem como não precisa ser aplicado somente em dispositivos móveis, que são os testes unitários. Conhecidos por serem testes de caixa branca (relembrando, são aqueles testes dos quais o desenvolvedor conhece as entradas, o funcionamento do código a ser testado e os resultados esperados), os testes unitários são amplamente utilizados em equipes com processos ágeis por meio do TDD, técnica que visa fazer com que código testável seja escrito desde o começo da implementação, fazendo um refinamento deste em seguida. Porém, uma parte importante do software móvel não consegue ser “validada” por teste unitários, devido a validar uma parte importantíssima da construção de um software móvel: a interface do usuário. Nesta etapa, daremos seguimento aos nossos experimentos mostrando o que são esses testes, sua importância no mundo móvel e como podemos fazer esse tipo de teste, seja em tecnologias híbridas, seja em aplicativos nativos. Créditos: Rawpixel.com/Shutterstock. 3 TEMA 1 – TESTES EM INTERFACES GRÁFICAS É inegável que os smartphones, juntamente com os aplicativos, trouxeram mudanças nas nossas vidas, seja de coisas corriqueiras, como olhar uma agenda, fazer uma ligação, conversar sobre um assunto, ou até para ler notícias e artigos por esses dispositivos, o que trouxe dinamismo e acesso fácil a informação. Por isso, ao pensar em um aplicativo, desde sua concepção até a última etapa de execução, devemos testá-lo para que a qualidade do produto seja garantida e ele fique um passo mais perto do sucesso. Testes são grande parte no todo quando falamos de qualidade do produto, e “a prática mostra que na maioria dos casos, usuários abandonam o app se o mesmo tiver problemas de funcionalidade, não importa o quão promissor e engajador ele pareça” (Yevtushenko; Yalanska, [S.d.]). Sabendo que, no geral, “comemos com os olhos”, um aplicativo agradável ao usuário, conciso e normalizado com os padrões que o usuário espera faz com que galguemos mais alguns passos rumo ao seu sucesso. Yevtushenko e Yalanska ([S.d.]) enumeram alguns tipos de teste em aplicativos que podem (e devem) ser aplicados em determinadas fases do desenvolvimento, porém especificamente vamos tratar três tipos de testes que envolvem testar diretamente a interface gráfica de um aplicativo. 1.1 Teste de usabilidade Segundo a NBR 9241-11:2002, usabilidade é “Medida na qual um produto pode ser usado por usuários específicos para alcanças objetivos específicos com eficácia, eficiência e satisfação em um contexto específico de uso” (ABNT, 2002). Teste de usabilidade são aqueles que vêm desde os estágios iniciais do projeto, verificando se o aplicativo em questão cumpriu com os objetivos previamente estabelecidos e teve uma boa resposta dos usuários. Yevtushenko e Yalanska ([S.d.]) afirmam que “O foco inicial deste tipo de teste é validar se o app é fácil e rápido de se usar, simples e garante a satisfação do usuário com toda a experiência”. Isso também é afirmado por Nayebi, Desharnais e Abran (p. 1, 2012), quando eles enumeram três aspectos importantes que devem ser considerados em usabilidade não somente aplicativos móveis, mas para qualquer tipo de software: ele deve ser de uso mais eficiente, levar menos 4 tempo para completar uma tarefa; ser fácil de aprender, quando operações podem ser aprendidas e executadas apenas por observação, e trazer mais satisfação, atendendo a expectativa dos usuários. Isso deve ser validado desde os primeiros passos da criação do protótipo ou dos wireframes (esboços iniciais) do aplicativo, lá atrás, bem antes da escrita de qualquer código. 1.2 Usabilidade em dispositivos móveis Com esse crescimento acelerado das tecnologias e a ascensão dos smartphones, um estudo apropriado para esse cenário teve de ser planejado e executado, visto que novos desafios seriam enfrentados, como limite de tamanho de telas, conectividade a redes e internet, bem como limitação da capacidade de processamento e de métodos de interação homem-máquina. Somado a tudo isso, os fabricantes vinham também com algumas restrições para os aplicativos executados naqueles sistemas operacionais. A Apple criou o que foi chamado de iOS Human Interface Guidelines, com características que vão desde os tipos de toque que um dispositivo com iOS permite ao usuário fazer, como ele deve realizar esses toques e até o tamanho de botões e outras características, sendo que esse guideline é validado pela empresa durante a validação de aplicativos submetidos à App Store. Parecido com a Apple, a Google, desenvolvedora do Android, criou o chamado Android User Interface Guidelines, em que, novamente, os desenvolvedores têm acesso a detalhes de todos os recursos de interface disponíveis que devem ser considerados ao criar aplicativos voltado a esse ambiente. 5 Créditos: Vitalii Vodolazskyi/Shutterstock. TEMA 2 – CONTINUANDO COM OS TIPOS DE TESTE DE INTERFACE Continuando nossa discussão sobre os tipos de teste que envolvem interface gráfica do usuário, vamos agora verificar um tipo de teste que atinge diretamente o usuário durante o uso do aplicativo. 2.1 Teste de performance Este teste é um dos que devem ser feitos para validar o comportamento do aplicativo em condições em que os recursos de processamento estão esgotados no dispositivo, e é aqui que testar diretamente em um dispositivo com hardware real vai mostrar alguns gargalos que passaram despercebidos durante o teste de usabilidade e mesmo durante o teste funcional do aplicativo. Esse tipo de teste vai checar não somente o desempenho do hardware em si, mas também o desempenho dos recursos de conectividade do aplicativo. Vai validar o comportamento do aplicativo em alguns cenários, como bateria baixa, pouco armazenamento e pouca memória disponível, entre outras situações. 6 Tal teste pode ser automatizado (como veremos nas próximas etapas), evitando que o desenvolvedor tenha que o fazer manualmente em vários dispositivos com vários cenários diferentes de hardware e software. 2.2 Teste de interrupção Este teste é importante, pois, como sabemos, problemas e outras atividades rotineiras no smartphone podem tirar o foco do aplicativo, colocá-lo em estado de suspensão, e isso pode afetar o desempenho dele, assim como os dados que estavam sendo trabalhados no momento da interrupção. Podemos citar aqui alguns tipos de interrupção mais comuns: • Ligações ou diferentes tipos de notificação. • Memória baixa. • Queda de conectividade a rede ou internet. • Qualquer tipo de reprodução de mídia. • Esgotamento total ou parcial da bateria do dispositivo. Baseados nessas informações, podemos chegar ao ponto crucial de todo o teste de interface: o design. TEMA 3 – NÃO DEVEMOS ESQUECER DO DESIGN Antes de continuarmos, vamos tomar a seguinte afirmação: temos que lembrar que todo produto digital, vulgo software, não é somente código escrito, mas sim um conjunto de interações, principalmente com o consumidor desse software, vulgo usuário. É claro que é bem melhor ter o software com código sendo executado e ver o que realmente está acontecendo do que somente testar “um produto de imaginação”, como muitos tratam os protótipos ou wireframes. Porém, devemos entender que, em um projeto de software, os testes devem ser feitos desde as fases iniciais até o final do ciclo de lançamento (lembrando aqui o Modelo V visto em contéudos anteriores). Com a modelagem inicial de um app, podemos dar uma ideia para o usuáriode o que ele vai ter no final do processo e receber feedback dele se isso vai solucionar os seus problemas ou causar mais. Por isso, vamos conhecer um pouco desse processo e de que como podemos aplicar os conceitos de teste estudados até agora nesse processo. 7 Créditos: Maicasaa/Shutterstock. 3.1 Prototipagem Não existem diferenças entre o processo de construção de aplicativos e de outros tipos de software se ambos forem dirigidos a usuários. A prototipagem é parte inicial do projeto e é aqui que o cliente vai começar a ver o projeto ganhando forma. Existem inúmeras ferramentas que simplificam e aceleram esse processo de prototipagem inicial, e isso tem de ser utilizado e muito na fase de design da solução, pois, novamente, é aqui que o usuário final vai ter uma ideia de o que será construído e é com esse protótipo que ele vai ter uma ideia se isso vai resolver seus problemas e suas dores. Desta forma, os desenvolvedores vão receber uma versão homologada da solução, na qual mudanças não serão feitas e ou não terão grande impacto na interface. Prototipar significa fazer com que, nos testes, o cliente, o designer ou potenciais usuários validem toda a estrutura em que vai haver interação deles. Aqui, há um ponto de atenção: não devemos confundir o protótipo com a versão final do aplicativo ou software, porque eles são feitos com uma finalidade específica e única: servir de validador para um produto, garantindo que as escolhas de design foram assertivas e as soluções propostas foram apropriadas e adequadas para a necessidade para a qual eles foram desenvolvidos. 8 3.2 Ferramentas para prototipagem Agora que falamos sobre os protótipos e como eles são importantes para uma validação da interface dos nossos aplicativos, vamos conhecer algumas ferramentas para nos auxiliarem neste fim. Aqui vamos entender o seguinte: um protótipo não necessariamente vai ter código, pois geralmente ele é produzido por um time que não tem esse conhecimento (o time de UI ou time de Frontend). Por isso, existem algumas ferramentas que fazem com que toda a construção criativa seja feita e demonstrada para o usuário para depois somente ganhar vida pela mão dos desenvolvedores. A primeira ferramenta que vamos conhecer é o Sketch, que está disponível para download para usuários do macOS com uma versão de avaliação de 30 dias. Com essa ferramenta, é possível criar toda uma aplicação somente tendo o seu design, validando a interação do usuário por meio de operações simuladas e navegação simulada. Figura 1 – Tela inicial do Sketch A segunda ferramenta que vamos conhecer é chamada de Moqups. Esta, além de ter o mesmo poder que a ferramenta anterior, tem uma versão de início gratuita em que é possível criar toda a árvore de navegação do software, juntamente com seu design, para que os testes possam entender o fluxo do aplicativo e imaginar sua navegação. Inclusive, a ferramenta vem com um projeto 9 padrão de wireframe de uma aplicação móvel para início rápido e aprendizagem da ferramenta. Figura 2 – Tela de um projeto de exemplo no Moqups Como uma terceira alternativa, vamos conhecer também o proto.io, que contém uma versão de avaliação. Com ela, é possível criar as telas utilizando o design de qualquer uma das plataformas disponíveis e fazer com que haja interação entre elas, de forma que o usuário tenha ideia da navegação. Sua facilidade de uso e também seus componentes já estão de acordo com os padrões de cada plataforma, auxiliando e muito os designers a projetar um software que seja agradável ao usuário e que siga as orientações de interface de cada plataforma, principalmente no que diz aos guidelines de cada plataforma. 10 Figura 3 – Tela do Proto.io com projeto teste carregado TEMA 4 – COMO TESTAR UMA INTERFACE DEPOIS DE CONSTRUIDA Até agora vimos os conceitos e abrangemos os testes de interface nas fases iniciais do projeto, nas quais ainda estamos elaborando o que será escrito, porém já imaginando um cenário futuro, em que temos o software construído, nossas funcionalidades validadas por meio dos testes unitários e implementadas em cada elemento. Como podemos validar se o clique do botão está disparando o evento correto ou se está sendo exibido o dado de forma correta? 11 Créditos: Aleksandr_a/Shutterstock. 4.1 Existem “testes unitários” para interface? Vamos voltar um pouco e relembrar o conceito de teste unitário: pedaço de software que testa se os resultados de operações estão corretos de acordo com como elas foram planejadas. Uma interface de usuário é um pedaço de software, podemos concordar com isso, mas como identificar se um texto foi exibido corretamente para um usuário? Um teste unitário garante que o texto foi gerado, mas sua exibição está de acordo? Testes unitários devem ser utilizados para garantir que o operacional do aplicativo está funcionando, porém é impossível fazer validações importantes, como se uma cor escolhida para o fundo está sobrepondo a cor do texto exibido, com um teste unitário (que deve ser simples e retornar asserções do tipo verdadeiro/falso). Além disso, uma validação da UI de forma manual ou automatizada (tema da próxima etapa) vai mostrar o que os nossos testes unitários não pegaram, por exemplo quando há alguma rotina que foi feita fora de um padrão de separação de classes, e o código está afetando a exibição da informação para o usuário. 12 4.2 Então, como testar de forma eficiente uma interface de usuário? Aqui, podemos elencar duas formas que vão resolver o problema: a primeira, como podemos imaginar, é o teste de usuário manual, em que distribuímos versões do aplicativo já com código implementado, e elas podem seguir o chamado roteiro de testes, que vai dizer um passo a passo para a funcionalidade, e o testador vai ser responsável por aprovar ou não o passo a passo, de acordo com o que ele viu ou fez para quebrar a interface. A segunda forma é um pouco mais prática, pois usa de automação para a realização do teste, seguindo scripts predefinidos pelo teste manual. Entraremos em detalhes deste assunto em etapa futura, mas podemos elencar alguns pontos que devemos considerar na hora de testar a interface de usuário: • Posicionamento, alinhamento, tamanho, comprimento e largura de todos os elementos da interface. • Tipos de dados que podem ser inseridos nos mais diversos tipos de caixa de texto, caracteres especiais e, principalmente, entradas inválidas. • Execução das funcionalidades do aplicativo. • Erros em dados. • Elementos de navegação. • Navegação em tabelas. • Barras de progresso. • Exibição e tratamento de erros. • Atalhos e itens de menu. • Botões de ação. TEMA 5 – O DESAFIO DO TESTE DE INTERFACE O termo UI (user interface), ou interface de usuário, às vezes é confundido com o termo GUI (graphical user interface) de forma errônea. A GUI é um tipo de UI que alguns softwares utilizam, fazendo uso de elementos gráficos construindo uma UI com as quais os usuários podem interagir. Isso faz com que o teste de UI seja um dos maiores e mais amplos tipos de teste que existem atualmente, dada a variedade de interfaces disponíveis hoje. E não vai muito longe: observe uma interface de um dispositivo com iOS e 13 a interface de um dispositivo com Android. Ambas têm as mesmas funcionalidades, mas com forma de interação totalmente diferente pelo usuário. Créditos: Production Perig/Shutterstock. 5.1 Checklist básico para testes de interfaces Pensando nisto, vamos ter em mente um pequeno checklist que devemos seguir quando estamos pensando em testar uma interface gráfica, que de tão ampla chega a ser impossível de tratar um capítulo somente. 1. Consistência: devemos verificar se nosso aplicativo está agradável aos olhos, validando se as cores, fontes e outros elementosvisuais estão de acordo com a proposta, sendo um teste manual na maioria dos casos. 2. Escrita: este ponto é fatal para alguns usuários, no qual devemos verificar se há erros gramaticais na aplicação, não somente em títulos, menus ou outras caixas de texto, mas também em mensagens de erro e outras janelas informativas ao usuário, sendo novamente um teste manual, podendo ser automatizado com uma ferramenta ortográfica. 3. Tipografia: são algumas perguntinhas que devemos responder para garantir que os textos são legíveis: O texto é fácil de ler? As cores não estão se misturando com o fundo da tela? Os usuários conseguem distinguir facilmente o que é um cabeçalho e o que é o corpo do texto? Novamente, aqui é um teste visual. 4. Comportamento dos componentes interativos: aqui, verificamos se os botões, cliques e toques de tela, operações de arrastar e soltar funcionam 14 como deveriam funcionar. Isso pode ser totalmente automatizado (veremos nas próximas etapas). 5. Validação funcional: as entradas produzem as saídas corretas? Por exemplo, se eu adicionar um produto ao meu carrinho de compras e se eu olhar o carrinho, o produto correto, com o valor correto e a quantidade correta, devem estar nele. Isso permite validações dos tipos de dado, como números negativos ou caracteres especiais. Isso tipicamente pode ser automatizado também. 6. Adaptabilidade: como vimos no início dos conteúdos, existem diversos tipos de dispositivos, com diversos tipos de tela, formatos e por aí vai. Aqui o tester deve garantir que os elementos de tela se adaptem e sejam exibidos da forma correta nesses diferentes cenários. Aqui também temos como automatizar esses processos. 5.2 Os desafios nos testes de interface Podemos entender até agora que os testes de interface não são somente de extrema importância, mas de extrema complexidade devido à ampla gama de soluções e interfaces disponíveis. Essa complexidade traz alguns desafios com os quais temos que lidar como profissionais. O primeiro grande desafio a ser vencido que podemos elencar é a volatilidade de uma interface. E faz muito sentido, pois é a parte do software com que realmente interagimos como usuários. Ela não somente deve estar de acordo com as propostas dos clientes e usuários que vão interagir com ela, mas também deve estar de acordo com as regras e os padrões determinados não somente pelo mercado, mas pelos guidelines das plataformas (como podemos observar no tema sobre usabilidade). Além disso, ainda em alguns países temos leis que devem ser seguidas para a construção dessas interfaces (principalmente leis de acessibilidade). Outro grande desafio a ser vencido é a lentidão nos testes de interface. Diferentemente de testes unitários, que devem ser rápidos, se observarmos o modelo de testes e verificarmos os testes de UI, eles serão mais demorados por terem muito mais nuances a serem verificadas do que pedaços de código, porém essa lentidão não deve ser muito acentuada, pois isso pode fazer com que o processo de QA fique lento e esses testes comecem a ser deixados de lado, o que é um perigo de falha gravíssima para o processo. 15 Por último, podemos citar o custo desse tipo de teste. A lentidão dos testes é um problema, porém o tempo necessário para criar a manter esses casos de teste é maior ainda. Dependendo da complexidade da interface, o time precisa de muito tempo para poder escrever e manter esses testes. Isso é um custo que deve ser observado, já que a grande maioria da equipe de teste não tem conhecimento para escrita de código, e essa responsabilidade tem que ser delegada a recursos que terão de ser custeados de uma forma ou de outra. Superar esses desafios vai muito das escolhas e da forma como o projeto foi planejado, principalmente a execução dos testes durante todo o ciclo de vida dele. Escolher uma forma automatizada de testes e/ou delegar as atividades para o teste manual devem ser muito bem planejadas e consideradas, para que a fase de teste não se torne um pesadelo. Crédito: TippaPatt/Shutterstock. FINALIZANDO Nesta etapa, pudemos ter uma visão dos testes de interface nos aplicativos móveis e o que isso pode impactar nos projetos de software, principalmente nos testes. Tivemos uma visão do que é o teste de interface, sendo ela o resultado que vamos "comer com os olhos" quando utilizarmos o aplicativo. Elencamos 16 também alguns dos tipos de teste que devem ser realizados nesse processo, começando com os testes de usabilidade, além de termos visto os aspectos mais importantes que devemos tratar em relação a usabilidade. Também pudemos dar uma olhada na usabilidade relacionada aos dispositivos móveis e em como as fabricantes trazem soluções e padrões que devem ser seguidos. Depois, continuamos a dar uma olhada nos tipos de teste de interface, quando falamos primeiro dos testes de performance, que vão checar o desempenho do aplicativo como um todo. Depois seguimos para conhecer os testes de interrupção e sua importância dentro dos cenários, visto que o dispositivo móvel pode sofrer interferências de estados internos sempre. Na sequência, tratamos um tema que muitas vezes pode até passar despercebido nas equipes, que é o design da interface. Ainda relembramos que aqui os testes também são importantes para garantir que o produto estará de acordo com o que o usuário esperava. Também conhecemos algumas ferramentas que podem nos auxiliar nesse processo criativo, mostrando soluções com que podemos desenhar o layout dos aplicativos, colocar ali interações para demostrar os fluxos do aplicativo, sem ter escrito nenhuma linha de código, validando a importância de prototipar nossas soluções. Também passamos a conhecer um pouco dos testes que serão feitos depois do software construído, já nas fases finais do processo de desenvolvimento. Reforçamos o conceito de que não existe teste unitário para interface e verificamos algumas formas eficientes de testar uma interface de usuário. Por fim, pudemos discutir um pouco sobre as dificuldades e os desafios dos testes de interface, enumerando um checklist básico que deve ser seguido para garantir que um teste de interface seja benfeito e conciso. 17 REFERÊNCIAS ABNT – Associação Brasileira de Normas Técnicas. NBR 9241-11: Requisitos ergonômicos para trabalho de escritórios com computadores. Rio de Janeiro, 2002. NAYEBI, F.; DESHARNAIS, J.-M.; ABRAN, A. The state of the art of mobile application usability evaluation. 25th IEEE Canadian Conference on Electrical and Computer Engineering (CCECE). Montreal, 2012. YEVTUSHENKO, A.; YALANSKA, M. The brief guide to testing mobile interfaces. Tubik. Disponível em: <https://blog.tubikstudio.com/brief-guide-to-testing- mobile-interfaces/>. Acesso em: 30 out. 2022.