Olá pessoal, este artigo foi escrito por Tiago Matos e Gustavo Pires, alunos da Unifacs – Universidade Salvador, em um trabalho realizado para a matéria Engenharia de Software lecionada pelo professor Alex Coelho.
Resumo. O presente artigo aborda a importância da fase de testes de software para aplicativos móveis visando minimizar a quantidade de falhas que o software possui ao entrar em ambiente de produção. Durante o artigo, será levado em consideração os diversos tipos de ambientes existentes e o crescimento acelerado do mercado de smartphones e tablets.
Palavra-chave: Aplicativos móveis, Mobile, Teste de Software.
Introdução
A era dos ambientes móveis como smartphones e tablets já é uma realidade que surpreende as pessoas a cada dia. Em 2001, a Apple levou mais de um ano para vender um milhão de iPods. Em 2011, um milhão de iPads foram vendidos em apenas um dia. Essa tecnologia proporciona uma série de vantagem para o usuário como, compartilhamento de arquivos em tempo real, utilização de rede social, trocar mensagens de texto, ou seja, a conexão com o mundo.
Os grandes propulsores dessa tecnologia já afirmam que o mundo caminha para ser mobile. Os usuários bem informados já sabem que as plataformas móveis são peça-chave para comunicar-se com o mundo em busca de informações.
O uso frequente da tecnologia móvel despertou o interesse de muitos fabricantes e desenvolvedores a criar aplicativos para os diversos tipos de dispositivos. Mas, quando se fala em plataforma mobile, eles se deparam com algumas “barreiras” de desenvolvimento. No mundo web, por exemplo, a diferença está basicamente nos navegadores, com dominância do Internet Explorer e Firefox, que trazem diferenças para apresentar os sistemas baseados em Web, já o mundo mobile é muito mais híbrido e “despadronizado”, com uma grande variedade de fabricantes de aparelhos e modelos.
Devido aos diversos modelos, marcas, linguagens dos dispositivos móveis é que este artigo foi escrito para fazer com que os desenvolvedores entendam a importância de realizar a fase de teste de software, no desenvolvimento de aplicativos mobile, antes de colocar em ambiente de produção.
Na seção 2 serão abordados os assuntos relacionados a Testes e Aplicativos Móveis. Na seção 3 será explicado como deve ser feito os testes em aplicativos móveis e por fim serão feitas as Considerações Finais.
Testes e aplicativos móveis
Teste de software é uma fase de desenvolvimento em que se testa o sistema com o intuito de localizar algum evento inesperado e corrigi-los, pela equipe de desenvolvimento, antes da entrega final. A fase de teste visa, também, analisar se o devido sistema está cumprindo com o propósito para qual foi projetado. Através das características da fase de testes, é comum se dizer que sua natureza é “destrutiva”, e não “construtiva”, pois visa o aumento da confiança do sistema através da descoberta de seus problemas.
Esta fase é de suma importância para o sucesso de qualquer software, já que o conceito de teste de software é geral para as mais diversas modalidades. Em ambientes móveis, como smartphones e tablets, deve-se obter uma maior atenção durante a etapa de testes, pois trata-se de uma tecnologia muito recente sem muitos estudos e experiências comparadas a outros ambientes, como desktop. A imensa variedade de modelos de smartphones obriga os desenvolvedores a se dedicar cada vez mais para acompanhar a demanda de mercado, como por exemplo, o tamanho de tela que é uma característica que se modifica a cada lançamento.
Alguns pontos relevantes em relação aos smartphones devem ser analisados antes de iniciar o desenvolvimento e de definir tecnologia, para que assim, o processo de análise de teste seja mais objetivo, são eles: sistema operacional, desempenho, usabilidade, segurança e recurso do aparelho.
Sistema Operacional: os sistemas operacionais (SO) que se destacam com mais frequência na dinâmica do mercado atual são, o IOS da Apple, Android da Google e o Windows Phone da Microsoft, porém ainda sem muita expressividade. Diante desses três principais SO´s disponíveis no mercado, deve haver uma atenção especial para versões do aplicativo para que funcione corretamente nos diferentes tipos de SO´s.
Desempenho: um aplicativo embarcado, ou seja, um aplicativo que roda de fato no dispositivo tem melhor desempenho do que aquele aplicativo web, mesmo que em versão mobile. A diferença é que no nativo, todas as imagens e textos estáticos já estarão carregados no aparelho e o que trafega é apenas os dados que serão populados, o que deixa o aplicativo mais rápido. E na versão web ao abrir qualquer página, será obrigatório baixar todo o conteúdo que está sendo visualizado.
Usabilidade: diante de tanta incompatibilidade e limitações dos recursos dos navegadores web é que uma versão nativa será mais proveitosa para o usuário, pois considerando que ele já esteja acostumado com os recursos do seu aparelho, não terá dificuldade em utilizar o aplicativo.
Segurança: aplicativos nativos possuem recursos de segurança mais aprimorados do que versão web. Para quem usa e instala o aplicativo, as informações podem ser criptografadas para envio e descriptografadas no cliente. Assim, seus sistemas não ficam expostos para toda a Internet – apenas os clientes terão acesso aos serviços.
Recurso do aparelho: a briga para produzir aplicativos compatíveis com os modelos mais modernos é o maior desafio dos desenvolvedores, pois a cada dia os recursos tecnológicos equipam os aparelhos com câmeras e filmadoras poderosas, GPS, bússola, tocador de música, etc. Apenas aplicativos nativos tem o poder de interagir com esses recursos do dispositivo, pois para utilizá-lo algumas APIs do SO são necessárias e como seu núcleo se protege de acessos externos, por motivo de segurança e restrição de linguagem, as versões web não tem a capacidade de realizar estas integrações.
Plataforma de desenvolvimento: cada SO tem linguagem e ferramentas de desenvolvimento próprias. Assim, um aplicativo que funciona no IOS, não irá funcionar no Android e vice-versa. Em resumo, terá que ser desenvolvido um aplicativo para cada Sistema Operacional. Neste caso, a versão web se comporta melhor por ser mais genérica, dependendo apenas do browser utilizado.
Testes nos aplicativos móveis
Nesta seção, serão abordados os principais testes executados em aplicativos móveis com a finalidade de se obter um software de qualidade para o usuário final.
O primeiro tipo de teste é o de compatibilidade. Devemos saber que todo aplicativo interage e se comunica com o hardware, sistema operacional e tipos de rede diferente. Assim, o teste de compatibilidade visa analisar a comunicação do aplicativo com os recursos de hardware disponíveis.
Porém, cada fabricante desenvolve o seu próprio hardware e por isso é de suma importância conhecê-los para aperfeiçoar cada vez mais o aplicativo. Mas, realizar testes com cada um desses hardwares existentes seria um tarefa hercúlea, para isso, existem alguns padrões de desenvolvimento que devem ser seguidos e que são compatíveis com os padrões utilizados pelos fabricantes no desenvolvimento dos seus hardwares. Seguindo estes padrões teoricamente seu aplicativo estará compatível com os mais diversos modelos de dispositivos.
Ter total compatibilidade com o ambiente de produção é imprescindível para o sucesso do aplicativo, caso contrário poderão acontecer eventos indesejáveis como lentidão, perda de dados, e até mesmo travamento do aplicativo ou SO. Isso certamente resultará na irritação total do usuário. A Apple, por exemplo, não oficializa nenhum aplicativo antes de submeter à testes rigorosos. Isso é uma norma de qualidade dessa renomada empresa para garantir a satisfação total dos seus usuários.
Uma vantagem em desenvolver aplicativos sob padrões é que durante a atualização do SO o aplicativo passa por pouca ou nenhuma alteração.
Um teste de compatibilidade de grande importância é sobre a conexão a redes com diversos parâmetros. Por serem móveis, devem estar aptos a se comunicar com os mais variados tipos de rede. Com isso, deve-se observar a capacidade e a velocidade de operação do aplicativo em diversas bandas de conexão. O ideal é que o aplicativo consiga funcionar bem com a menor banda possível.
O Segundo tipo de teste é o de mobilidade ou interoperabilidade que é a capacidade do aplicativo se comunicar com outros aplicativos. Atualmente, o compartilhamento de informações é tudo, então quanto maior o poder de comunicação do sistema mais vantagem o usuário terá.
Nestes testes são avaliados se o aplicativo trabalha com padrões abertos para a comunicação, que possibilita a interação, com facilidade, com outras aplicações e aparelhos e vice-versa.
O terceiro tipo de teste é o de usabilidade que foca seus estudos para o uso diário dos usuários.
O touchscreen é um recurso largamente utilizado em ambientes móveis que oferece aos usuários uma facilidade de uso imensurável. Para os desenvolvedores, isso pode se tornar uma armadilha, já que se na produção de um novo aplicativo não for atingido o nível de experiência e exigência do usuário, o produto estará fadado ao insucesso. Por isso, o ideal é realizar os testes de usabilidade diretamente com os usuários público-alvo, colocando-os em pronto uso de forma que a equipe de teste possa avaliar o seu feedback durante esta tarefa.
Após esta simulação, tem-se um material rico para elaborar uma visão clara sobre o aplicativo e analisar o nível de usabilidade do mesmo. O mais importante é que se o software apresentar falhas de usabilidade, esta é a hora de corrigi-los antes que entre no mercado ou no ambiente de produção.
O quarto tipo que vamos abordar da nossa lista de testes para aplicativos móveis são os testes de desempenho que se baseiam na identificação e eliminação de gargalos de desempenho com o objetivo de descobrir o local da lentidão do sistema para, logicamente, aperfeiçoar o seu código e tornar o aplicativo mais leve possível. Vale lembrar que muitos dispositivos atuais foram fabricados focado no baixo custo, devido a isso, quanto mais leve o seu aplicativo for, melhor será para este nicho com hardwares inferiores.
Nesses testes colocamos o aplicativo para lidar com condições de alta carga e estresse e com um grande número de solicitações em cada uma de suas funções para verificar como o mesmo se comporta.
O quinto tipo é bem atual e reflete muito nas novas tecnologias da internet, ele é o teste de sincronismo. O uso simultâneo e crescente de smartphones, tables e pendrivers, provocou uma preocupação sobre a sincronização de dados entres estes dispositivos. Queremos que nossos arquivos continuem íntegros a todo instante, pois seria uma loucura ter uma versão diferente do mesmo arquivo salvo em cada um dos dispositivos. Para isso, existe a tão falada tecnologia de dados na nuvem da internet, na qual depositamos nossos arquivos com o intuito de resgatá-los quando desejar a partir de qualquer ambiente. É possível editar os arquivos em um dos nossos dispositivos e ao final sincronizá-los atualizando os arquivos na nuvem que deixará disponível sempre a versão mais recente.
Este é só um exemplo de sincronismo presente no cotidiano dos usuários, mas também é possível sincronizar entre os próprios dispositivos como, por exemplo, entre um computador e um smartphone e vice-versa.
Realizar testes para que o aplicativo consiga sincronizar com o maior número de plataformas possíveis tornou-se um dos principais testes nos aplicativos para dispositivos móveis para que o usuário tenha um desempenho cada vez melhor. Os testes são realizados verificando sempre se os pacotes de dados enviados chegam a seu destinatário com sua total integridade. No meio da transação verifica-se a quantidade de pacotes perdidos e todos os reenvios de pacote que são solicitados. Este caso acontece em redes com protocolo TCP/IP, em conexões via bluetooth e USB.
Se existe muita perda de pacotes e reenvios, é sinal que a sincronização do dispositivo não está tão eficiente, mas se o resultado final conseguiu reestabelecer todas as conexões e recuperar todos os pacotes, já é um bom sinal.
O sexto e último tipo de teste é o funcional, que é o mais importante, pois visa verificar se o aplicativo está executando as tarefas conforme foi projetado. Nesta tarefa, são usadas as especificações que foram desenvolvidas com base no levantamento de requisitos e validadas pelo grupo do projeto. Durante o processo são verificadas uma por uma para garantir que todos os requisitos foram implementados e estão funcionando de maneira correta. Esse tipo de teste tem o intuito, também, de evitar a entrega de um software descondizente com o seu propósito.
Considerações finais
Os testes são imprescindíveis quando se deseja obter um software de alta qualidade. Em se tratando de ambiente móvel, por ser uma tecnologia muito recente, devemos seguir a risca o conceito de testes de softwares. Devemos observar, também, alguns tipos de testes em especial, pois os dispositivos são desenvolvidos para a comunicação em tempo real, portanto a carga de testes de conectividade e nos padrões de comunicação devem ser maior do que em dispositivos comuns como desktops.
Como a maioria dos dispositivos oferecem telas touchscreen, à questão da usabilidade tem um caráter importantíssimo no objetivo de atingir o potencial máximo do aplicativo, e apenas realizando testes podemos trabalhar com os dados reais necessários para tomada de decisões que melhorem a utilização do aplicativo.
O mundo móvel é a novidade da vez, a competitividade aumenta a cada dia e certamente este é o momento ideal para que as empresas se tornem ícones. Mas, apenas software não consegue sobreviver e se perpetuar sozinho. Para obter sucesso é essencial realizar testes com excelência e produzir um software de qualidade.
Bliografia
NUNES, Fábio. Aplicativos móveis: por onde começar? Disponível em: http://idgnow.uol.com.br/blog/plural/2011/02/09/aplicativos-moveis-por-onde-comecar/
GUIMARÃES, Keila. “O mundo caminha para ser mobile”, diz executivo do Google. Disponível em: http://exame.abril.com.br/marketing/noticias/o-mundo-caminha-para-ser-mobile-diz-executivo-do-google
Artigo da Revista Engenharia de Software. Disponível em: http://www.devmedia.com.br/artigo-engenharia-de-software-introducao-a-teste-de-software/8035
Artigo da Revista Engenharia de Software edição 16. Disponível em: http://www.devmedia.com.br/artigo-engenharia-de-software-16-teste-funcional-utilizando-o-abbot-framework/14191
Artigo do Blog Modesto Justificação. Disponível em: http://modestojustificacao.blogspot.com.br/2012/07/teste-de-software-teste-de.html
Heineberg, Ricardo. Técnicas de Teste Funcional (Caixa Preta) Disponível em: http://testandosoftware.blogspot.com.br/2008/06/tcnicas-de-teste-funcional-caixa-preta.html
Hirayama, Roberto Mitsuake. Framework para testes e avaliação de sincronismo para aplicações de TV digital móvel. São Paulo: USP, 2006. Disponível em: http://www.teses.usp.br/teses/disponiveis/3/3141/tde-19092006-172310/pt-br.php