quarta-feira, 6 de agosto de 2014

Ferramentas de Testes em Aplicativos para Celular

De acordo com o artigo anterior sobre Automação dos Testes em Aplicativos para Celular que relata sobre a importância de realizar testes automáticos em aplicativos para celular, segue abaixo uma lista das principais ferramentas com este propósito. Algumas das ferramentas são pagas, mas possuem a versão trial e outras são open source.

Ferramentas Open Source:

  1. Monkey Talk: esta ferramenta pode ser usada para automatizar testes funcionais para iOS e Android. Ela dá suporte a JavaScript e pode ser integrado ao Eclipse.
  2. NativeDriver: é uma implementação da API de WebDriver e está trabalhando em drivers para Android, iOS e Windows Mobile / Windows Phone.
  3. TestingWithFrank: é basicamente uma ferramenta equivalente ao Selenium, só que para aplicativos de iOS. Ela reúne várias ferramentas open source, como: UISpec, Cocoahttpserver e Cucumber. O objetivo dela é automatizar os testes de aceitação através da interface gráfica para um aplicativo de iPhone ou iPad.

Ferramentas Pagas:

  1. Robotium: é uma ferramenta poderosa para escrever testes automáticos confiáveis ​​em um mínimo de tempo. Os testes são escritos em Java e há projetos para escrevê-los em outras linguagens como Python. Os testes não podem ser executados nos celulares, apenas no emulador.
  2. EggPlant: suporta várias plataformas de desenvolvimento móvel, tais como iOS, Android e Windows Mobile / Phone.
  3. Ranorex: ela pode ser usada para testar automaticamente aplicações para celular em iOS, Android e Windows 8. Ela permite gravar diretamente os seus testes no celular para construir seus testes.
  4. SilkMobile: ferramenta de automação de teste para web, iOS, Android, Blackberry e Windows Phone, que permite criar e executar os testes automatizados.
  5. SeeTest: ferramenta para iOS, Android, Blackberry e Windows Phone. Ela permite que você grave seus testes em dispositivos reais e pode ser usada para construir multi-plataforma de automação de teste suites.
  6. T-Plan Robot: é uma ferramenta para várias plataformas como Windows, Linux ou Mac. Realiza testes através de uma simulação da interface gráfica do aplicativo para celular, gravando em scripts os testes para que possam ser executados posteriormente. 

sábado, 28 de junho de 2014

Sobre Automação dos Testes em Aplicativos para Celular

 Cada vez mais aplicativos para celular são criados e utilizados por muitas pessoas em seus tablets e smartphones. Desenvolver e realizar testes nestes aplicativos de forma ágil para que eles sejam lançados de forma satisfatória e rápida não é fácil.

Para que uma empresa de aplicativos se mantenha no mercado, é importante que ela possua boas avaliações de seus usuários. Pois, caso contrário, poucos irão se interessar pelos produtos com baixa avaliação e pesquisarão pelos mais bem avaliados.

O que pode influenciar nas avaliações destes aplicativos, além da sua utilidade e facilidade de uso, é o número de falhas que ocorrem para os seus usuários. Se o número de falhas for muito alto, os usuários vão desinstalar o aplicativo e fazer um comentário negativo sobre aquele produto.

Com isso, testes funcionais são bem relevantes para que as empresas consigam se manter no mercado, lançando novos aplicativos e mantendo nele os que já produziram. Os testes funcionais ajudam a equipe a identificar o quanto antes se o aplicativo se comporta conforme o esperado e se não produz nenhuma falha durante o seu uso.

Desta forma, quando se inicia um projeto de desenvolvimento de aplicativos para celular é importante fazer um planejamento de quais tipos de testes serão realizados, como e quando serão testados e até mesmo se será necessário automatizar algum teste.

Realizar teste em um aplicativo é equivalente a fazer testes em uma aplicação web. No entanto, a frequência em que os aplicativos são atualizados é muito maior do que as aplicações web. Isto indica, que frequentemente uma versão daquele aplicativo foi lançada, logo, novos testes tiveram que ser realizados, a fim de verificar se houve alguma falha naquela nova versão.

Diante de tantas atualizações nos aplicativos, é mais indicado que sejam realizados testes automáticos, já que o teste manual demanda muito tempo. Devido a isto, seria inviável realizar testes de regressão diariamente, antes que cada versão fosse lançada.
 
Alguns desafios também são enfrentados durante os testes automáticos, como por exemplo, testar funções que utilizam o GPS, testar o comportamento do aplicativo quando a bateria está com carga baixa, entre outros.

Vale ressaltar que há aplicações que são simples o suficiente para não necessitarem de testes automáticos. Pois, os testes manuais podem ser realizados em pouco tempo. Outro cenário importante a ser considerado é a realização de testes automáticos de forma parcial, apenas nas partes do aplicativo que demandem rotinas repetitivas e com alto custo para realização dos testes.
 
Fonte: Schladebeck, A., Tiede, M. Automated Acceptance Tests for Mobile Applications: Thoughts on Test Strategy. Artigo publicado na revista Testing Experience, Pág. 34-38, Edição nº 26, Alemanha, Junho 2014.

segunda-feira, 6 de fevereiro de 2012

Pontos importantes sobre testes de aplicativos para celular ou tablet (mobile)

Atualmente, está bem comum o uso de celulares ou tablets com muitos aplicativos (mini-computadores). Geralmente, quem desenvolve aplicativos para estes aparelhos querem que eles sejam um sucesso, mas para isso é necessário testar muito. Pois, caso a aplicação possua muitos bugs, ninguém vai querer baixar, já que a nota de avaliação irá lá para baixo.

Antes de pensar em testar estes aplicativos, é importante ter em mente as categorias de aplicações para celular, que são: Aplicações baseadas em navegador; aplicações pré-instaladas e Aplicações instaláveis.

Se a aplicação do celular for para ser acessada em um navegador, é necessário verificar se a página não foi criada com uma grande quantidade de dados, por exemplo, com imagens em alta resolução. Isto é importante pois se o usuário estiver usando a internet disponível no celular, geralmente ela é lenta e algumas vezes o custo da internet é de acordo com a transferência de dados. Além disso, os dados geralmente não são armazenados em cache, isso significa que a cada acesso o usuário terá que esperar novamente o carregamento da página, a não ser que o usuário configure isso no navegador. Ainda para aplicações para navegador, verificar se a página se adapta à tela do celular, que geralmente é pequena.

As aplicações de celular que já vêm instaladas, geralmente são aplicações de configuração do aparelho, elas não podem ser desinstaladas, nem removidas e também não precisam de atualizações. Estas aplicações precisam ser muito bem testadas pelo fabricante do aparelho, porque qualquer erro poder ser crítico para o funcionamento do celular.

No caso de uma aplicação que é instalada pelo usuário, às vezes elas requerem internet ou atualizações constantes para um bom funcionamento. Geralmente, estas aplicações estão disponíveis em uma loja de aplicativos (App Store or Market) ou podem ser transferidas via cabo USB diretamente de um computador. Elas podem também ser transferidas via Bluetooth, Infra-vermelho ou via Rede Wireless (usando outros aplicativos).

Alguns dos aparelhos possuem touch screen (o toque na tela) como entrada de dados, seja para passar a página de um livro ou para clicar em um link de uma página WEB. Há muitas dúvidas de como realizar testes para estes tipos de aplicativos com touch screen. Pode-se dizer que muitos dos testes realizados para sistemas WEB ou Desktop podem ser utilizados nestes aplicativos, por exemplo, validação de campos, ortografia, etc.

Entretanto, para aplicativos em celular ou tablet, algumas preocupações a mais são necessárias, como por exemplo o processamento, o consumo de bateria, a quantidade de armazenamento de dados, entre outros. O processamento é um item bem importante, já que muitos aparelhos de celular não possuem processadores velozes e ninguém vai querer usar um aplicativo que deixe o celular lento, não é?

sábado, 21 de janeiro de 2012

10 dicas para o sucesso do teste de software

1) Comece cedo e esteja preparado

O processo de teste deve iniciar o quanto antes com a revisão dos requisitos e dos documentos de design. Isso pode diminuir bastante o custo do projeto final, evitando bugs futuros. Além disso, preparar os roteiros de teste antes do software estar pronto pode economizar tempo valioso no final do projeto.

2) Escolha a técnica de teste que melhor atende às suas necessidades

O processo de teste deve se adaptar ao processo de desenvolvimento. A escolha do melhor processo vai depender de diferentes aspectos, como: tamanho do sistema, quantidade de desenvolvedores, o risco para o negócio, o tempo, etc.

3) Seja prático

Se não há uma equipe de teste na sua empresa para garantir a qualidade do software ou mesmo você percebe que o gerente de projeto acha que não será necessário testar o sistema por falta de tempo. Neste caso, pode ser melhor contratar uma equipe externa para realizar os testes e manter sua equipe focada apenas no desenvolvimento e correção de bugs.

4) Revise, revise e revise

Garanta logo no início do projeto que os documentos de requisitos estão corretos e sem ambiguidades. Esta garantia pode ser conseguida através da revisão dos documentos. Desta forma, provavelmente 65% dos defeitos na fase de desenvolvimento serão evitados. O revisor deve estar bem concentrado na tarefa e não deve ser interrompido, uma boa dica é fechar janelas de e-mail, bate-papo etc para não desviar a atenção. Usar algum método de revisão é bastante importante, como um simples checklist sobre o que deverá ser revisado.


5) Priorize

Às vezes não é possível testar tudo de um software quando ele possui muitas funcionalidades, então é importante criar alguma regra de prioridade para as funcionalidades a serem testadas. Análise de risco e a frequência do uso das funcionalidades é uma boa maneira de priorizar os requisitos.


6) Meça

Às vezes é importante saber qual o custo e quão eficiente é a equipe de teste ao encontrar defeitos no sistema? A chave para conseguir responder estas perguntas é começar a medir.
Métricas são informações que podem ser colhidas durante o desenvolvimento do projeto, como: número de cenários, número de defeitos encontrados, tempo gasto para executar um roteiro de teste, etc. Quanto antes for iniciada a medição dos dados melhor será a avaliação dos resultados.

7) Saiba quando deve parar de testar

Uma forma de saber quando deve parar de testar é quando o custo para encontrar um novo defeito é maior que o risco que aquele defeito no sistema pode causar para o usuário final.
Além disso, pode-se definir um critério de parada dos testes, por exemplo, quando 90% dos scripts de teste tiverem sido executados.
Se nenhum critério tiver sido definido, os testadores irão testar até não encontrar mais defeitos e todos os bugs tiverem sido resolvidos.

8) Preserve

Organize bem os roteiros de teste e guarde-os com cuidado, pois é bem provável que eles serão reutilizados na fase de manutenção e evolução do software. Isto poderá economizar cerca de 30% a 50% do esforço de realizar o teste de regressão.

9) Comunique

Assegure-se que a comunicação entre os membros das equipes de desenvolvimento e teste de software é clara e objetiva. Pois, caso contrário muitos erros podem ser causados por esta falta de comunicação. Utilize padrões de linguagem e ferramentas para difundir melhor as informações, por exemplo, uma ferramenta de gerenciamento de bugs.

10) Seja simples

Muitos gerentes de qualidade de software não sabem qual o melhor processo de teste e técnica deverá ser utilizada num projeto. Uma forma fácil de escolher é garantir a simplicidade do processo, sem burocracia. Além disso, o processo não poder ser cansativo para a equipe. Escolher a melhor abordagem é essencial para garantir a qualidade dos sistemas desenvolvidos.




Fonte: Revista Testing Experience. Test Techiniques in Practice. pág. 52-53, Germany, Setembro 2008.

quinta-feira, 27 de janeiro de 2011

Alguns motivos para implantar testes na sua empresa

Existem muitos motivos para implantar uma equipe de teste em uma empresa de construção de software. Várias empresas ainda não estão cientes da importância dos testes de software. No entanto, a maioria dos processos de desenvolvimento prevê atividades de verificação e validação, até mesmo em processos ágeis.

Quando um software é entregue para o cliente sem testes, ele pode causar vários problemas para a empresa que o desenvolveu, além dos prejuízos para o próprio cliente. Como existem vários tipos de teste de software, há empresas que preferem adotar os testes de unidade, realizados pelo próprio programador e outras empresas investem em testes funcionais, elaborados e executados por uma equipe de teste especializada.

Abaixo estão alguns motivos para implantar testes na sua empresa:
  1. Quando um produto não é testado, há uma grande chance deste produto possuir erros ou defeitos, assim este produto não vai satisfazer as necessidades o cliente.
  2. O cliente quando não está satisfeito com o produto dificilmente irá contratar novamente a empresa.
  3. Quando não há qualidade no produto, a empresa fica com imagem negativa, logo é necessário mais investimento em marketing.
  4. Se os erros são encontrados pelo cliente, o custo para corrigir estes erros é muito maior do que quando o sistema ainda está em desenvolvimento.
  5. Quando não há uma equipe para testar o sistema, o gerente exige dos programadores um sistema com qualidade, mas isso difícil, pois nem sempre conseguimos ver os próprios erros cometidos.
  6. Com os testes, é possível ter uma maior garantia de que o sistema não possui erros críticos, os quais, quando existem, podem causar grandes prejuízos para o cliente.
  7. Com os testes, novos clientes ficarão interessados em seus sistemas devido à recomendações.
  8. Com os testes, os programadores, apesar de parecer que não, ficam bem satisfeitos e motivados com os elogios ao sistema feitos pelo cliente, já que ele não encontra muitos bugs.
  9. Com os testes, minimiza-se a necessidade de atender telefones para ajudar os usuários a utilizarem o sistema, logo, menor custo com mão-de-obra para helpdesk.
  10. Quando há uma equipe de teste para testar o sistema, todos saem ganhando: o dono da empresa (menos gasto com marketing e mais prestígio para a empresa), o cliente (satisfação e confiança no sistema), os usuários (conseguem usar o sistema de forma útil e correta), os programadores (motivação por criar sistemas com qualidade) e os testadores (mais empregos).
O item 4 é um dos pontos mais importantes a ser levado em consideração, pois quando um sistema é entregue para o cliente sem ser verificado pela equipe de testes, ele passará para a etapa de 'manutenção' e nesta etapa, geralmente, a equipe que desenvolveu o sistema já é alocada para um novo projeto. Como não é possível prever a demanda de correções para o sistema, é provável que haja uma sobrecarga de novas tarefas para os desenvolvedores. Assim, o novo projeto começa a atrasar, pois parte da equipe terá que ser alocada novamente ao projeto antigo. Além disso, se a equipe que desenvolveu o sistema não trabalhar mais na empresa, então o custo para corrigir será ainda maior, pois um programador que nunca viu o sistema terá uma certa dificuldade para corrigir os erros do sistema, logo isso demanda mais tempo e consequentemente mais custo para a empresa.

Assim, é importante pensar duas vezes antes de decidir não colocar uma equipe de testes na sua empresa para testar todos os sistemas desenvolvidos. Motivos não faltam para criar agora mesmo uma equipe de teste. Se sua empresa já tem uma equipe de teste, esta deverá ser bem valorizada, pois talvez o futuro da empresa dependa desta equipe.


terça-feira, 30 de novembro de 2010

Como decidir se os testes devem ser automatizados?

Antes de sair utilizando qualquer ferramenta para automatizar seus testes, é necessário analisar vários fatores que irão definir o sucesso ou não dos seus testes. Algumas ferramentas podem não ser suficientes para representar todos os seus testes, neste caso não faz sentido utilizá-las.


Além disso, o software a ser testado pode estar em constante atualização, onde seus componentes são modificados, logo os casos de teste automáticos também terão que ser alterados, caso contrário não poderão ser re-executados.

A seguir serão apresentados alguns fatores [1] que podem ajudar a decidir se os testes devem ser automatizados ou não.

1. Frequência da execução: é importante levar em consideração a quantidade de vezes que se pretende executar os testes, se for apenas uma vez, então a execução manual pode ser suficiente.

2. Geração de código reusável: se o código de teste criado para um caso de teste poderá ser facilmente reutilizado em outro caso de teste, então este pode ser um bom motivo para usar alguma ferramenta de automação.

3. Relevância do teste: se uma funcionalidade será utilizada mais vezes do que outras, às vezes pode valer a pena criar casos de teste automáticos para ela, por exemplo, casos de teste para login na aplicação.

4. Esforço para automatizar: deve-se ter em mente se valerá a pena o esforço para automatizar um roteiro de teste considerando a quantidade de vezes que aquele roteiro poderá ser executado e se há casos de teste reusáveis.

5. Ferramentas de automação: para cada tipo de sistema a ser testado poderá ser utilizado diferentes ferramentas de automação dos testes. Isto deve ser cuidadosamente analisado antes de decidir qual ferramenta será utilizada.

6. Dificuldade de executar o teste manualmente: às vezes alguns casos de teste devem ser executados de forma exaustiva para um conjunto de diferentes usuários, neste caso é inviável realizar o mesmo teste para vários usuários. Logo, a automação será necessária.

Assim, estes
e outros fatores podem ser considerados no momento de decidir se os testes serão automáticos ou manuais. Mas é bom sempre lembrar que o principal objetivo de um caso de teste (automático ou não) é encontrar bugs no sistema.

[1] J. C., Oliveira, C. C., Gouveia, R. Q., Filho. A way of Improving Test Automation Cost-Effectiveness. Artigo publicado no CAST'06, Indianápolis, EUA, 2006.



DICA.: A revista Testing Experience deste mês disponível neste blog na seção de "Revistas Digitais Gratuitas" é sobre Ferramentas de Teste de Software, vale a pena dar uma olhada. :)

http://www.testingexperience.com/issues/testingexperience12_12_10.pdf


Testing Experience - 12ª Ed. Dez/2010

quinta-feira, 4 de novembro de 2010

Casos de Teste Fundamentais II

Além dos Casos de Teste Fundamentais observados no outro post, podemos identificar outros casos de teste que também são imprescindíveis para um roteiro de teste de qualidade, são eles:


i. Navegador: os sistemas web geralmente possuem comportamentos diferentes quando são visualizados em diferente navegadores. Com isso é importante criar um caso de teste para executar o sistema nos principais navegadores, por exemplo, IE7, IE8, Chrome, Firefox e Safari.
ii. Resolução do monitor: os sistemas web também podem ter exibições diferentes dependendo da resolução do monitor do usuário. Neste caso, é importante que seja criado um caso de teste para verificar o comportamento do sistema nas principais resoluções. Ex: 800x600, 1027x768. Existe um site que simula o sistema a ser testado nas diferentes resoluções (http://www.webconfs.com/web-page-screen-resolution.php).
iii. Perfil do usuário: Há sistemas que possuem diferentes perfis de usuários com diferentes privilégios. Neste caso, é importante criar diferentes casos de teste considerando na pré-condição o perfil do usuário. Inclusive deve haver casos de teste considerando que um usuário comum não pode acessar as funcionalidades de um administrador do sistema.
iv. Autenticação: Quando o sistema possui autenticação do usuário, é importante criar casos de testes para não permitir que um usuário não autenticado acesse o sistema.
v. Caracteres especiais: É importante criar casos de teste que verifiquem o comportamento do sistema quando são inseridos em campos de texto um link ou uma imagem. Pois, se o sistema processar o código HTML inserido, o link pode ser direcionado para um vírus ou para imagem indevida.
vi. Integridade dos dados: Verificar no banco de dados se os valores foram atualizados ou excluídos corretamente.
vii. Clique duplo: Ao criar um roteiro de teste para uma tela de cadastro, incluir um caso de teste que verifique o comportamento do sistema quando o usuário clica duas vezes no botão Salvar. Neste caso, o sistema não deve incluir 2 registros.
viii. Tempo de processamento: Verificar o tempo de processamento para carregar uma página ou um combo box não ultrapassa o tempo máximo esperado. No caso de listas, pode ser necessário incluir paginação para melhorar o tempo de processamento.
ix. Dados em uma tabela: Verificar se o texto contido em uma tabela possui alguma ordenação, se o alinhamento dos campos estão de acordo com o padrão especificado.
x. Alerta de Confirmação: É importante que hajam alertas de confirmação em botões cuja ação é de excluir ou cancelar uma operação. Criar casos de teste que verifiquem se ao clicar em 'Não', o sistema realmente Não Exclui ou Não Cancela a operação.

quarta-feira, 5 de maio de 2010

Testes de Regressão Automáticos com Selenium

Como os testes de regressão geralmente são executados após a correção de algum defeito ou após a adição de uma nova funcionalidade. Então, é comum que não sobre muito tempo para realizar os testes de regressão. Neste caso, utilizar alguma ferramenta para re-executar os testes seria ideal para minimizar o tempo para identificar se os defeitos foram corrigidos e também se novos defeitos não foram inseridos durante a correção.

Assim, existe algumas ferramentas que viabilizam a automação de testes funcionais para aplicações Web, por exemplo, Selenium, Watir, BadBoy etc. Estas ferramentas se comportam como um robô que à medida que o testador executa os testes pela primeira vez, a ferramenta vai guardando todos os eventos acionados na ferramenta, por exemplo, clicar em um botão, inserir informações em um campo, etc.

No entanto, apenas ir guardando os eventos não é suficiente, pois como um caso de teste possui o campo "Resultado Esperado", então é necessário indicar para a ferramenta o que é esperado após a execução de um conjunto de eventos ou ações. As ferramentas que automatizam os testes, a exemplo de Selenium, permitem adicionar assertivas que garantem que o sistema está se comportando conforme é esperado em cada execução.

Exemplo de verificações presentes na ferramenta
Selenium são:

  1. verifyTextPresent | login (quando você quer identificar a presença de algum texto da página.)
  2. verifyElementPresent | \\div[@id="main"] (quando você quer identificar a presença de um elemento "html" dentro daquela página.)

O verify do tipo "1" nem sempre é recomendada, pois em uma futura atualização da página pode acontecer daquele nome "login" ser alterado para "usuário". Neste caso, o teste iria falhar indevidamente.

O verify do tipo "2" é mais indicado, pois com ele é possível identificar um elemento "html" independente da alteração da ordem ou nome dos campos, pois o teste será sempre baseado no "id" daquele elemento. A notação utilizada para identificar os elementos pode ser através da linguagem XPath (http://www.w3schools.com/xpath/default.asp) ou Expressões Regulares (http://www.regular-expressions.info - bastante utilizada para verificar a máscara de um campo).

Como sugestão de uma ferramenta para automatizar os testes de regressão eu aconselho a ferramenta Selenium IDE, pois ela possui um plugin para o firefox, que auxilia na criação dos casos de teste.

Na tabela abaixo há um exemplo de um caso de teste criado usando a ferramenta Selenium, que contém a validação de um campo e-mail.

EmailInvalido
open /page
select pessoa_datanascimento_3i label=1
select pessoa_datanascimento_2i label=Junho
select pessoa_datanascimento_1i label=1998
clickAndWait pessoa_submit
verifyElementPresent //div[@class="span-11 colborder"]/h1[contains(text(), "Inscrições já Realizadas")]
clickAndWait link=Alterar Dados Pessoais
clickAndWait link=Editar meus dados pessoais
type pessoa_nome Roberto Soares
type pessoa_identidade 1224564
click pessoa_sexo_m
clickAndWait pessoa_submit
clickAndWait link=Editar meu endereço
type endereco_logradouro Rua Campos Bis
type endereco_cep 12345-678
type endereco_cidade Paulina
type endereco_bairro Almeida Lima
type endereco_email oi
clickAndWait endereco_submit
verifyTextPresent Email não é válido
verifyNotValue //*[@id="endereco_email"] regexp:^([a-zA-Z0-9_\-\+\.]+)@(([a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3}))|(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|25[0-5]|2[0-4]\d))$
type endereco_email email@
clickAndWait endereco_submit
verifyTextPresent Email não é válido.