Otimizando o Desenvolvimento de Sistemas com a Automação de Testes

Realizar testes em sistemas sempre foi um grande desafio, pois eles representam a validação final de um projeto, módulo ou nova funcionalidade. Testes eficazes requerem tanto o refinado conhecimento de todas as características do sistema como bastante tempo para serem realizados de forma a cobrir essas características e antecipar a maior quantidade de problemas possíveis. Isso se torna um gargalo cada vez maior à evolução dos sistemas, na mesma proporção em que crescem em funcionalidades. Nesse artigo apresentamos como a automação de testes pode ser uma ferramenta para reduzir ou eliminar esse gargalo, resultando em sistemas melhores para o usuário final e menores custos de manutenção para os desenvolvedores do sistema.

O que é Automação de Testes?

Automação de Testes é um processo de garantia de qualidade, em que utilizamos em um sistema ferramentas ou frameworks, tornando o processo mais eficiente.

Quando empregada de forma estruturada, a equipe consegue tanto agilidade nas entregas como realizá-las com código de alta qualidade.

E qualidade é fundamental: “Informações de mercado dizem que mais de 90% dos sistemas são liberados com graves defeitos”, segundo Rios e Moreira Filho, que também acrescentam que esses defeitos resultam em:

Aumento de falhas devido à qualidade de código pobre;

  • Alto custo de desenvolvimento;
  • Atraso no Time-to-Market devido à ineficiência do processo de testes;
  • Alto custo de suporte ao sistema.

Podemos destacar algumas raízes desses problemas:

Informalidade da prática de testes, onde não são aplicadas estratégias nem metodologias de testes;

  • Os testes são delegados apenas para os desenvolvedores que, apesar de serem capacitados para desenvolvimento de um sistema, não possuem o perfil de testador, não gostam de testar softwares ou não têm capacitação apropriada;
  • A abordagem de automação de testes, quando adotada, é aplicada apenas durante o desenvolvimento do código-fonte e pouco esforço é feito para testar outras camadas que são tão importantes quanto o código (ex. Interface de Usuário, APIs).

Com isso, quando aplicamos técnicas como segregação de testes em camadas percebemos o quanto a Automação de Testes se faz imperativa para se alcançar melhores resultados, diminuindo o surgimento e os impactos desses problemas.

A Pirâmide de Testes

Um dos principais pontos para a otimização do desenvolvimento de software é a Automação de Testes segregada por camadas, também conhecido como Pirâmide de Testes. A principal vantagem dessa estratégia é garantir uma maior cobertura de testes na aplicação, fazendo uma distribuição desses testes de acordo com a responsabilidade de cada camada e obtendo um feedback rápido para o time com o isolamento dos testes nessas mesmas camadas. A maior quantidade dos testes localiza-se na base da pirâmide, pois são mais rápidos de serem executados e tem um custo mais baixo de implementação. À medida que subimos na pirâmide, os testes demandam mais esforços em preparação, dependem da integração com outros componentes e, com isso, demoram mais para serem executados.

Por outro lado, não seguir esse padrão leva o time a um outro caminho, um anti-padrão conhecido como “Cone” por ter a forma de uma pirâmide invertida, tendo a maior parte dos testes realizados manualmente, gerando altos custos e tendo resultados tardios.  

Testes Unitários/ Componentes

Estes são os mais conhecidos e frequentemente usados pelo time por possuírem uma velocidade maior de execução e um custo menor de elaboração, pois são realizados durante a fase de desenvolvimento do software. Na base da pirâmide são testadas as menores unidades da aplicação, podendo ser os métodos de uma classe ou as funções de um módulo e os componentes que são a integração entre outras classes. É importante saber que os testes unitários podem se basear tanto nas regras de negócio da aplicação quanto nas regras do sistema.

Os testes unitários e de componentes devem ser robustos para dar base de apoio para as demais camadas e, de longe, são os que tem o maior ROI (retorno sobre investimento): com pouco investimento, é coberta uma ampla gama de situações verificadas.

Testes de Serviços (API)

Estes são testes que apoiam o time de desenvolvimento e verificam se a aplicação atende as funcionalidades especificadas. Aqui se concentram os testes de aceitação e testes que cobrem um conjunto de funcionalidades maior do que os testes unitários. A camada de API é evidenciada nesse nível e os requisitos são testados sem a atuação da interface do usuário. Ao invés disso, as entradas e configurações são escritas e as saídas são comparadas com os resultados esperados. São testes rápidos e menos custosos do que os testes  GUI pois dispensam a camada de apresentação, mas são mais custosos e lentos em relação aos testes unitários por cobrirem uma parte maior do sistema e acessarem banco de dados e outros componentes. Eles podem também ser escritos sem que necessariamente todas as camadas estejam prontas, servindo como balizadores do time para saber até que ponto o código a ser colocado em produção atende as regras definidas pelo negócio e pela a aplicação.

Testes de Interface (GUI)

Os Testes de Interface são geralmente escritos após termos uma versão avançada do código de todas as camadas que irão à produção. Esses testes são usados para validar o fluxo de navegação do usuário, aspectos do negócio, performance, acessibilidade e, também, para verificar se, após a alteração do código ou de algum novo requisito, as demais funcionalidades existentes não foram afetadas de forma a causar um defeito na aplicação. Estes testes usam a interface do usuário e por isso são mais caros e demorados que as duas outras camadas. Como são testes mais lentos do que as demais camadas inferiores, eles devem formar apenas uma pequena porção dos testes. Também são bastante úteis para testar aplicações que não tem o código de produção acessível como ferramentas de mercado, ERPs e outros.

Conclusão

Utilizar uma boa estratégia de distribuição de testes automatizados entre as diversas camadas gera grandes vantagens, como rápida detecção e isolamento de problemas. Porém, os testes manuais continuam sendo importantes para validar os testes de aceitação e explorar outros cenários não automatizados. Também é bom deixar claro que a pirâmide de testes deve ser implementada sempre analisando o contexto da organização. Não faz sentido realizar testes de GUI se as aplicações são apenas API’s, assim como existem cenários que apenas os testes de interface poderão ser executados, pois trata-se de uma aplicação em que o código não é exposto. Mas, igualmente importante, a estratégia é a mudança de mentalidade em direção à maior automação de testes e a captura dos benefícios dessa abordagem.

Gostou do artigo? Quer saber mais? Deixe sua opinião sobre essa otimização nos testes e conecte-se com a P4Pro.

Otimizando o Desenvolvimento de Sistemas com a Automação de Testes

Um pensamento em “Otimizando o Desenvolvimento de Sistemas com a Automação de Testes

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para o topo
pt_BRPortuguese