Pular para conteúdo

Teste end to end (Teste de ponta a ponta)

Teste end to end (Teste ponta a ponta)

Antes de iniciarmos a discussão sobre técnicas de testes, sendo TDD (Test Driven Development), BDD (Behavior Driven Development) e ferramentas para automação de teste, precisamos apresentar que a área de qualidade aborda um conceito que é chamado no syllabus_ctfl (BSTQB), de Pirâmide de Teste. Essa pirâmide é um modelo que demonstra que diferentes testes podem possuir diferentes granularidades. Olhando para testes de Ponta a Ponta, esse se enquadra em uma camada mais alta, o que indica uma menor granularidade de teste, seu isolamento e o tempo de execução. Com isso, demonstra que o teste de ponta a ponta é mais complexo e requer um maior acompanhamento e tempo de atuação, pois, de certa forma, permeia toda a cadeia de desenvolvimento, sendo assim mais abrangente. Para entender mais sobre Pirâmide de Teste, leia o capitulo 5.1.6 Pag:54 do Syllabus_ctfl_4.0.

1.0 - O que é TDD?

O Desenvolvimento Dirigido por Testes (TDD) é uma técnica de desenvolvimento de software que se baseia em um ciclo curto de repetições. O objetivo do TDD é a especificação e não a validação, ou seja, é uma maneira de pensar nas necessidades do projeto antes de escrever o código funcional.

Os passos do TDD incluem, primeiramente, o desenvolvedor escrever um caso de teste automatizado que define uma melhoria desejada ou uma nova funcionalidade. Em seguida, o código é produzido para atender a esse teste. Posteriormente, o código é refatorado para adequá-lo a padrões aceitáveis.

2.0 - BDD, a evolução:

BDD é técnica de desenvolvimento ágil que visa integrar regras de negócios com linguagem de programação, focando o comportamento do software. BDD é uma abordagem de desenvolvimento ágil que complementa o TDD. Ambas as técnicas compartilham a prática de orientar o desenvolvimento por meio de testes, mas BDD se destaca ao integrar regras de negócios com linguagem de programação e enfocar o comportamento do software, promovendo uma comunicação mais eficaz entre as partes interessadas.

A linguagem de negócio usada em BDD é extraída das Histórias de Usuário ou especificações fornecidas pelo PM/PO, que coletar essas informações com o cliente durante o levantamento dos requisitos.

No contexto do teste de software, o BDD permite que o analista de testes planeje e descreva seus testes antes mesmo do início do desenvolvimento. Dessa maneira, superamos o paradigma de considerar o BDD apenas como uma camada durante o desenvolvimento, passando a enxergá-lo como um processo integral ao longo de todo o projeto.

2.1 Escrevendo testes funcionais utilizando BDD

O planejamento e a escrita dos seus testes funcionais nesse momento criará um documento que pode ser utilizado por todos os membros do time, incluindo até mesmo o cliente em seu processo de homologação.

Estrutura do BDD?

Para estruturar os seus cenários de teste o BDD utiliza as palavras chaves:

Dado (Given);\ Quando (When);\ Então (Then).

Perguntas que o BDD responde :

O que testar;\ Como denominar os testes;\ Como entender porque um teste falha;\ Onde iniciar.

Comunicação entre equipes: na maioria das empresas de desenvolvimento de software é difícil fazer com que desenvolvedores e testadores trabalhem em conjunto. BDD possibilita essa integração porque os testadores podem escrever os cenários de testes para os desenvolvedores implementarem;

Compartilhamento de conhecimento: com desenvolvedores e testadores trabalhando juntos, ao longo do tempo, um irá transferir o seu conhecimento para o outro, criando assim uma equipe multifuncional;

Documentação dinâmica: algumas equipes ágeis afirmam que não documentam o sistema porque a manutenção destes artefatos é custosa. Usando os frameworks de BDD estes artefatos são gerados dinamicamente sem nenhum esforço adicional.

Exemplo de escritas de teste funcional utilizando BDD:

  • Definido no documento MAGNA
BDD BDD Escrita
DADO Que sou um usuário XPTO
QUANDO Insiro meu cartão
ENTÃO Acesso minha conta via Internet Banking e visualizo meu saldo atual em tela

Ou mais detalhado utilizando o "E"

BDD BDD Escrita
DADO Que sou um usuário XPTO
E Necessito acessar o saldo de minha conta corrente Online
QUANDO Insiro meu cartão
ENTÃO Acesso minha conta via Internet Banking e visualizo meu saldo atual em tela
  • Exemplo utilizado na automação de teste

image

2.2 Ciclo de vida do BDD

image

2.3 Níveis de testes

2.3.1 Testes unitários

Testes unitários para determinar se os componentes ou unidades individuais do software ou da aplicação correspondem aos requisitos de funcionalidade. A realização de testes unitários assegura que as peças funcionais mais pequenas do software estão a funcionar corretamente.

Vantagens dos testes unitários:

  • Determinar a qualidade global do seu código

  • Encontrar bugs de software

  • Ter documentação para compreender melhor a interface

2.3.2 Testes Funcionais

Também é conhecido como teste “caixa - preta”, são os testes definidos de acordo com os requisitos funcionais do software. Como não há conhecimento sobre a operação interna do programa, o analista concentra-se nas funções que o software contemplará.

Vantagens dos testes funcionais:

  • Funções incorretas ou omitidas;

  • Erros de interface;

  • Erros de comportamento ou desempenho;

  • Erros de iniciação e término.

2.3.3 Teste de Regressão

Garantir que qualquer novo código, atualizações, ou correções de bugs não quebraram a funcionalidade existente da aplicação ou software ou causaram quaisquer instabilidades independentes das características.

Vantagens dos testes de regressão:

  • Assegura que as correções ou alterações do software não afetam a forma como as partes mais antigas do software funcionam com a mesma funcionalidade

  • Assegura que os problemas que já resolveu anteriormente não voltem a ocorrer

2.4 Ferramentas de Automação de Testes

2.4.1 Ferramenta Robot Framework

Robot Framework é uma estrutura genérica de automação de teste de código aberto que fornece uma abordagem de automação fácil de usar e baseada em palavras-chave. Ele é escrito em Python e permite aos usuários criar casos de teste de alto nível que podem ser facilmente traduzidos em scripts de automação executáveis ​​por máquina.

Vantagens de utilizar Robot framework

Linguagem Clara e Simples:

  • O Robot Framework utiliza uma linguagem de fácil leitura e escrita, que se assemelha a linguagem natural. Isso facilita a criação e manutenção dos casos de teste.

Suporte à Linguagem Keyword-Driven:

  • O Robot Framework é baseado no conceito de automação orientada por palavras-chave (keyword-driven), o que permite a criação de scripts de teste usando palavras-chave que descrevem ações ou verificações.

Suporte a Bibliotecas e Extensibilidade:

  • Ele suporta várias bibliotecas e pode ser estendido com bibliotecas customizadas, permitindo integração fácil com diferentes tecnologias e ambientes.

Facilidade de Integração:

  • Pode ser integrado com outras ferramentas e frameworks, como Selenium para automação de testes web, Appium para testes mobile, entre outros.

Geração de Relatórios:

  • O Robot Framework gera relatórios de execução detalhados e logs, facilitando a análise de resultados de teste.

Suporte à Paralelização:

  • Pode executar casos de teste em paralelo, acelerando o processo de execução de testes em grandes conjuntos de testes.

Suporte à Data-Driven Testing:

  • Facilita o uso de abordagens de teste orientadas por dados, onde os dados de teste são separados dos scripts de teste.

Comunidade Ativa:

  • O Robot Framework possui uma comunidade ativa que contribui com bibliotecas, plugins e suporte, o que é benéfico para solucionar problemas e manter a ferramenta atualizada.

Vários cenários podemos utilizar o robot;

  • Teste de aceitação

  • Teste de regressão

  • Teste funcional

  • Teste de integração

  • Integração Contínua/Entrega Contínua (CI/CD)

  • Teste de API

2.4.2 Ferramenta Cypress

O Cypress é uma ferramenta com facilidade de uso e integração com outras ferramentas, oferece uma solução eficiente e eficaz para automação de testes de aplicações web.

Vantagens do cypress

Tempo de Execução Rápido:

  • O Cypress é conhecido por sua execução rápida de testes. Ele é projetado para rodar dentro do navegador, o que permite um acesso direto ao DOM, eliminando a necessidade de esperas explícitas e melhorando a eficiência.

Visualização em Tempo Real:

  • O Cypress oferece uma visualização em tempo real dos testes enquanto são executados. Isso é útil para debugar e entender o que está acontecendo em cada etapa do teste.

Suporte a Testes End-to-End e Unitários:

  • O Cypress suporta tanto testes end-to-end (E2E) quanto testes unitários, proporcionando uma solução abrangente para diferentes tipos de testes.

JavaScript como Linguagem de Scripting:

  • Os testes no Cypress são escritos em JavaScript, uma linguagem de programação amplamente utilizada, o que facilita para os desenvolvedores e testadores se familiarizarem com a sintaxe.

Recarregamento Automático (Hot Reloading):

  • O Cypress recarrega automaticamente a aplicação durante o desenvolvimento dos testes, facilitando a visualização de alterações feitas no código da aplicação.

Fácil Configuração e Instalação:

  • A configuração do Cypress é considerada fácil e rápida. Ele pode ser instalado e configurado com poucos comandos, tornando o processo de configuração acessível.

Ampla Compatibilidade com Navegadores:

  • O Cypress é compatível com vários navegadores populares, incluindo Chrome, Firefox, Edge e Electron, permitindo testar em diferentes ambientes de execução.

Poderosas Ferramentas de Debugging:

  • O Cypress oferece ferramentas de debugging poderosas, permitindo aos desenvolvedores e testadores identificar facilmente problemas e analisar o comportamento do aplicativo durante os testes.

Gráficos e Relatórios Detalhados:

  • Gera relatórios detalhados e intuitivos, ajudando a identificar falhas e entender o desempenho dos testes de maneira clara.

Comunidade Ativa:

  • O Cypress possui uma comunidade ativa, o que significa que há uma abundância de recursos, tutoriais e suporte disponíveis online.

Vários cenários podemos utilizar o Cypress;

Testes End-to-End (E2E):

  • Verificar a funcionalidade de ponta a ponta de um fluxo de usuário.

  • Testar transições entre diferentes páginas e componentes.

  • Validar formulários e interações complexas.

Testes de Integração:

  • Garantir que diferentes partes do sistema funcionem bem juntas.

  • Verificar a integração entre front-end e back-end.

Testes Unitários:

  • Testar unidades isoladas de código, como funções e métodos.

  • Validar comportamentos específicos de componentes ou módulos.

Testes de Regressão:

  • Certificar-se de que as novas alterações no código não quebram funcionalidades existentes.

  • Automatizar casos de teste repetitivos para garantir a estabilidade do aplicativo.

Testes de Performance:

- Avaliar o desempenho da aplicação durante interações do usuário.

  • Medir o tempo de resposta e carregamento de páginas em diferentes cenários.

Testes de Layout Responsivo:

  • Garantir que a aplicação seja responsiva em diferentes tamanhos de tela.

  • Testar a adaptação do layout em dispositivos móveis e desktop.

Testes de API:

  • Integração com ferramentas de teste de API para validar interações entre front-end e back-end.

  • Automatizar testes de chamadas de API e respostas.

Testes de Segurança:

  • Validar a segurança da aplicação contra ameaças comuns.

  • Testar a entrada de dados para evitar vulnerabilidades.

Testes de Fluxos de Pagamento:

  • Verificar o processo completo de pagamento em uma aplicação de comércio eletrônico.

  • Testar a integração com sistemas de pagamento.

Testes de Carga e Estresse:

  • Avaliar o desempenho da aplicação sob carga intensiva.

  • Testar limites de capacidade e identificar pontos de falha.

2.5 - Conclusão do Teste de Ponta a Ponta

Validar de forma assertiva a produção de códigos fontes desenvolvidos por uma equipe técnica é uma premissa fundamental para garantir entregas aderentes aos padrões de qualidade em projetos de desenvolvimento de software. Mas como podemos atingir essa assertividade e assegurar entregas de qualidade? Como monitorar o processo de desenvolvimento para garantir códigos fontes robustos e conformes aos padrões estabelecidos, seja pela empresa ou pelo mercado?

Uma das abordagens para tornar isso possível é a utilização de testes de Ponta a Ponta, independentemente de estarmos empregando TDD, BDD, com ou sem ferramentas de automação de testes. A realização de testes, validando do início ao fim do processo, pode garantir entregas de produtos com menor incidência de falhas..

Entretanto, é importante ressaltar que garantir a qualidade de um produto ou código envolve outras questões, conforme discutido em documentos disponíveis no site do MITH. Em todo caso, a consideração de testes de software que abrangem um contexto mais amplo do sistema sendo validado é crucial e deve ser tratada com seriedade nas fases de iniciação e evolução de projetos.