A qualidade do software entregue é uma das grandes preocupações da Cubos. Mas como é possível garantir que um emaranhado de centenas, milhares ou até milhões de linhas de código produzam um aplicativo que se comporte exatamente como deveria? Será que toda vez que você for lançar uma versão do seu app você precisa verificar se tudo que já foi feito funciona corretamente? O correto seria que sim, mas não necessariamente isto precisa ser feito por um humano, nós colocamos o computador para trabalhar pra gente!

Para que possamos realizar testes de maneira automatizada nós escrevemos testes. Estes testes são porções de código que irão verificar se o aplicativo se comporta da maneira esperada. Basicamente, iremos verificar se o app realiza todas as funcionalidades propostas e se as telas estão de acordo com o design projetado.

dino

Imagine um aplicativo de um restaurante responsável pelo cálculo da conta do usuário, nós precisaríamos testar se:

  1. O aplicativo calcula o valor final da conta de maneira correta (com gorjeta, soma do valor de todos os produtos, etc..);
  2. Todos os produtos consumidos pelo cliente estão corretamente listados;
  3. Ao clicar em “Finalizar Conta”, o garçom é acionado para o que usuário possa realizar o pagamento;
  4. […]
    No desenvolvimento de um aplicativo para smartphones existem 2 tipos principais de teste: Teste de Unidade e Testes de Interface.

Teste de Unidade
Os testes de unidade são responsáveis por verificar se uma determinada unidade do código funciona de maneira correta. Imagine o seu aplicativo como o chão de fábrica de uma montadora de carros. Cada setor (no caso de software, uma unidade), será responsável por montar uma parte do carro. No final, temos um carro (ou software) pronto para ser entregue. Nos testes de unidade, iríamos verificar se cada setor está montando uma determinada parte do carro corretamente.

Voltando para o exemplo do restaurante, suponha que seu app precise mostrar uma lista com todos os produtos cadastrados salvos na nuvem:
lista
Nesta funcionalidade de mostrar a lista de produtos nós iríamos responder:

  1. O aplicativo realmente consegue carregar a lista de produtos da nuvem de maneira correta? Os dados que enviamos para a nuvem estão corretos?
  2. Conseguimos mostrar a lista de produtos em forma de lista como desejamos? Todos os dados carregados da nuvem estão visíveis?
  3. Nós salvamos os dados da lista no celular? Estes dados são salvos de maneira correta?
  4. Todos os dados de produto estão presentes na tela?

Teste de Interface
No teste de interface nós escrevemos código que faz com que possamos simular a ação de um usuário comum ao interagir com o aplicativo. Este “robô” irá clicar nos botões, digitar o conteúdo nos campos de texto e outras ações que um usuário comum realizaria. Com isso, nós podemos fazer testes como: “Se meu email estiver incorreto, o botão de salvar está desabilitado?” e “Quando eu clico no botão sair, ele me redireciona para a tela de Login?”.

infinito

Ao implementar este tipo de teste, não precisamos de alguém que fique clicando no app e verificando se ele se comporte de maneira correta, o robô faz tudo isso para você :D

Considerações Finais
Apesar de ser uma ferramenta essencial para a entrega de um software de qualidade, testes automatizados são muitas vezes negligenciados. A razão varia muito, desde do custo de se realizar os testes no curto prazo até a falta de experiência da equipe.
teste
No curto prazo, a implementação de testes é custosa, mas à medida que novas funcionalidades são adicionadas em seu aplicativo, a maior confiança no código já desenvolvido reduz bastante o custo de desenvolvimento e manutenção de software.

Fontes:
Livro: Pragmatic iOS Testing, by Orta Therox
https://www.raywenderlich.com/150073/ios-unit-testing-and-ui-testing-tutorial
https://www.leanpanda.com/blog/2015/09/24/how-to-sell-test-development/